lunes, 13 de mayo de 2019

Elige tu propio hola mundo (i): formato

Aunque he terminado varios cursos y he escrito algún programa corto en Python, nunca he terminado de sentirme cómodo con este lenguaje, probablemente porque nunca antes había emprendido un proyecto con la suficiente envergadura para afianzar mis conocimientos.

Por tanto, ahora que acabo de terminar un curso a fin de repasar lo que ya sé y ver este lenguaje desde otro punto de vista, he decidido iniciar un proyecto donde pueda aplicar lo que aprendo. En principio, había pensado hacer algo de generación automática de textos, a ser posible relatos o novelas, pero he preferidopor algo más concreto: crear una aplicación que trabaje con libros del estilo de la famosa saga de los ochenta «Elige tu propia aventura».



La originalidad de esta saga, una de las más vendidas de literatura juvenil, radicaba en que en lugar de leerse linealmente, cada pocas páginas plantea al lector varias opciones entre las que debe elegir una, por ejemplo:

Te sujetas mientras el helicóptero choca contra el hielo y se desliza al tuntún. Se parte un lado del fuselaje y arde, con grandes llamas.
Te quedan unos pocos segundos para salir con vida... ¡sólo tienes tiempo de coger una cosa!
Si coges las bengalas, pasa a la página 72.
Si coges las cerillas y la linterna, pasa a la página 80.
Si coges un saco de dormir, pasa a la página 95.

Estos libros tan populares también han ejercido una gran influencia en una generación que marcó una tendencia definitiva hacia un entretenimiento que mezclaba ficción con capacidad de decisión.

Antes de escribir ni una sola línea, necesitaba convertir algún libro a este formato. Ya había trabajado en un proyecto similar, pero en Java, en el que a partir de una hoja de cálculo, se generaba una página web, compatible con Kindle, con la historia en cuestión. En aquella ocasión, el formato era bastante estricto y utilizaba la columna en la que se colocaba cada texto en la columna para diferenciar entre descripciones y opciones.

Para este proyecto, quería que el programa aceptara el texto en el formato más próximo al original posible, para reducir al mínimo el tiempo que se tardaba en convertir un libro a este formato o redactarlo desde cero. Por tanto, decidí que el programa detectara automáticamente las opciones donde encontrara el texto «pasa a la página». El único elemento nuevo que había que introducir sería indicar al principio de cada página su número. Por tanto, una página tendría la siguiente forma:

[...]
*página 19
A esa altura estas bastante seguro de que has recorrido la mayor parte de la distancia que te separa de la última cabaña. No puede faltarte más de un kilómetro y medio para llegar al refugio... y a la radio. A través de la nieve, que cae torrencialmente, divisas un arqueado saliente rocoso que forma algo parecido a una diminuta cueva. ¿Te refugiarás allí y esperarás a que amaine la tormenta o seguirás adelante?
Si te pones a cubierto, pasa a la página 37.
Si continúas la marcha, pasa a la página 27.
*página 21
[...]

El archivo de entrada es un formato de texto plano pero, para que sea posible añadir ilustraciones y estilos de letra, admite etiquetas html. De esta manera, con un poco de práctica es posible convertir un libro de este tipo directamente extraído mediante OCR en una media hora. Para ver un ejemplo de este libro interactivo redactado con este formato, basta con visitar este siguiente repositorio en GitHub, pero si quieres recordar de inmediato la lectura de este libro, puedes leer nuestra miniaventura interactiva, aunque en este caso, no se trata de uno de los libros de aquella colección mítica, sino una aventura nueva redactada expresamente para servir de ejemplo. Notarás que es muy corta, ¿te atreves a continuarla?

Ahora solo queda escribir un programa que sea capaz de trabajar con este texto, pero eso lo veremos en la siguiente entrega.

sábado, 31 de marzo de 2018

AlphaGo: ¿un enfrentamiento entre hombre y máquina?

El documental AlphaGo se plantea como la habitual historia de éxito. Comenzamos conociendo al equipo de DeepMind, una empresa de inteligencia artifical de Google, para que luego se nos muestre muestre el reto al que se enfrentará y, a partir de ahí, el histórico torneo en el que participó contra el campeón del mundo de Go, un antiquísimo juego de mesa oriental, que se presenta de manera similar a cualquiera de los combates de boxeo de la saga de Rocky. El formato es ágil y ameno, aunque la emoción dependerá en parte de que sepamos el desenlace final. A este respecto, el documental hace un buen trabajo ya que no solo se centra en el resultado final, sino en el número exacto de victorias que consiguieron ser humano y máquina, algo que es más fácil que no sepamos.


Aparte de contarnos una historia entretenida, el verdadero interés de este documental radica en las reflexiones que se van entrelazando con el avance de la historia. Brillan en particular las aportaciones de Fan Hui, el campeón europeo de Go que fue el primer jugador profesional que se enfrentó al sistema creado por DeepMind. Sus primeras reacciones ante la máquina son las habituales: primero escepticismo y condescencencia con la máquina, a la que considera incapaz de ganarle, luego sorpresa al comprobar su capacidad y por último enfado y tristeza cuando el ordenador le derrota. Pero lo interesante, es que después de esta previsible cadena de emociones acontece un florecimiento, en el que se da cuenta de que la máquina puede a ayudarle a convertirse en un jugador mejor y se presta a colaborar para aumentar su poder.

La contradicción entre el deseo de que gane la máquina y el miedo a que lo haga flota sobre todo el documental. Incluso hay un momento en el que uno de sus creadores indica que la victoria de la máquina le produce cierta tristeza, porque demuestra que la especie humana ha quedado superada. Dado que probablemente se trate del mayor logro profesional de su vida, es interesante preguntarse si realmente lo siente o si se considera obligado, ya sea de manera consciente o inconsciente, o ponerse en parte en el bando de los humanos.

Estas reacciones son cada muy habituales cada vez que la inteligencia artificial se menciona en los medios. Por lo general, se tiende a desmerecer los méritos de las máquinas y parapetarse en los campos en los que todavía no nos han superado: no es tan maravilloso que un ordenador nos gane al ajedrez, se equivocan cuando hacen una traducción automática, nunca serán capaces de escribir una novela ni tener sentido común ni sentir aprecio por los demás... dicen con frecuencia supuestos especialistas que no son conscientes de que las últimas barreras ante la capacidad de los ordenadores van cayendo.

Ante estos avances tecnológicos que pueden ser revolucionarios, merece la pena mirar atrás y meditar sobre los efectos que han tenido sobre la raza humana progresos similares. Aunque el referente habitual es la revolución industrial del siglo XVIII, tal vez sea mejor retroceder aún más y remontarse a los tiempos de la invención de la escritura, cuando aún no existían los libros. Para los sabios de aquellos tiempo, tuvo que ser todo un agravio que los conocimientos que ellos con tanto cuidado atesoraban y transmitían oralmente quedaran plasmados en una forma física que los pusiera al alcance de cualquier que supiera leerlos. Alguien probablemente pensó que dejar por escrito tales conocimientos fomentaría la pereza mental del ser humano, que delegaría en los libros los conocimientos y no se preocuparía de fortalecer su intelecto.

Ahora que han pasado miles de año, sabemos con certeza que el resultado ha sido precisamente el contrario. Los libros nos han permitido vivir más tiempo, adaptarnos mejor al mundo y, literalmente, llegar a las estrellas. La inteligencia artificial nos ofrece ahora una manera de almacenar nuestros conocimientos, no de una manera estática sino activa y dinámica. No es que vayan a arrebatarnos nuestro sentido común, es que están comenzando a permitirnos fijarlo y ampliarlo, de una manera no tan distinta a cómo los libros ya nos permitieron hacerlo una vez.

Return to Arkham City (aprende a jugar en 5 minutos)

Pad derecho: ↑: seleccionar elementos (corriente eléctrica para abrir puertas) Pad izquierdo: △: contrataque/eliminación silenciosa ▢: ataqu...