Thursday, May 30, 2013

Sobre la "Lady Senadora"


Luz María Beristain es senadora por el PRD. Hace un par de días hizo un escándalo porque no pudo abordar un avión (llegó tarde) y por ende, como se siente única e irrepetible, amenazó, se burló, intimidó de cuantas maneras pudo, a la empleada de la aerolínea. Auí hay dos problemas a analizar: por una parte, estos políticos, senadores y diputados, con fuero, se sienten con derecho a todo. Si la señora llega tarde a tomar un avión, éste cierra las puertas a una hora precisa y las reglamentaciones internacionales impiden que se vuelva a abrir para que entren los que llegaron despues de cierta hora.

A mí me pasó una vez en un vuelo a Seattle. Llegué a Houston como con hora y media de tiempo para tomar la conexión, pero hubo que pasar una revisión en el propio aeropuerto, quizás por la consigna de que cualquiera puede ser un terrorista hoy en día.  La cola era inmensa. Cuando finalmente pude llegar a la sala donde mi vuelo salía, éste ya estaba cerrado. Hube de esperar otras dos horas para tomar el siguiente vuelo.

No importa pues que la cretina senadora se sienta parida por los dioses. Si hay un lugar donde se cumplen estas reglamentaciones es en los aeropuertos. No hay vuelta de hoja. No hay criterios que valgan. No hay excepciones. Si esa babosa señora no lo entiende, pues es porque vive en este mundito donde se le abren las puertas en muchas partes por su cargo de senadora, pero no por otra cosa. Incluso con tan alto cargo, no se paró el mundo para que la señora tomara el vuelo.

Por otra parte, es claro que con los teléfonos actuales, que graban todo, estas escenas -que se hacen populares rápidamente- reflejan la prepotencia de esta cretina y ya este país está harto de esto. De verdad. Lo mismo pasó con Lady Profeco, o las Ladies de Polanco, o el Gentleman de las Lomas. Todos después salen a disculparse. Pero ya es tarde, el daño está hecho. Lady Profeco, por ejemplo, la estúpida hija del que fue por meses el jefe de la PROFECO lo sacaron de su cargo. Interesante saber con qué cara saludará a su papá, al que indirectamente, por su pretendida impunidad, le quitaron la chamba.

Así las cosas. En este país donde el influyentismo es algo de todos los días, el exhibir a estos personajes que se sienten que son más que los demás, nos muestran simplemente que México no avanza... Y si avanza... lo hace a marchas forzadas.


Para terminar, esta caricatura que ,e ha hecho reír de buena gana:


Monday, May 27, 2013

Para evitar la adicción a Internet



Hoy en día, para muchas personas, no estar conectado a Internet parece ser lo peor que le puede pasar. Estamos acostumbrándonos a tener acceso a la red mundial fácilmente, tanto como lo es el teléfono. Y hoy mismo, con tanto teléfono inteligente, el acceso a Internet es algo ya cotidiano. Sin embargo, parece que estamos exagerando en su uso. Un dato relevante es que la gente consulta unas 10 veces por hora su celular para ver si no les ha llegado algún mensaje. Evidentemente el acceso a Internet es una de esas maravillas modernas, pero de igual manera, el exceso produce -entre otras cosas- una necesidad artificial imperiosa de conectarse a la red de redes

Y como todo en exceso no parece ser bueno, más de uno ha pensado en limitar el acceso a la red de alguna manera, para así, por ejemplo, no perder el tiempo. En realidad es fácil hacer esto: se desconecta la red WiFi, o la conexión alámbrica en la computadora y listo. Sin embargo, a los seres humanos nos ganará la ansiedad y ya estamos de nuevo poniendo el cable o restaurando la conexión inalámbrica.

¿Qué hacer? Una opción es entonces usar un programa que bloqueé el acceso a Internet por un tiempo determinado. Pensé entonces en escribir un programa que hiciese esta tarea. ¿Cómo se podrá hacer? Me metí entonces al siempre asertivo Google y le pregunté sobre el tema. No tardó en darme algunas referencias e incluso ejemplos, en el lenguaje que uso, Delphi 7, y así, en menos de un par de horas, tenía ya un programa que bloqueaba el acceso a Internet, sin necesidad de desconectar cables o deshabilitar la red WiFi.


Para hacerlo aún más efectivo, decidí entonces que el usuario estuviese imposibilitado para restaurar el acceso a Internet hasta que terminara el tiempo que el mismo usuario había puesto como margen para poder trabajar sin perder el tiempo entrando a Facebook, Twitter, o andar perdiendo la vida en inútiles chats, etcétera. Hecho esto, generé el programa instalador y listo. Ya puede el usuario bloquear el sistema de forma tal que no tenga acceso a la red por las siguientes N horas (hasta 8).

El programa debe correrse como administrador, sino no funcionará. Y desde luego, es posible deshabilitarlo de una manera muy simple, teniendo que rearrancar la máquina, cosa que ningún programador puede impedir.

Quien quiera el software gratuito pídamelo a morsa@la-morsa.com y se lo enviaré a su correo de inmediato.

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.

Tuesday, May 21, 2013

Quitando la marca de agua


Desde hace unos años doy el curso de Procesamiento Digital de Imágenes, en la Facultad de Ciencias (UNAM), y en dicho curso se ven las diferentes técnicas que se usan para transformar imágenes, fotos, etcétera. Uno de los temas es el de la "marca de agua", que en esencia en un mensaje que se pone sobre la foto de manera que esté presente sin ocultar la imagen misma. Esto es como fusionar dos imágenes, una que contiene -por ejemplo- información de los derechos de la foto, o quién es el autor o el propietario de la misma, con la imagen per se. Por ejemplo, la siguiente imagen, de iStockPhoto, muestra la fotografía pero en medio tiene esa marca de agua inquitable. Podemos ver la fotografía y si queremos, podemos comprar la foto (la cual viene ya sin la marca de agua, desde luego).


Las marcas de agua digitales son muy fáciles de hacer y en general se utiliza un algoritmo, denominado como "image blending", el cual puede verse aquí (en Delphi 7):

begin
      //leemos pixel de la imagen 2
      L := Image2.Canvas.Pixels[x,y];
      B2 := ((L shr 16) and $FF);
      G2 := ((L shr 8) and $FF);
      R2 := (L and $FF);
   
      //leemos pixel de la imagen 1
      L := Image1.Canvas.Pixels[Xa,Ya];
      B1 := ((L shr 16) and $FF);
      G1 := ((L shr 8) and $FF);
      R1 := (L and $FF);

      //calculamos pixelblend para la imagen de salida
      blendpixelR := R1 * alpha + R2 * (1.0 - alpha);
      blendpixelG := G1 * alpha + G2 * (1.0 - alpha);
      blendpixelB := B1 * alpha + B2 * (1.0 - alpha);

      //pintamos pixel blended en imagen 3
      BlendPixelRi := trunc(BlendPixelR);
      BlendPixelGi := trunc(BlendPixelG);
      BlendPixelBi := trunc(BlendPixelB);

      Cuantos := RGB(BlendPixelRi,BlendPixelGi,BlendPixelBi);
      if ((B2=0) and (G2=0) and (R2=0))
         then Image3.Canvas.Pixels[xA,yA] := Cuantos //RGB(B1,G1,R1)
         else Image3.Canvas.Pixels[xA,yA] := RGB(R1,G1,B1);
     


Es decir, tomamos un pixel de cada imagen, y ponemos un porcentaje del primero en la imagen resultante y el resto del porcentaje del segundo pixel. Lo que se ve es que las imágenes se superponen como por ejemplo, en esta imagen:



Mediante esta técnica, por ejemplo, las empresas que venden fotos comerciales pueden sentirse seguras de que con la marca de agua evitan que la gente use sus fotografías sin pagar los derechos correspondientes.

Sin embargo, hay otras razones para poner esta marca de agua. Por ejemplo, en 1972, cuando se hizo en Reikjavyk, Islandia, el Campeonato Mundial de Ajedrez, entre Fischer y Spassky, Halldór Petursson (1916-1977), un artista local muy famoso, dibujó dieciocho estupendas caricaturas del denominado Match del Siglo.

Halldór Petursson, firmando un autógrafo


Hoy encuentro que la colección completa de las tarjetas postales de Petursson están a la venta (cuestan unos 250 dólares), y probablemente ya se vendieron, pues el anuncio ya tiene mucho tiempo en esta página.

Sin embargo, quien las vendía puso las imágenes de cada postal con una marca de agua que dice "PREVIEW". Así, se pueden ver las ilustraciones sin temor a que se las "roben" o "pirateen". Evidentemente tener las imágenes originales sería sensacional, pero la verdad es que no estoy dispuesto -si es que aún se venden- a pagar esa cantidad.

Entonces pensé que quizás podría eliminar la marca de agua. Finalmente doy un curso de proceso digital de imágenes y entiendo de estos temas. Con esto en mente me senté a analizar las fotografías de las postales, usando para ello Photoshop.

Hallé que, aunque son en blanco y negro, el escaneo de las imágenes se hizo en color (por ello la palabra PREVIEW se ve en un rojo claro). Si las originales hubiesen sido escaneadas en tonos de grises y de ahí puesta la marca de agua, el proceso de quitar la misma sería fácil, pues cada pixel -en blanco y negro- tendría el mismo valor para el Rojo - (R)ed, Verde - (G)reen y Azul (B)lue, en el dibujo. Hallé pues que cada pixel en tono de gris corresponde a casi el tono de gris, con R casi igual a G y casi igaul a B. Distan por una o dos unidades.

Considerando esto mi plan fue entonces:

  • Leer la imagen original
  • Leer cada pixel y ver si se trata de un pixel en tono de gris, por lo que asumí que la diferencia entre las componentes de color no pasaría de unas 5 unidades
  • Si es un pixel en blanco y negro, lo dejo igual. En caso contrario, lo paso a blanco (R=G=B=255).

Realizo este proceso en toda la imagen.

Hallé que las cosas casi  funcionaron correctamente. Desafortunadamente el blanco en un pixel de color rojo lo quitaba, pero si atrás había un punto oscuro, entonces éste era totalmente eliminado.

Decidí entonces sacar un promedio y probar. En lugar de poner un pixel blanco donde hay uno de color rojo, puse la suma de (R+G+B) / 3 y hallé que esto aclaró la marca de agua, pero no lo suficiente. Entonces le agregué una constante, que es el brillo y entonces el proceso quitó casi "mágicamente", la marca de agua de cada postal.

He aquí un par de ejemplos del proceso (dé click para hacerlas más grandes). Las imágenes completas las puse en el blog de fotos de Bobby Fischer, por quien le interese verlas.





El software -a quien le interese ver qué hice ya en términos de código- puede pedírmelo  a morsa@la-morsa.com y a vuelta de correo lo tendra de forma gratuita. La opción de quitar la marca de agua solamente funciona para las postales de Petursson, pero enseña la idea detrás del proceso.

Sunday, May 19, 2013

Una jugada asombrosa


Dice la Wikipedia: Gyula Breyer aprendió a jugar en su infancia, y fue campeón de Hungría a los 18 años. En 1920 obtuvo su primer y último gran éxito, al ganar el torneo de Berlín por delante de Savielly Tartakower, Richard Réti, Géza Maróczy y Siegbert Tarrasch. Destacó en la modalidad de partidas a la ciega, en la que estableció una marca mundial al jugar 25 partidas simultáneas. A los 27 años un ataque cardiaco terminó con su vida.

Breyer era intimo amigo de Reti, y es difícil determinar qué ideas pertenecen a uno y a otro. Breyer era más radical. Llegó a decir que después de 1.e4 el blanco está agónico. Era un gran defensor del control del centro por medio de piezas, por lo que gustaba de jugar fianchettos.


Por su parte Johannes "Jan" Fredericus Samuel Esser (13 de octubre de 1877, Leiden – 9 de agosto de 1946, Chicago) fue un cirujano plástico que fue pionero en algunos métodos de cirugía reconstructiva en soldados heridos en la Primera Gran Guerra. Era además ajedrecista y fue una vez campeón de Holanda, ganando el titulo en un match contra Rudolph Loman, en 1913.

En la siguiente partida Breyer enfrenta a Esser, y en ella, el húngaro hizo una jugada asombrosa. La defino así porque su profundidad solamente revela el nivel de ajedrez que Breyer tenía. Observen y si quieren un buen reto, intenten por sí mismos hallar la jugada que da título a este artículo:

Breyer, Gyula - Esser, Johannes
Budapest, 1917

1. d4 d5 2. c4 c6 3. e3 Nf6 4. Nc3 e6 5. Bd3 Bd6 6. f4 O-O 7. Nf3 dxc4 8. Bb1 b5 9. e4 Be7 10. Ng5 h6

Breyer - Esser
Budapest, 1917
Juegan las blancas

11. h4!? una interesante idea. El ataque blanco puede volverse muy peligroso. Breyer estima sin duda que es jugable.11. ...  g6 12. e5 hxg5 13. hxg5 Nd5

y ahora, lector, lectora, ¿qué jugada cree que debe hacerse en esta posición? Dése tiempo, digamos cinco o diez minutos. No mueva las piezas si es que está usando un tablero. Para que el ejercicio tenga éxito analice como si fuese su partida.

Breyer - Esser
Budapest, 1917
Juegan las blancas

14. Kf1!! ¿Por qué esta jugada es la adecuada? La profundidad de Breyer se verá a continuación. 14. ... Nxc3 15. bxc3 Bb7 16. Qg4 Kg7 17. Rh7+! Kxh7 18. Qh5+ Kg8 19. Bxg6 fxg6 20. Qxg6+ Kh8 21. Qh6+ Kg8 22. g6! y he aquí la razón de la asombrosa jugada 14. Kf1!!. Si el rey estuviese en e1, entonces el negro prodría jugar 22. ... Ah4+ y 23. ... De7, defendiéndose. Me parece admirable la profundidad de análisis del blanco. 22. ... Rf7 23. gxf7+ Kxf7 24. Qh5+ Kg7 25. f5 exf5 26. Bh6+ Kh7 27. Bg5+ Kg8 28. Qg6+ Kh8  y las negras abandonaron. Hay mate en 11 jugadas (de acuerdo a Houdini). 1-0

Tuesday, May 14, 2013

De ética y virus


Hace mucho tiempo me entró un virus. No me acuerdo cómo es que se infiltró en mi sistema (tengo el AVG antivirus), pero el caso es que empezó a aparecer una ventana, que ocupaba un cuarto de la pantalla en donde se me informaba que estaba infectado. para quitarlo, me remitían a un sitio web, el cual me cobraba unos 50 dólares por darme el antídoto a este mal. El virus y su correspondiente vacuna  aparentemente estaban hechos por el mismo autor o autores, es decir, los infelices -si lograban infectar una máquina- pedían "rescate" por desinfectarla. En ese entonces decidí que no me iba a dejar chantajear y finalmente, a eso de las 3 am, hallé un oscuro programa (que funcionaba en modo consola) y que funcionó, quitándome el virus aquel.

Ayer me pasó algo parecido. De pronto aparece una ventana de un supuesto antivirus llamado System Care Antivirus. Revisó mi disco y halló un sinfín de virus. Esto sonaba sospechoso, porque en general mi sistema está libre de tanto parásito y malviviviente cibernético. Decidí quitar ese programa, el cual no recordaba haber instalado (pero ahí había un icono para ejecutarlo) pero el sistema se negó. Quise entonces entrar a la lista de procesos y el sistema me avisó que el taskmanager estaba infectado. Intenté entrar a Internet, pero de nuevo se me indicó que Chrome estaba infectado. Eso no podía ser. Evidentemente aquí había una trampa.

No me llevó mucho tiempo hallar que ese System Care Virus es un programa que simula revisar la máquina, pero como el primer programa que mencioné al inicio de este artículo, era falso y de nuevo, me pedían unos 99 dólares por registrar mi producto y librarme de toda esa problemática que -literalmente- había imposibilitado cualquier función de mi sistema.

Entré a Internet (desde otra computadora) y al poner en Google "System Care Antivirus", hallé lo que sospechaba: un programa disfrazado de antivirus cuya función es asustar al usuario diciéndole que tiene N bichos en su máquina y que por unos dólares me podían mandar la vacuna universal y mantener mi máquina libre de todo mal. Entre las posibles soluciones (porque cualquier programa tiene una cantidad limitada de maneras de instalarse en el sistema), lo primero que e me pedía era entrar a Windows pero en modo protegido con funciones de red. Ahí, me decían que bajara un par de programas para quitar el virus, cosa que hice, pero antes me fijé en donde estaba instalado el System Care Antivirus. Lo hallé en c:\ProgramData\, el cual estaba en una de esas carpetas que tienen montones de números y letras. Ahí había 3 archivos: uno con terminación "exe", otro con terminación "ico" y uno más con terminación "dat". Los borré los tres, borré esa carpeta y reinicié... Y listo, desapareció el problema.

El punto es que este infame programa, que de verdad, no sé cómo se coló en mi sistema, me quitó una hora de mi vida. Estaba intentando escribir un programa para procesar una serie de imágenes (ya hablaré de ello próximamente), y tuve que abandonar la tarea ante la imposibilidad de poder usar mi máquina por esta tonta infección.

Pero más allá de eso, me resulta inconcebible que existan programadores que prácticamente con un chantaje tan burdo (o incluso muy sofisticado) busquen hacerse de dinero. Evidentemente los programadores de esta trampa cibernética no eran muy hábiles, pero es claro que usaron un par de trucos para hacer difícil desaparecer la "infección". En ese sentido son delincuentes, porque meten un programa avieso para sacar ventaja del mismo. Y eso está totalmente fuera de la más elemental ética. En fin, ya nada me sorprende del ser humano.

Tuesday, May 07, 2013

El verdadero problema de la privacidad en Facebook


Por mucho tiempo se ha hablado de la privacidad en las redes sociales. Facebook, que cuenta con unos mil millones de usuarios activos, es uno de los sitios en donde -supuestamente- la gente tiene más desconfianza en cómo se usan sus datos, las fotografías que suben, las pláticas en las que discuten, etcétera. De hecho, cada cierto tiempo aparecen carteles falsos indicando que de acuerdo a quien sabe qué leyes de no sé qué país, Facebook está imposibilitado de usar la información de sus usuarios.

Desde luego que esos mensajes  que se convierten en virales, porque mucha gente los pone en sus muros creyendo que con eso se protegen, son más falsos que una moneda de tres pesos. Facebook tiene todos los derechos del mundo, de usar tu información personal porque tú les diste ese permiso cuando te inscribiste y aceptaste sus políticas, que seguramente no leíste.

Ahora bien, ¿por qué hay tanto problemas con la privacidad en Facebook? ¿qué importa si la red social usa las fotos familiares que uno sube? ¿acaso contienen secretos que nadie debe conocer? ¿quizás son datos relevantes para el planeta? ¿por qué tanta gente se dice preocupada por estos asuntos de la privacidad? Esta es una percepción que me parece común, pero que lo más probable es que sea falsa. Hace unos meses Facebook hizo un cuestionario para ver cómo iba a modificar sus lineamientos sobre la privacidad de los datos de los usuarios. Curiosamente solamente unos 800,000 personas contestaron la encuesta. Es decir, menos del 1%. ¿Cómo es posible? ¿No que era un tema muy sensible para todos?

Pienso que en términos reales la gente no está tan preocupada por sus datos, por sus fotos, o porque todo esto lo use Facebook a su antojo. Lo que les molesta en realidad -y creo que es la solución de esta interrogante- es que a mucha gente no le gusta que la red social use y saque dinero compartiendo sus fotos o copiando opiniones que alguien vertió en Facebook, etcétera. Imaginemos que mañana Facebook dice que usará las fotos de los usuarios para crear un sitio como FlickR, por ejemplo. Y que cobrará centavos de dólar a quien quiera hacerse de alguna foto en particular, suponiendo que la red social pudiese proteger las fotos de los usuarios con una marca de agua. Más de uno pondría el grito en el cielo y hablaría del derecho a su privacidad, entre muchas cosas. Pero qué tal que en este escenario, Facebook dijera que pagaría un porcentaje por cada persona que decidiese pagar por alguna foto de su inmenso catálogo. Ah, entonces la cosa cambiaría. Probablemente la gente ya no discutiría demasiado el asunto de la privacidad, sino quizás si el porcentaje que ofrece la red social es justo o no.

Dicho en otras palabras, no es que la privacidad sea un problema, es que nadie quiere que usen su información otros para hacer dinero. Pero eso sí, quieren que Facebook sea gratis, que no ponga anuncios, que no use ninguna de mi información. Los usuarios asumen que se merecen todo sin pensar siquiera que en esta gigantesca red social, somos todos el producto. Eso es lo que somos para Facebook. O sea, todo yo, nada ellos. Explíquenme por qué.

Wednesday, May 01, 2013

Sobre la Lady Profeco


Hace unos días se suscitó un episodio típico de este país: una jovencita, hija del Procurador Federal del Consumidor, fue a comer a un restaurante que -aparentemente- es muy chico y que estaba lleno. No tenía reservación, por lo que le dijeron que esperara. Una vez que una mesa se desocupó en la terraza, el restaurante se la dio a un comensal que quería salir a dicha terraza a fumar un puro (y que, aparentemente, le había dicho al personal del restaurante que quería fumar y necesitaba una mesa en la terraza). La niña entonces montó en cólera y amenazó a cuanto personaje halló en el restaurante. "No saben con quién se están metiendo", debe haber dicho, en un clásico del influyentismo mexicano. Así, la puberta se fue y a las dos horas llegaron los inspectores de la PROFECO a clausurar el restaurante, aduciendo irregularidades en el sistema de reservaciones y en la categoría del mezcal que se servía. Pero las cosas no terminaron ahí. Los comensales se dieron cuenta de la situación y sacaron celulares y enfrentaron a la autoridad de la PROFECO, por lo cual, estos inspectores se fueron a refugiar a una camioneta, pero no los dejaron irse. Tuvo que llegar el Jurídico de la Procuraduría y finalmente los dejaron ir. A todo esto, el Procurador estaba convaleciente de una operación en la cadera.

Lady Profeco, como le pusieron a la cretina hija de Humberto Benítez Treviño, se mostró como no sólo la berrinchuda de papi, sino como alguien que a estas alturas del partido piensa que el ser influyente, tener palancas, le puede dar un plus en la vida, ya sea para hacerse de una mesa donde le plazca (aunque no tuviese reservación), o quizás para pasar antes que todos en la sala del cine, o en cualquier otro evento público.

Sin embargo, debo ser franco, justifico perfectamente la actitud de esta babosa. La razón es simple: ha vivido toda la vida en la impunidad, en las prebendas que los políticos tienen, en esa impunidad que a todos nos duele y que seguimos viendo en este país cotidianamente. Aquí en México las leyes son iguales para todos, pero unos somos más iguales que otros, parece ser la realidad. Si la niña estúpida Andrea Benítez actuó de esta manera es porque eso es lo que ha visto desde pequeña. Por ello no se tentó el corazón para satisfacer el berrinche que le hicieron hacer. La justifico plenamente, porque sólo habla de que la clase política no piensa en el pueblo, ni pensará jamás en él. Piensa en sus propios beneficios y Lady Profeco es una prueba viviente de ello. Ella es un reflejo de su educación. Más claro no puede ser.

En mi opinión, el Procurador de la PROFECO debería renunciar, o deberían sacarlo de su cargo, porque no es posible que sigamos permitiendo estos dislates. Y sí, ya salió el señor a decir que ofrecía una disculpa a quienes se hubiesen sentido ofendidos por la actitud de su estúpida hija. Yo creo que es tarde. Sería fenomenal ver la cara de semejante babosa cuando supiera que su papito lo corrieron por su bonita actuación en el terreno de la impunidad. Lo malo es que dudo que esto pase.

Un sacrificio de dama en partida ultrarrápida


El último día de abril jugué esta partida en el Internet Chess Club, un sitio en la red que es de paga, pero en donde están la mayoría de los grandes maestros y maestros internacionales. Una razón para ello es que para los titulados como GM y MI no pagan suscripción. Otra razón es que no se juega vía una página web, sino que se juega usando un programa cliente, es decir, una aplicación en la computadora del jugador, que manda solamente las jugadas y la información relevante. El programa cliente lo que hace es desplegar el tablero, abrir las ventanas correspondientes, etcétera.    En el ICC he jugado muchas partidas de un minuto por jugador. Esta es contra Chris W Baker, maestro internacional del Reino Unido.

Chris W. Baker - López, Manuel
ICC partida de un minuto por jugador
2013.04.30

1. e4 d5 2. exd5 Qxd5 3. Nc3 Qd6 una variante que ha popularizado Tiviakov, aunque -me parece- ya la ha dejado de jugar por alguna razón. 4. Bc4 Nf6 5. Nge2 (lo natural es 5. Nf3) 5... a6 6. d3 b5 7. Bb3 Bb7 8. O-O Nbd7 9. Re1 e6 10. Bf4 Qc6 11. f3 Bc5+ (11... Bd6 es más normal) 12. Kh1 O-O 13. d4 Bb6 14. Be5?? increíble... pierde en el acto 14. ... Nxe5 15. dxe5 Rad8 16. Qc1 



Baker, C - López, Manuel
ICC 30.4.2013 (partida a un minuto por jugador)
Juegan las negras

16. ... Qxf3!! 17. Rg1 Ng4?! podría haber rematado brillantemente con: 17... Rd1!! 18. Qxd1 Ng4 19. gxf3 Bxf3+ 20. Rg2 Nf2+ 21. Kg1 Nxd1+ 22. Kf1 Ne3+ 23. Kf2 Bxg2 ganando. En mi descargo, les recuerdo que es una partida de un minuto por jugador.) 18. gxf3 Bxf3+ 19. Rg2 Nf2+ 20. Kg1 Nd3+ 21. Kf1 Nxc1 22. Rxc1 Bxg2+ 23. Kxg2 Rd2 (23... c5! mejor aún, encierra de por vida al alfil.) 24. Kf3 Rfd8 25. Ne4 R2d7 26. c3 c5 y las blancas perdieron por tiempo un par de jugadas después.  0-1

Estereotipos de belleza, la ciencia y la cirugía estética


"La belleza está en los ojos que la mira", dice una frase popular y bien podríamos ir más allá con esta frase: "me gusta esa mujer porque es bonita o es bonita porque me gusta". El punto es que en parámetros de la belleza, en la estética, no pareciera posible ponerse de acuerdo. No obstante eso, los seres humanos hacemos concursos de belleza, en donde se evalúa la hermosura de las mujeres que en ellos participan. Tenemos Miss Universo, Miss Mundo (debiese ser "señorita Universo, señorita Mundo" ¿no?), etcétera y en general las ganadoras son mujeres bellas, pero en muchos sentidos con parámetros de belleza occidentalizados.

Las métricas usadas para medir la belleza femenina no son universales y cambian con los tiempos. Antes, las mujeres rollizas eran "más hermosas", pues estar gordito -se pensaba- era signo de salud. Hoy sabemos lo contrario y entonces se hace énfasis en mujeres delgadas, pero van más allá y las hay ultradelgadas, las cuales normalmente implican problemas de salud, como la anorexia o bulimia. Digamos que la belleza oscila entre los extremos y el justo medio no se encuentra jamás.

La cuestión es que se ha desatado una polémica en Corea, pues las participantes de "Miss Korea 2013", probablemente por retoques de cirugía estética, están convergiendo todas al mismo rostro. Vamos, las 20 participantes parecen ser una misma. En el blog del coreano JB Huang, se hace un interesante análisis al respecto. El autor del blohg tomó las 20 imágenes de las concursantes, normalizó los rostros y los alineó en un GIF animado, como puede verse aquí abajo:



El autor del estudio retomó lo aprendido en un curso de fotografía computacional y usando una serie de algoritmos, hizo un "morphing" del rostro promedio de las concursantes, lo que proceso finalmente en un video donde se muestra como los rostros de las concursantes cambian. Bueno, decimos que cambian pero parece ser casi la misma persona, el mismo rostro.



JB Huang no se quedó, sin embargo, con este solo resultado, sino que tomando eigenvectores y eigenvalores para los rostros de las concursantes  y usando el principio de análisis de componentes (PCA - por sus siglas en inglés), llegó a resultados muy interesantes, por ejemplo, que el promedio de eigenvalores de las fotos es 6. Con esto, se pudo analizar cómo los rostros se distribuyen en un eigenespacio y halló la similitud de las concursantes entre ellas.


Concursantes 1, 2 y 3, respectivamente

Con esta información, se intentó construir una matriz de afinidades la cual muestra qué tanto se parecen las concursantes entre sí (mientras más azul, más parecidas son). De esto se concluyó que las concursantes con rostros más diferentes a las demás fueron la 1, 2 y 6.


Así pues, aunque la ciencia descubre información que revela porqué las concursantes parecen ser muy parecidas, a ojo de buen cubero nos podemos dar cuenta de los parámetros que hoy en día se usan para valorar la belleza de las "misses".

Wednesday, April 24, 2013

Plática en el Politécnico


Miguel Angel Castillo me ha invitado a dar una plática en el Festival de Ajedrez que se organiza en Zacatenco. Hablaré de las nuevas herramientas computarizadas para ayudarse a estudiar. La cita es hoy a las 2 de la tarde en el Auditorio "Dr. Víctor Flores Maldonado", edificio 9, Unidad Profesional "Adolfo López Mateos", en Zacatenco. ¡Ahí nos vemos!

Tuesday, April 23, 2013

Hoy es mi cumpleaños

y además de los amigos que me han felicitado (incluso aquellos que hace tanto que no veo), de la alegría de saber que a uno lo quieren, de todas estas cosas buenas que pasan, me encuentrto en Google esta imagen (la que ilustra esta nota). Puse el cursor del ratón sobre la imagen y apareció la leyenda: "¡Feliz cumpleaños, Manuel!" Al darle click al logo de Google hecho con pasteles, me encuentro que me remite a mi perfil en Google+. Me pareció un gran detalle. Quiero creer que como estoy en Google+ y saben mi fecha de ciumpleaños, redireccionan a una página con este doodle.

Wednesday, April 17, 2013

Capablanca contra Eliskases, 1936


El genio cubano, José Raúl Capablanca, jugó cuatro veces contra Erich Eliskases. La fotografía de estos jugadores ocurrió cuando ya había Alekhine le había quitado el título mundial a Capa, al enfrentarse en Argentina, en 1927. Sin embargo, Capablanca mantenía siempre su fuerza y era un peligrosísimo rival.

Del total de partidas que jugaron, Eliskases y Capablanca quedaron 2-2 (cada uno con +1-1=2). La partida de la foto corresponde al Torneo de Moscú de 1936 en donde aparentemente se jugaba partida y revancha. Ahí el cubano hizo 1.5 puntos de dos posibles. Sin embargo el siguiente año, en Semmering/Baden, Eliskases vencería por la misma puntuación 1.5 de 2 posibles, a su poderoso rival. De hecho, la partida que Eliskases le gana a Capablanca (no es la de la foto), es un muy interesante final de alfiles, en donde Capa cometió un sutil error y terminó perdiendo.

La foto de Capablanca pensando me parece única. Nunca había visto algo así.

Eliskases, Erich Gottlieb - Capablanca, José Raúl
Semmering/Baden, 1937

1. d4 d5 2. c4 c6 3. Nf3 Nf6 4. Nc3 dxc4 5. a4 Bf5 6. Ne5 Nbd7 7. Nxc4 Qc7 8. g3 e5 9. dxe5 Nxe5 10. Bf4 Nfd7 11. Bg2 f6 12. O-O Rd8 13. Qc1 Be6 14. Nxe5 Nxe5 15. a5 a6 16. Ne4 Bb4 17. Bd2 Qe7 18. Bxb4 Qxb4 19. Qc5 Qxc5 20. Nxc5 Bc8 21. Rfd1 Ke7 22. b3 Nf7 23. e4 Rd6 24. Rxd6 Kxd6 25. b4 Kc7 26. Rd1 Rd8 27. Rxd8 Nxd8 28. f4 b6 29. axb6+ Kxb6 30. Bf1 Ne6 31. Na4+ Kc7 32. Kf2 g5 33. Ke3 gxf4+ 34. gxf4 Ng7 35. Nc5 Ne6 36. Nxe6+ Bxe6 37. Kd4 Kb6 38. Bc4 Bg4 39. e5 fxe5+ 40. fxe5 h6 41. h4 Bh5 42. e6 Be8 43. Bd3 Kc7 44. Kc5 Bh5 45. Bh7 Bg4 46. e7 Kd7 47. Be4 Kxe7 48. Bxc6 Be2 49. Bb7 Kd7 50. Kb6 Kd6 51. Bxa6 Bf3 52. Ka5 Bc6 53. Bb5 Bf3 54. Bd3 Bc6 55. Bc2 Kc7 56. Ba4 Bf3 57. b5 Kb7 58. b6 Be2 59. Bc2 Bf3 60. Bd3 Bg2

Eliskases - Capablanca
Semmering/Baden, 1937
Juegan las blancas

 61. Ba6+ Kc6 62. Bc8 Bf1 63. Bg4 Bd3 64. Bf3+ Kd6 65. Bb7 Be2 66. Ba6 Bf3 67. Bf1 Bb7 68. Bh3 Ke7 69. Kb5 Kd6 70. Bg4 Ke7 71. Kc5 Bg2 72. Bc8 Kd8 73. Ba6 Bf3 74. Kd6 Bg2 75. Bc4 Kc8 76. Bd5 Bf1 77. Ke6 Be2 78. Kf6 Kd7 79. Kg6 h5 80. Kg5 Kd6 81. Bf7 Kc6 82. Bxh5  1-0.

Saturday, April 13, 2013

El absurdo uso de las redes sociales


Leo lo siguiente en Facebook: "!!! ALERTA MIS AMIGOS Y AMIGAS !!! (compartido desde Tedi Kim). El domingo fue una familia de picnic y llevaron latas de bebidas. Lunes, dos miembros de la familia fueron ingresados a cuidados intensivos en el hospital. Murieron el día miércoles. Resultados de la autopsia concluyó que fue LEPTOSPIROSIS. El virus se encontraba en la parte superior de las latas, las que fueron consumidas sin el uso de vasos ni tazas. Los resultados de las pruebas mostraron que las latas estaban contaminadas con orina seca de ratón. La orina contiene LEPTOSPIRA".

Y continúa: "Recomendaciones: Lavar las latas antes de consumir directamente. Las latas son almacenadas en bodegas o galpones y se entregan directamente a las tiendas y supermercados sin lavarlas. Un estudio demostró que la parte superior de una lata contiene más gérmenes y bacterias que un baño público. Amigos y amigas: Toma las precauciones del caso, comparte y difunde esta información. Tus amigos te lo agradeceran".

Esta es la clásica información que mucha gente copia en sus muros de Facebook sin la mínima responsabilidad, sin siquiera revisar ninguna fuente. Tienen acceso a Google pero no investigan. Creen a la ciega todo lo que se publique en la red social.

Si quien puso el mensaje se hubiese preocupado de ver siquiera qué diablos es esta terrible enfermedad que mató aparentemente a dos miembros de una familia, aunque no hay ninguna referencia de nada, de país, de zona geográfica, de la identidad de los afectados, nada pues, habría visto en la Wikipedia que "la leptospirosis (también conocido como enfermedad de Weil o ictericia de Weill) es una enfermedad febril producida por la Leptospira interrogans, una bacteria del orden Spirochaetales, de la familia Leptospiraceae, que afecta a humanos y un amplio rango de animales, incluyendo a mamíferos, aves, anfibios, y reptiles". Así, de entrada, no es un virus, es una infección bacterial. Y hay diferencias notables entre virus y bacterias.

Ahora bien, leyendo en esta misma página de la Wikipedia, nos enteramos que: "El período de incubación es de 7-12 días (máximo de 2 a 20 días).7 En esta primera fase la enfermedad se muestra con síntomas similares a los del resfriado común, una presentación clínica que es muy similar al dengue, fiebre amarilla, malaria, influenza y muchas otras enfermedades tropicales, caracterizada por fiebre, dolor de cabeza y dolor muscular, haciendo que ese período inicial sea difícil de diagnosticar y orientar un tratamiento oportuno".

Pero más adelante dice: "La enfermedad dura desde unos pocos días hasta tres o más semanas, dependiendo de su gravedad. La mayor parte de las infectados presentan sólo una primera fase, presentando molestias leves o no presentado ningún tipo de molestias. La segunda fase puede ser grave y, si no es tratada debidamente puede provocar una recuperación lenta (meses), más raramente daños renales e incluso en casos extremos la muerte".

Así pues, la leptopirosis no mata a nadie en dos días, y menos a dos adultos que bebieron de latas que en la tapa tenían restos de orina de ratas, por asumir que de infectaron ahí. Ya no sigo. Creo que ha quedado claro que toda la historia de la familia en un picnic dominical se cae porque está llena de mentiras. Suena, desde luego, razonable el limpiar la lata del refresco que uno va a consumir y la advertencia puede ser sensata. Pero plantearla con esta historia ridícula, como si las latas tuviesen un virus como el del ébola o peor, pues es un exceso.

A mí me llama la atención esto. ¿Por qué hay este afán de poner mensajes alarmistas tan exagerados? Si no son como el mencionado, los hay peores: "Norcorea dispuesta a lanzar misiles nucleares" o "Se pronostica que un meteorito chocará contra la Tierra en marzo del 2062", o bien "El cambio climático podría provocar una nueva era del hielo en 50 años", etcétera. En ambos casos, estas lamentables noticias están más allá de lo que podemos hacer los seres humanos. Si Norcorea lanza un ataque nuclear, seguramente la borrarán del mapa los Estados Unidos y aliados. El problema es que si se llega a una conflagración nuclear, la radiación se esparcirá en todo el planeta con consecuencias poco amables, por decir lo menos. En el caso del meteorito que chocará contra la Tierra, presumiblemente en el 2062, podría acabar con la vida en el planeta y ¿saben? nadie podría hacer nada para evitarlo Finalmente, si el cambio climático produce una era del hielo nueva, tampoco podemos hacer nada. En resumen, ¿a cuenta de qué alarmarse de eventos en los cuales no tenemos control? ¿Es que hay quien le gusta vivir angustiado todos los días porque sólo hay noticias malas para el futuro? ¿Y cuántas de ellas se traducen en realidades? En mi opinión solamente son mensajes alarmistas que buscan vender la noticia... Y en las redes sociales -pienso- obtener la lectura de mucha gente, que entren muchos y lean la noticia fatídica de un futuro que quién sabe si llegue, pero que ahí lo ponen como inminente.

Cada día estoy más convencido que Facebook y Twitter son herramientas del Internet moderno que podrían ser muy útiles pero que se usan inadecuadamente. Ojalá y que esto cambiara, pero la realidad es que la tendencia que veo es precisamente la contraria.

Wednesday, April 10, 2013

El efecto AT&T y un nuevo reto de la programación lúdica

En 1988 Gerard Holzmann escribió un interesante libro sobre procesamiento de imágenes: "Beyond Photography - The Digital Darkroom". Pocos años antes, el autor trabajó con Rob Pike, Dennis Ritchie, Ken Thompson, entre otros, en los Laboratorios Bell, que a la postre lo adquiriera la empresa ATT. Debe haber sido fascinante interactuar con toda estas gente que trabajaba en tecnología con una pasión desbordada. Ahí nació, por ejemplo, el sistema Unix y el lenguaje C, que no son poca cosa. Hasta donde recuerdo, los Laboratorios Bell tenían a 8 premios Nobel entre sus empleados.



El libro de Holzmann se puede conseguir en Amazon, pero nuevo cuesta 133 dólares. Hay copias usadas por unos 10 dólares. Sin embargo, el propio autor ha puesto una copia en pdf de forma gratuita, y que puede consultarse aquí.

En dicha obra, el el capítulo 4, Holzmann se dedica a experimentar con diferentes filtros gráficos. Muchos de ellos eran meros experimentos bajo la premisa "a ver qué pasa si aplicamos esta ecuación sobre la imagen". Y probablemente muchos de esos experimentos no fueron publicados. Sin embargo, uno de ellos me pareció interesante. Cito al autor en la página 42: "Por alguna razón, el retrato de Peter Weinberg siempre fue el objetivo principal en nuestro experimentos de edición de imágenes.  Todo empezó un par de años antes cuando Peter ascendió a jefe del departamento y a su notoria distracción de dejar su cuadro con su imagen en cualquier parte. Una tarde de sábado, que estábamos bromeando, Rob Pike y yo empezamos a hacer fotocopias de dicha fotografía de Peter, enfatizando la jerarquía administrativa existente cuando preparábamos una gráfica de la estructura de los Laboratorios Bell. Jugando poníamos a Peter en todos los posibles puestos. El propio Peter pronto se dio cuenta de esto y debe haber llegado a la conclusión de que lo mejor que podía hacer era no reaccionar a este asunto. Así al menos él esperaba que su imagen no fuese aparecer magnificada en alguna de las torres de agua del Laboratorio. No obstante, la foto de Peter aparecía y desaparecía en los lugares más extraños.

Un par de semanas después de que ATT revelara el nuevo logotipo corporativo, Tom Duff hizo una imagen de Peter al estilo de dicho logo y se convirtió en el símbolo de nuestro centro de trabajo. Rob Pike mandó hacer camisetas con la foto "ATT-izada" de Peter y Ken Thompson ordenó tazas de café con el logo de Peter. E inevitablemente el 16 de septiembre de 1985 apareció el logo de Peter en una de las torres de agua".

¿Cómo se pueden hacer imágenes de las personas basadas en el logotipo de ATT? Aparentemente Duff fue el autor del filtro y Holzmann no indica cómo se hizo. En consecuencia, hubo que partir de cero información. Consideremos la imagen original y el resultado mostrado por Holzmann:



El logo de ATT es éste:


A partir de esto es claro que las imágenes deben ser de blanco y negro estrictamente. La solución es pues una combinación de filtros. He aquí los pasos a seguir:

  1. Tómese una imagen
  2. Si es de color, pásese a tonos de gris
  3. Ya en tonos de gris, aplíquese el filtro alto contraste
  4. A esa imagen resultante, aplíquese el filtro ATT

Pasar a tonos de gris una imagen es uno de los filtros más comunes. En una imagen en tonos de gris tenemos que cada pixel tiene en sus componentes R=G=B, es decir, la tripleta (Rojo, Verde, Azul) (o (R,G,B) por sus siglas en inglés), tiene los mismos valores. Las imágenes de tonos de grises contienen a lo más 256 tonos diferentes (de (0,0,0), el negro, al (255,255,255) el blanco). Aquí hay dos formas de hacer esta transformación, usando para cada pixel una de las dos posibles ecuaciones:

(1) Gris = (R + G + B) / 3
o
(2) Gris = (0.30 * R) + (0.59 * G) + (0.11 * B)

Ahora bien, una vez teniendo la imagen en tonos de grises, aplicar un filtro alto contraste es fácil. Se recorre la imagen pixel por pixel. Se calcula el número de color, el cual se basa en la siguiente fórmula:


Número de color = (65536 * R) = (256 * G) + (B)

donde las componentes en el modelo R,G,B son: R el componente en rojo, G el verde y B el azul. Si éste número de color es mayor de 8 millones, entonces ponemos un color blanco. Si es menor de ese número, ponemos un color negro. Así, una imagen en tonos de grises se transforma en una imagen en blanco y negro, como en el siguiente ejemplo.


Y ahora está el problema de crear la imagen usando un filtro “ATT alike”. Pero aquí no diré cómo hacer esto (hasta que acabe el reto). Cuando aparezcan los resultados explicaré el filtro a detalle. Es decir, parte del reto es discurrir cómo se puede hacer un filtro de esta naturaleza y no sólo seguir la descripción que pueda hacer yo del mismo. Así pues, el reto tiene este giro adicional, con respecto a retos anteriores.

Los resultados fueron bastante satisfactorios y además, el software crea este tipo de imágenes de forma relativamente rápida. Por ejemplo, he aquí la imagen procesada con regiones de 9 pixeles y otra con regiones de 20 pixeles. Mientras más pixeles por región, más anchas son las franjas oscuras. ¿Cuál de los dos resultados le gusta más?
                 9 pixeles                             20 pixeles

Considerando todo esto, el siguiente reto de la programación lúdica es hacer el filtro ATT. En este caso no se describe cómo funciona ese filtro ATT y el programador que participe debe hallar cómo generar dicho filtro. Es decir, se complica un poco más el asunto, pues la descripción del filtro no se da. Cada quien tendrá que hallarla. Así pues, este reto es aún más complejo que el del filtro óleo.

He aquí las bases adicionales del reto:

  • Ganará el programa que transforme la imagen de Peter Weinberger (que aparece más abajo), en el menor tiempo posible. El segundo mejor tiempo obtendrá el segundo lugar. Desde luego, el resultado debe estar de acuerdo con la definición del filtro ATT del cual hemos hablado.
  • Habrá dos lugares: Ambos se llevarán una taza con el logotipo de La_Morsa. Mi intención es que al imprimir esas tazas aparezca una leyenda con el título de la misma y el lugar obtenido, para que quede constancia por el tiempo de vida de la taza.
  • Los programas pueden hacerse en cualquier lenguaje de propósito general y no se vale usar en éste particularmente, bibliotecas que hagan filtros gráficos. Los programadores tienen que resolver el problema por sí mismo, sin ayuda de bibliotecas externas. (Desde luego, se vale usar alguna biblioteca para cargar/guardar la imagen de Weinberger para procesarla, la cual es un JPG, pero nada más). Así pues, C, C++, C#, Pascal (Delphi), Javascript, Python, Ruby, Visual BASIC, Visual C, Java, etcétera, son idóneos para esta labor.
  • Los autores de los programas deberán mandar el código fuente y el archivo ejecutable en Windows 7.
  • Un autor puede mandar versiones mejoradas de su propio software dentro del tiempo del concurso. No se tomarán en cuenta las que se salgan del tiempo establecido.
  • En la medida de lo posible, el programa debe indicar el tiempo total del proceso realizado para crear la imagen tipo logo de ATT de Weinberger
  • El autor debe enviar el código fuente y quienes ganen aceptan que su código quede accesible para quien lo quiera ver.
  • Los programas deben poderse ejecutar en el sistema operativo Windows 7 de 32/64 bits. Se correrán en una máquina AMD con 6 núcleos y los resultados obtenidos son inapelables y definitivos. De nuevo aclaro: este es un reto de buena fe y no un concurso estrictamente. Los premios son meramente un estímulo extra para que se animen a entrarle al reto. Evidentemente asumo que el código de cada concursante es creación del mismo y que no andan copiando el código de otras partes, foros, sitios en Internet, etcétera. En caso de hallar que el código fue copiado, el programador queda descalificado.
  • El reto dura una semana a partir del día de la publicación del artículo. Por ejemplo, si éste se publica un 10 de mayo a las 3 de la tarde, el reto se cierra el 17 de mayo a esa misma hora.
  • Cuando reciba algún programa participante en el reto, le enviaré un acuse de recibo para asegurarnos que están todos los que son y son todos los que están.
  • El concurso es para quienes viven en la República Mexicana. Si alguien de otro país quiere participar es bienvenido, pero no podrá acceder a los premios (puede haber excepciones).
  • Los programas deben ser enviados a morsa@la-morsa.com o en su defecto a lopem@hotmail.com, por si alguna de las direcciones no funciona.
Así que queridos y entusiastas programadores, a entrarle al reto. Afilen sus herramientas de programación y que gane el mejor.

Imagen a procesar:


A quien le interese el filtro ATT, puede pedírmelo a morsa@la-morsa.com y a vuelta de correo lo recibirá sin costo alguno.

¡Ganadores del reto Óleo!


¡Tenemos ganadores! Este nuevo reto de la programación lúdica dio buenos programas, software de calidad, que demuestra que hay talento y neuronas para resolver los problemas de programación que surjan. Me queda claro que hay en este país mucha gente capaz en lo que se refiere a escribir código y es algo que debemos valorar. Después de ejecutar los programas de quienes participaron en el reto Óleo, se llegó a la siguiente tabla de resultados:

  • Fabián Vargas Quijano     0.336 segundos (ganador)
  • Rafael Mendoza                0.530 segundos (segundo lugar)
  • Juan Claudio                        0.630 segundos
  • Humberto Floriano               1.635 segundos
  • Sergio Avendaño                  1.840 segundos
  • Guillermo Canedo                2.421 segundos
  • Christian Israel                     2.963 segundos
  • Alex Zúñiga                         3.467 segundos
  • Manuel López Michelone    19.19 segundos (no participa)
  • Ernesto Valderrama             26.00 segundos (estimado)

En esta ocasión hubo menos participantes, pero asumimos que esto se debió a que el reto era más complicado. Sin duda que el ganador, Fabián Vargas, de Colombia, hizo un muy buen trabajo, pues la imagen de Lena la convirtió en una tercera parte de un segundo. Asombroso. El segundo lugar, Rafael Mendoza, logró un muy buen tiempo, aproximadamente medio segundo.

Fabián Vargas, ganador de este reto


Los archivos, con el código fuente y los respectivos ejecutables, pueden obtenerse aquí:

  •     Para el programa de Fabián Vargas, descargarlo de aquí.
  •     Para el programa de Rafael Mendoza, descargarlo de aquí.

No pongo el código fuente de los programas ganadores en este artículo porque tienen cierta complejidad y ocupan mucho espacio.

Rafael Mendoza, segundo lugar


Rafael Mendoza me mandó, en el transcurso del reto, varias versiones de su programa. En uno de sus mensajes me dice: Quizás no sea el más rápido, pero el haberlo hecho ya me hace ganador ya que primero me había rendido y después de investigar como tratar las imagenes con C#, empece y bueno, aquí está, tengo la idea de como mejorar el tiempo pero la verdad no he podido implementarlo.

Así pues, el esfuerzo tuvo más que recompensa.

El tercer lugar, Juan Claudio Toledo, (ganador del reto Collatz, a todo esto), me mandó un programa que por alguna razón en mi Ubuntu no corrió. No hacía nada. Le pedí me mandara información de la corrida en su máquina como las características de la misma y me da la impresión que por los datos que envió, en hardware es más o menos equivalente a mi máquina de pruebas. Tomo los tiempos que Juan Claudio me dio, con la promesa de que si puedo hacer correr su programa y además, corre más rápido que el primero o segundo lugar, le daré una taza de La_Morsa, aunque sea “post-mortem”.

Con respecto al programa de Ernesto Valderrama, lo escribió en Ruby, que es un intérprete (no es la mejor idea para competir contra otros sistemas que generan código nativo), usando una biblioteca para cargar imágenes llamada rmagick. Quise instalarlas y aún consultando con Ernesto e intercambio muchos mensajes, no lo logré. Entonces le pedí que corriera su software y me diera el tiempo estimado de procesamiento. Igualmente le pedí que me diera las características de su máquina y con esos datos saqué el tiempo estimado que habría tardado su programa en la máquina de pruebas. Desde luego que puedo estar equivocado pero el margen de error no representa “riesgo” para los que ganaron el reto, pues sus tiempos son demasiado cortos contra el que me envió Ernesto. Aún así, agradezco el interés por resolver la problemática.

¡Felicidades a ambos participantes! Y los esperamos en el siguiente reto, que promete ser complejo y emocionante. Gracias a todos por participar.

Sunday, April 07, 2013

¿Por qué las redes sociales no sirven?

La pregunta parece fuera de lugar, considerando que hay millones de personas que las usan diariamente. Sin embargo, a mí me queda cada vez más claro que es una afición más, como perder el tiempo platicando con extraños en un chat. La razón es sencilla: en las redes sociales, Facebook y Twitter, por ejemplo, la gente pone pensamientos, denuncias, reclamos, textos o carteles para hacernos pensar, etcétera, pero no hay más allá.

Pongamos un ejemplo: veo un cartel en donde aparece una mujer sangrando de la cabeza y al lado un niño de unos 9 o 10 años llorando. Aparentemente es el hijo de esa señora. La historia es dramática y no tiene caso repetirla aquí. La cuestión es que una vez que alguien "denuncia"  en Facebook el hecho, entonces otros feisbuqueros ponen comentarios indignándose por la situación. Y los entiendo, es horrible lo que se denuncia., pero... ¿qué hacemos? ¿qué sigue? La respuesta es más indignante aún: NADA.

Y menciono esto porque precisamente a la persona que hizo esa denuncia visual en Facebook, así como a todos los que se indignaron, les pregunté ¿qué seguía hacer, qué acciones tomar? En lugar de dar alguna respuesta al respecto empezaron los ataques a mi persona. Alguien me inquiría ¿y tú qué haces? Le contesté que nada, porque le dije, de entrada, que yo no ponía carteles ni mensajes de ninguna injusticia en donde no hiciese algo realmente. Le comenté además que asumía que quien pone una imagen como la que nos ocupa, estaba involucrado en el tema y suscribía y se hacía eco del mismo. Así pues, no se trataba de si yo hacía algo, sino de qué hacían todos ellos que se indignan por la injusticia, ¿dónde están? ¿qué hacen?

Hubo quienes pusieron incluso "me gusta"  a mis comentarios, como otros que quisieron discutirlos. La persona que puso la imagen en cuestión, ante la imposibilidad de refutar lo que le decía contestaba "jajajaja", lo cual sólo habló de la pobreza de sus argumentos. Finalmente quien inició el tema decidió borrar el artículo y se borraron todos los comentarios, buenos y malos. Linda respuesta a la verdad irrefutable: hay muchos usuarios de las redes sociales que son quasi-revolucionarios, nomás que son de teclado y pantalla. No se saldrán de su zona de confort. No harán jamás nada en la realidad, pero eso sí, podrán perder horas haciendo carteles con photoshop para denostar a quien les caiga mal, o bien, para burlarse del político en turno. Para eso tienen todo el tiempo del mundo.

Las redes sociales no servirán jamás si no hay acción detrás de ellas. Los gobiernos lo saben. Por eso ignoran todas esas imágenes burlonas, de denuncia social, de rechazo a la imposición, que aparecieron después de las elecciones presidenciales. Saben ellos que los internautas estánb muy cómodos en sus casitas y que no pasará de poner en este mundo virtual la denuncia, la queja, la burla, pero que en el fondo no harán nada y por eso están muy tranquilos saqueando al país.

Les dejo una caricatura que apareció en Milenio Diario, que pinta de cuerpo entero cómo nos comportamos en general -como comunidad virtual- dentro de estas redes sociales:

Dé click en la imagen para agrandarla

Thursday, April 04, 2013

Paradigmas en programación... ¿verdad o mentira?


Los lenguajes de programación se basan en diferentes paradigmas. Unos son imperativos. Otros usan la lógica de predicados para funcionar (como Prolog), otros más han definido la programación orientada a objetos, con los subsecuentes beneficios que esto tiene en general para los desarrolladores. Por ello, parece ser necesario saber de qué se trata esto para poder decidir -en algún momento- cuál es el lenguaje a usar.

Curiosamente, como veremos más adelante, hay algo perturbador en esta idea de los paradigmas en los lenguajes de programación y la conclusión a la que llegaremos resulta en alguna medida, inesperada. Entremos pues en materia:

Consideremos las redes semántica, las cuales se representan comúnmente como gráficas consistiendo de nodos que se conectan a través de líneas. Los nodos representan objetos y los enlaces entre nodos representan las relaciones entre esos objetos.

Una red semántica simple puede verse en la siguiente imagen:



Nótese que los enlaces son flechas, lo cual implica una dirección. Así, el perro persigue al gato pero éste no persigue al primero. Esto podría ocurrir pero la red semántica no lo plantea explícitamente.

Las redes semánticas plantean una manera muy intuitiva de representar conocimiento sobre objetos y las relaciones entre ellos. Los datos de una red así se basan en un dominio en particular. Esto hace que el esquema sea limitado. Por ejemplo, no podemos establecer la regla de que "el perro no es un gato".

Cabe decir que muchas de las relaciones son evidentes por sí mismas, pero hacen uso del conocimiento externo que tenemos del mundo. En principio, deberíamos definir dichas relaciones para evitar ambigüedades.

Herencia

Es una relación que puede ser particular útil. La idea de la herencia se entiende fácilmente de forma intuitiva. Por ejemplo, decimos que los mamíferos dan a luz bebes vivos y podemos decir también que todos los perros son mamíferos por lo que podemos concluir que un pero da a luz mamíferos vivos. Sin embargo, no estamos diciendo nada sobre el sexo del perro y por ello la relación no necesariamente sería cierta.

La herencia nos permite especificar propiedades de una superclase y así poder definir una subclase, la cual hereda las propiedades de la superclase. En nuestro ejemplo los mamíferos son una superclase y los perros una subclase.

Frames (marcos)

Los marcos son un desarrollo de las redes semánticas y permiten expresar la idea de herencia. Un sistema de marcos consiste en un conjunto de marcos (o nodos) quienes están conectados por una relación. Cada marco describe una instancia (un marco instancia) o clase (marco clase).

En este contexto, los objetos que se representan son objetos físicos pero no necesariamente tienen que serlo. Un objeto puede ser una propiedad (un color, una forma), un sentimiento, un lugar, una situación. La idea de los objetos en este sentido es idéntica a los que se ven en la Programación Orientada a Objetos (POO).

Cada marco tiene una o más ranuras, también podrían llamárseles "propiedades, a las que se le asignan valores. Esta es la manera en que una red de marcos se construye. En lugar de simplemente tener enlaces entre marcos, cada relación se expresa con un valor en una de las ranuras.

Por ejemplo, cuando decimos que "Fido es un perro" lo que queremos decir es que "Fido es una instancia de la clase perro"  o bien, que Fido es un miembro de la clase perro". Aquí la relación "es un" (is-a) es muy importante en una representación de marcos porque nos permite expresar que alguien es miembro de una clase. Esto se conoce como una generalización porque referirse a la clase de mamíferos es más general que referirse a la clase de perros y referirse a la clase de perros es más general que referirse a Fido.

Es también útil hablar de un objeto que es parte de otro objeto.  Por ejemplo Fido tiene cola, por lo que la cola es parte de Fido. Esto se llama agregación porque Fido puede ser un agregado de las partes de un perro.

Otra relación es la asociación. Un ejemplo es la relación de "perseguir" Esto explica cómo un perro y un gato están relacionados o asociados uno con el otro.

¿Por qué usar marcos?

La ventaja principal de usar sistemas de marcos es que la información de un objeto se encuentra toda en un solo lugar (esto es clásico en el paradigma de la POO). Además, la herencia puede extenderse de la siguiente manera. Por ejemplo:

Los perros persiguen a los gatos
Los gatos persiguen a los ratones

Para expresar este tipo de información, no necesitamos saber que el perro persigue al gato o que éste último persigue a los ratones. Podemos heredar la información porque un gato en particular podría ser una instancia de la clase gatos y en nuestro ejemplo, Fido es una instancia de la clase perro.

Podemos además añadir la siguiente información:

  • Los mamíferos respiran
  • Los perros son mamíferos
  • Los gatos son mamíferos

Y tenemos una superclase, mamíferos, en donde los perros y gatos son subclases. Así, no necesitamos expresar explícitamente que los perros y gatos respiran porque se puede heredar esta información.

Herencia múltiple

Es posible en un marco heredar propiedades de otro marco. En otras palabras, una clase puede ser una subclase de dos superclases y el objeto puede tener una instancia de más de una clase. Por ejemplo, podemos decir que el hombre es un constructor de casas, y que además, es un mamífero. Esto es la herencia múltiple, pero en mi opinión, es absurda si se tiene un sistema con una jerarquía bien armada. A la fecha, de hecho, no he hallado un ejemplo de la necesidad de herencia múltiple para representar conocimiento.

Procedimientos

En la POO las clases (y de hecho los objetos), tienen métodos asociados a ellos. Esto también ocurre con los marcos. Estos tienen métodos asociados a ellos llamados procedimientos.

Un procedimiento es un conjunto de instrucciones asociados al marco que puede ser ejecutado a petición. Por ejemplo, un procedimiento lector de las propiedades puede regresar un valor particular dentro del marco. Otro procedimiento puede insertar un valor en una propiedad. Un procedimiento importante es el constructor de una instancia, el cual crea la instancia de una clase.

Y si pensamos en esto, una red semántica dirigida (los marcos, pues), son un equivalente a la programación orientada a objetos, en donde se definen las propiedades de los mismos, los métodos que pueden usar y la herencia. Solamente quedaría duda de cómo usar el polimorfismo, es decir, cuándo se debe usar un procedimiento de un objeto u otro. Evidentemente esto se puede hacer y entonces, cualquier lenguaje basado en el paradigma de la POO puede ser usado para escribir programas " inteligentes". Es más, hay una clara equivalencia entre los marcos y la programación basada en la lógica de predicados y por ende, si podemos expresar un marco en la POO o bien, en la lógica de predicados, entonces en el fondo no hay un cambio de paradigma. Lo que parece ser que realmente tenemos es un esquema ded representación de conocimiento que no distingue entre paradigmas, porque en el fondo todos los lenguajes que expresan y representan conocimiento, hacen lo mismo.

Este resultado me parece asombroso en cierta medida. Así pues, no hay necesidad de elegir un lenguaje de programación que use un paradigma u otro, cualquiera puede usarse para representar conocimiento de la misma manera.

Wednesday, April 03, 2013

De árbitros y reglas


Hoy leo, en el periódico, que hay una pequeña crisis en el futbol mexicano. Aparentemente la semana pasada estuvo llena de fallos en el arbitraje de la liga de futbol MX. Expulsiones indebidas, tarjetas de amonestación exageradas, decisiones equivocadas, las cuales dejaban a un equipo literalmente en la indefensión. Y el punto es que en mi opinión, al contrario de lo que dice el Presidente Ejecutivo de la Liga MX, Decio de María que simplemente aclara: "Creo que es un tema que preocupa, pero no para calificarlo de crisis ..."

Pero la realidad es que las decisiones de los silbantes afectan en los resultados finales de los encuentros y entonces el futbol se vuelve un deporte injusto, el cual se decide muchas veces por una decisión errónea del árbitro.

La realidad -en mi opinión- es que la estructura del arbitraje en el futbol está totalmente equivocada. El hecho de que por tradición, si se quiere, exista sólo un árbitro, el principal, con los respectivos abanderados en las laterales de la cancha, hacen que el trabajo del silbante del encuentro sea lo más parecido al infierno: persigue una pelota los 90 minutos del encuentro pero no puede jugar con ella, tiene que tener vista de lince para reconocer una falta en un instante determinado, tiene que tener mil ojos para tomar decisiones casi al vuelo sobre todo lo que acontece en el terreno de juego y la verdad, es un trabajo proclive al error.

En deportes como el futbol americano, por ejemplo, hay un árbitro principal, pero se ayuda de no sé cuántos jueces auxiliares que monitorean cada jugada que se realiza en el juego. Un error, un movimiento ilegal y salen a relucir los pañuelos amarillos indicando que el proceso fue defectuoso. El árbitro principal toma las decisiones finalmente, pero es claro que su grupo de ayuda le hace la labor más sencilla. En cambio, en el futbol soccer el árbitro tiene una compleja labor y prácticamente está solo.

Y miren ustedes. La idea de un  árbitro es para que se respeten las reglas del deporte en cuestión. En ajedrez, por ejemplo, en algún momento hubo una regla, en donde el jugador debía reclamar si el rival perdía por tiempo. Si no se hacía el reclamo en el momento correcto, entonces el infractor podría no ser penalizado por ello. Después, me parece, la FIDE cambió la regla y entonces el árbitro puede decir cuando un jugador sobrepasa el tiempo de reflexión sin necesidad de esperar que el rival de dicho jugador se dé cuenta de esto.  Suena más sensato que el árbitro sea quien penalice a quien cometió la falta pues para ello está. Es su función. La idea, al final del día, es que se cumplan los reglamentos del deporte del que estemos hablando.

Por ello, pienso que la solución de De María está fuera de lugar: "más capacitación a los árbitros". Y es absurda la idea porque repito, la carga y responsabilidad que tiene un silbante en un partida es demasiado para una persona. Por ejemplo, ¿qué tal poner más de un árbitro, digamos uno para cada mitad de la cancha? Eso seguramente eliminaría errores de juicio causados por cansancio, por correr tanto en la cancha e ir observando todas las acciones. Repito ser árbitro de un partido de futbol es demasiado complejo y sujeto al error por la cantidad de juicios que debe hacer a cada instante el árbitro sobre todas las jugadas.

Tal vez como me dijo una vez Silvio Pla: No cambian las reglas de futbol, no se ponen más árbitros, no se usa la repetición instantánea en caso de jugadas dudosas, porque eso provoca la polémica al día siguiente en los medios. Se habla entonces toda la semana de las pifias de los árbitros, de todo lo que se marcó mal, etcétera. Da la impresión que la FIFA no piensa cambiar nada de eso porque eso hace más popular el juego al tener a los medios hablando de él todo el día.