Automágica: durante 2017 estoy trabajando bastante en Automágica, mi software para editar libros: Más información - Posts relacionados

Harry Potter y los Lenguajes de Programación

Buscando información sobre diseño de lenguajes de programación (just for fun) me topé con un artículo que relaciona este tópico con los libros de Harry Potter (de los que soy un feliz lector). Para darle más fuerza a la casualidad, el autor del artículo es la misma persona que creó el lenguaje de programación que más me gusta.

Me tomo la libertad de traducir este artículo de Guido Van Rossum, creador del lenguaje de programación Python.

La Teoría de Harry Potter para el Diseño de Lenguajes de Programación

por Guido van Rossum

14 de Agosto de 2005

Resumen

Una comparación alegre de como exitosos autores de ficción y diseñadores de lenguajes de programación pueden por accidente encontrar en su primer trabajo las pistas de sus éxitos futuros.

La teoría

Me encanta leer los libros de Harry Potter, y recientemente se me ocurrió una analogía interesante entre escribir series de libros de ficción y diseñar lenguajes de programación.

Estoy seguro de esto: cuando J.K. Rowling escribió el primer libro de Harry Potter (como el primero de una serie de siete) había desarrollado una buena idea de las cosas que eventualmente iban a pasar en la serie pero no tenía la idea exacta de lo que iba a pasar en los restantes libros, tampoco todos los detalles de cómo funcionaría la magia en el mundo que estaba creando.

También estoy asumiendo que a medida que iba escribiendo los volúmenes sucesivos, volvía a los primeros libros para rescatar detalles que habían sido introducidos solo para darle color a la historia y darles un nuevo significado. Por ejemplo, dudo que cuando inventó el nombre Voldemort ya haya pensado que "I am Lord Voldemort" (Yo soy el Señor Voldemort) sería un anagrama de "Tom Marvolo Riddle" (Tom Riddle no es un nombre muy convincente para quien terminaría siendo la persona más mala del mundo, pero aparentemente no pudo encontrar un buen anagrama para Voldemort solo). Tampoco pienso que haya pensado que la patética rata de Ron, Scrabbers, sería un animago (el hecho de que le falte un dedo, al menos en lo que yo se, no aparece en ninguno de los dos primeros libros). Creo que ya captaron mi idea.

De forma similar, no había pensado en iteradores o generadores cuando se me ocurrió por primera vez el for-loop de Python o usar % como un operador para el formateo de strings, y de hecho, usar 'def' para definir tanto funciones como métodos tampoco fue parte del plan inicial.

De la misma forma en que los sucesivos libros de Harry Potter requieren tener continuidad (el gusto de Dumblendor por los dulces no puede cambiar drásticamente en el tercer libro), las versiones sucesivas de Python están limitadas por serios requerimientos de compatibilidad hacia atrás.

A veces es fácil volver y generalizar una característica, por ejemplo, trasnformar las funciones de conversión int(), str() y list() en clases. Por otro lado, una reciente discusión en python-dev sobre la jerarquía de las excepciones (PEP 348) ha mostrado que deciciones anteriores pueden ser menos que ideales. Las inconsistencias en la convención de nombres y la calidad del API son otro ejemplo.

Comentarios al artículo original: http://www.artima.com/forums/flat.jsp?forum=106&thread=123234

Correcciones: por desconocer cuestiones internas del lenguaje o de mi traducción en sí son bienvenidas.


Hunt the Wumpus!

Mientras cursamos este cuatrimestre Intelegencia Artificial en la facu uno de los ejemplos que aparecía era el del Wumpus, un monstruo que vive en una cueva muy parecida a una grilla. El Wumpus ocupa una casilla de la grilla (dónde inicialmente está dormido) y en las otras puede haber pozos, viento de un pozo cercano, olor a Wumpus o un lingote de oro. Y por supuesto nosotros (el cazador).

Este escenario constituye un juego en el cual el cazador (que solo puede percibir lo que hay en las celdas adyacentes a las que ocupa) debe realizar movimientos (Arriba, Abajo, Derecha, Izquierda) o acciones como lanzar una flecha o tomar el lingote para cumplir su objetivo: salir de la cueva con el oro y sin ser comido por el Wumpus.

Hasta aquí nada nuevo para contarles. Lo curioso del asunto es que yo pensaba que el juego era solo una herramienta didáctica, que agradable sorpresa encontrarlo mientras navegaba la web: http://www.catb.org/~esr/wumpus/.

           WUMPUS and SUPERHACK



WUMPUS is a bit of retrocomputing nostalgia.  It is an *exact* clone, even

down to the godawful user interface, of an ancient classic game.  This version

fixes two minor bugs in my original 1992 USENET posting of the source.  An

article describing the history of the game is at



    http://www.atariarchives.org/bcc1/showpage.php?page=247



SUPERHACK is a satire, structurally quite similar to WUMPUS.



For updates and related resources, see <http://www.catb.org/~esr/wumpus/>

Intrigado bajé el código fuente y sin problemas lo compilé en mi computadora, cuando lo ejecuté esto fue lo que vi en la pantalla:

WELCOME TO 'HUNT THE WUMPUS'
THE WUMPUS LIVES IN A CAVE OF 20 ROOMS. EACH ROOM HAS 3 TUNNELS LEADING TO OTHER ROOMS. (LOOK AT A DODECAHEDRON TO SEE HOW THIS WORKS-IF YOU DON'T KNOW WHAT A DODECAHEDRON IS, ASK SOMEONE) HAZARDS: BOTTOMLESS PITS - TWO ROOMS HAVE BOTTOMLESS PITS IN THEM IF YOU GO THERE, YOU FALL INTO THE PIT (& LOSE!) SUPER BATS - TWO OTHER ROOMS HAVE SUPER BATS. IF YOU GO THERE, A BAT GRABS YOU AND TAKES YOU TO SOME OTHER ROOM AT RANDOM. (WHICH MAY BE TROUBLESOME) TYPE AN E THEN RETURN

Hay una versión en Python que funciona out-of-the-box (aka doble click for win slang) que nos permite disfrutar del juego sin siquiera la necesidad de compilarlo. Demasiado perezosos como para bajar un archivo? Ok, les dejo esta versión on-line (aunque la interfaz no es como la original).

Cómo para casi todos los temas importantes, más información en la Wikipedia.


Los animales de Ubuntu

Ojo! No! Por supuesto que no estoy hablando de los desarrolladores o algo por el estilo! Me refiero a los nombres con los que llaman a sus distribuciones.

Hace unos días, con la salida de Feisty Fawn (7.04), se me ocurrió salir a la caza de los significados de los nombres de estas distribuciones. Diversas ocupaciones no me permitieron emprender el safari, pero por suerte Facundo Batista lo hizo en su blog.




El paquete de galletitas

Ayer me desperté en Santa Fe y me acosté en Carlos Pellegrini, hoy me levanté en Pellegrini y me voy a acostar en Santa Fe. En el medio comí un asado, vi a un primo que no veía hacía mucho, miré una película y vendí diarios.

En uno de los diarios leí esta historia, ya la había leido, sin embargo volvió a causarme la misma gracia que la primer vez. Además de ser risueña deja una enseñanza, asi que la comparto con Uds.

El paquete de galletitas

Una noche estaba una chica en un aeropuerto esperando antes de que partiera su próximo vuelo. Como tenía que esperar varias horas compró un libro y un paquete de galletitas para pasar el tiempo.

Buscó un asiento y se sentó a esperar. Estaba muy absorta leyendo su libro, cuando de repente notó que el joven que se había sentado frente a ella estiraba la mano, con mucha frescura agarraba despreocupadamente del paquete de galletas que estaba entre ellos y comenzaba a comérselas, una a una. No queriendo hacer una escena ella trató de ignorarlo.

Un poco molesta la chica comía las glletitas y miraba el reloj, mientras que el joven ladrón de galletitas, sin vergüenza casi también se las estaba acabando.

La chica se empezó a irritar más y pensó para sí misma:

"Si no fuese yo tan buena y educada, ya le hubiera dejado un moretón en el ojo a este atrevido"

Cada vez que ella comía una galleta, él también comía otra. El diálogo de sus miradas continuó y cuando sólo quedaba una, se preguntó que haría él.

Con suavidad y con una sonrisa nerviosa, el joven alargó la mano, tomó la última galleta, la partió en dos y le ofreció una mitad a la chica mientras él comía la otra.

Ella tomó la media galleta bruscamente de su mano y pensó:

¡Qué hombre más insolente! ¡Qué mal educado! ¡Ni siquiera me dió las gracias!

Suspiró con ansias cuando su vuelo fue anunciado. Tomó sus maletas y se dirigió a la puerta de embarque rehusándose a mirar en dirección donde estaba sentado aquel ladrón ingrato.

Después de haber abordado el avión y estar sentada confortablemente, buscó otra vez su libro que ya casi había terminado de leer.

Al buscar su libro dentro su bolsa se quedó totalmente sorprendida cuando encontró su paquete de galletas casi intacto.

La reflexión queda a cargo del lector.


El Zen de Python

En el intérprete interactivo de python:

>>> import this

The Zen of Python, by Tim Peters

Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren't special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one-- and preferably only one --obvious way to do it. Although that way may not be obvious at first unless you're Dutch. Now is better than never. Although never is often better than *right* now. If the implementation is hard to explain, it's a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one honking great idea -- let's do more of those!


count++

Si bart fuese hacker..

count++




Historia de Trenes

Hoy comiendo con unos amigos conté esta historia. Busqué en mi computadora y encontre, entre viejos back-ups, un archivo llamado Historia_de_trenes.txt que escribí hace varios años:

La siguiente historia no nació en mi mente, sino que la leí en una revista de informática hace unos años, no la tengo en mi poder como para citarla o como para reproducir la historia textualmente, digamos que tiene la fidelidad al original de una historia contada de boca en boca.

La historia solo tiene como fin sugerir que ciertas personas fueron más astutas que otras, y no es para nada una apología del delito. Cualquier similitud con la realidad es mera coinsidencia.

Historia de Trenes

Se encuentran en una estaci¢n de trenes 3 empleados de Micro$oft y 3 desarrolladores de Software Libre que se dirigían a un congreso sobre nuevas tecnologías. Los empleados de Micro$oft sacaron sus boletes, hicieron fila y vieron asombrados que los desarrolladores de Software Libre sacaban solo un boleto. Boquiabierta, los empleados de Micro$oft le preguntaron a los desarrolladores de Software Libre como harían para viajar 3 personas con un solo boleto, a lo que estos respondieron

que ya verían. Una vez en el tren, los 6 personajes de esta historia se sentaron en el mismo vagón.

Cuando el engargado de recoger los boletos se acercaba, los desarrolladores de Software Libre se metieron en un pequeño baño que había en el vagón. El encargado, al grito de: "Boletos por favor!", retiró los boletos de los empleados de Micro$oft y de otras personas que allí estaban, luego golpeó la puerta del baño, gritó: "Boletos por favor!", la puerta se entreabrió, y una mano con un boleto se asomó, el encargado tomó el boleto y se retiró. Al instante los desarrolladores de Software Libre salieron del baño. Fasinados con la estrategia, los empleados de Micro$oft decidieron hacer lo

mismo en el viaje de regreso y así mostrarle a su jefe Bill, lo astutos que habían sido y que habían ahorrado el dinero de dos pasajes.

En la estación de trenes de la ciudad donde se había realizado el congreso, se encotraron nuevamente los empleados de Micro$oft y los desarrolladores de Software Libre, los empleados de Micro$oft compraron un boleto, hicieron fila, y casi se caen del asombro al ver que los desarrolladores de Software Libre se incorporaron a la fila sin comprar ningún boleto,

pero sin hacerles ningún comentario, dejaron pasar la esena, confiando en la desventura que sus antagonistas sufrirían; los 6 se sentaron en el mismo vagón y en seguida los empleados de Micro$oft se metieron en uno de los baños del tren, instantes después, uno de los desarrolladores de Software

Libre se para, les golpea la puerta y grita: "boletos por favor!" :-)