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

Glider Gun en thewalnut.io

This week in walnutland...

Después de mi implementación inicial del juego de la vida en walnut, me dieron ganas de implementar un patrón más complejo: el Gosper Glider Gun.

Me frenaba el hecho de que el setup del estado inicial es bastante a mano aún, pero las ganas fueron más y un día le dediqué una hora a cargar las celdas necesarias.

Cuando le di play, se cortó a los dos pasos: primero pinchaba por temas de memoria y luego de unos cambios por tiempo de ejecución :(

Ahora tenía que escribir una versión más optimizada del juego de la vida de Conway. La versión a la que llegué funcionaba bien con patrones simples, pero con el Glider Gun degeneraba mal. Fisa, uno de los desarrolladores de thewalnut.io me ayudó a debugearlo y antes de que termine el día pude ver el ejemplo corriendo:

Glider Gun


Primera experiencia con thewalnut.io

Esta semana se publicó la versión beta del sitio web thewalnut.io (creado por amigos de #machinalis). El sitio permite visualizar graficamente algoritmos y compartirlos con otros usuarios. Es una herramienta de aprendizaje y de comunicación. Una puede comunicar una idea de forma gráfica más fácil que con palabras o pseudocódigo. Y puede basarse en lo que otro construyó para experimentar, modificando, y así crear conocimiento.

En concreto

Ir de cero a la visualización de un algoritmo cualquiera no es trivial; es necesario llevar a cabo cuatro pasos:

  1. Describir un mundo: esto se hace mediante un DSL y require definir el estado del mundo (se hace con el keyword state y puede ir desde una variable booleana a una estructura de datos compleja), definir los roles para los agentes que interactuarán con el mundo (se hace con el keyword role, definiendo un sensor y actuadores), definir una función performance (no la estuve usando) y una función de fin de condición (le di el valor False porque quería hacer una simulación sin fin).
  2. Escribir un agente que interactúe con ese mundo: se puede hacer con Python3 o JavaScript. En el agente va la lógica para definir qué actuador se ejecuta ante cierta percepción del mundo.
  3. Plantear problemas para ese agente: se hace mediante una interfaz gráfica. Esto incluye principalmente el estado inicial del mundo.
  4. Escribir un visualizador: al igual que el mundo, se describe mediante un DSL propio.

Para lograr entender lo anterior, hice mi propio ejemplo desde cero. El objetivo era entender todas las partes y completarlo en un día.

El juego de la vida

1) Creé un mundo genérico para autómatas celulares.

2) Escribí un agente (no muy optimizado) que implemente el algoritmo del Juego de la vida de Conway (usando Python3; también se puede usar JavaScript).

3) Planteé el problema más sencillo que se me ocurrió, Blinker (Parpadeador).

4) Escribí un visualizador para visualizarlo.

Logre hacerlo funcionar luego de varias iteraciones.

Con esto andando, implementar cualquier patrón fue fácil.

Gilder

Lo siguiente fue jugar cambiando las reglas originales creando un nuevo agente:

celularautomata

Fork

El círculo se completó cuando alguien (redelmann) hizo un fork de mi mundo, planteó un nuevo problema, cambió el agente para que tenga una nueva propiedad y escribió un nuevo visualizador (visualizarlo):

ForkeadoEn este momento, en el sitio es un poco confusa la forma de correr simulaciones y forkear mundos y termina habiendo muchas copias con con nombres repetidos, pero confío en que el caos se va a ordenar pronto.


Restos del pasado presente

Ayer estuve ayudando a mis papás a mover un ropero de mi vieja habitación en Carlos Pellegrini. En el proceso encontré varios objetos que con solo verlos me transportaron al pasado. Entre ellos rescato mi primer trabajo en computadora:

Estaba en una carpeta que mi escuela primaria armaba para cada alumno con elementos destacados de cada años. Recuerdo incluso cuando nos la presentaron: "Cuando terminen séptimo, esta carpeta las va a quedad de recuerdo", dijo una de las maestras.


Multiviral - Calle 13

lengua

beso

boca

labio

niño

joven

viejo

sabio

calvo

rizo

pelo

lacio

techo

casa

cielo

espacio

Multiviral


appinventor

Esta semana empecé a probar appinventor un desarrollo de Google heredado por el MIT que permite desarrollar aplicaciones para Android si programar (o por lo menos sin hacerlo de la forma tradicional). El entorno de desarrollo es web (creas las aplicaciones dentro del navegador) y podés ver los cambios en vivo en tu teléfono. Tiene dos partes, un designer en el que se arma la UI de la aplicación (agregando botones y otros tipos de widgets) y un editor de bloques, en el que se hace la "programación" propiamente dicha.

Los programas se arman enganchado distintos componentes. Por ejemplo, hay un componente llamado if/else que tiene 3 muescas. En la primer muesca le encastrás una condición, en la segunda una acción para realizar si la condición es verdadera y en la tercera una acción para realizar si la condición es falsa. Hay componentes (o bloques, en la jerga de appinventor) tan simples como a definición de una variable o tan complejos como un objeto que realiza text to speech. La siguientes captura de pantalla da una idea de como se siente desarrollar en este entorno (las dos primeras son de programas que empecé a hacer, la última es el mínimo programa útil que logré hacer).

Me parece asombrosa la facilidad y rapidez con que se pueden desarrollar aplicaciones (sencillas) y parece muy útil para usar con chicos que estén aprendiendo a programar. Si avanzo con esto voy a estar posteando algunos ejemplos u cosas que me parezcan útiles.

update: cuando intenté hacer algo más complejo se volvió lento y tedioso :)



Recorriendo los murales de Carlos Pellegrini

El domingo al a mañana fuimos con mi abuela y Ceci a recorrer los murales que habían realizado los muralistas durante un encuentro que tuvo lugar en el marco de la Fiesta Nacional de las Culturas. En el camino nos lo encontramos a Ale y también lo cargamos en la recorrida.

[gallery link="file" order="DESC" columns="4" orderby="title"]

Un video al respecto, un post que incluye fotos del making-of y otro con más fotos.


@microcuentos

@microcuentos es una cuenta de Twitter que todos los días publica un cuento en menos de 140 caracteres. Esta es mi selección personal de lo mejor de los últimos meses:

Él le había puesto tres puntos suspensivos a la historia... Ella borró dos. Mónica Lira

Entonces la margarita, queriendo saber si la querían, se deshojó a sí misma y murió. Gabriela Agudo

El hombre lobo dejó de perseguirla, y ella se sintió mal. ¿Habrá sido algo que hice? Se preguntó. Christian Montalvo

El vampiro se dio cuenta de que la amaba. Dudó, pero decidió besarla a su manera. Soltó una lágrima. Ángel Alayón

La punta del cuchillo se rompió al tocar el esternón. Este otro intento de llegar a su corazón también falló. Cristian Soriano

Lo atraparon por estafar, vendiendo elixir de la juventud. Pero era reincidente, ya lo habían atrapado en 1675, 1794 y 1903. Julio Martínez

No sirvo para llevar corbata pues solo me salen los nudos narrativos. Juan Luis

Cuando el diablo se enamoró, buscó desesperadamente a quién venderle su alma. José Ernesto Sotuyo


Releí El juego del ángel

Ayer terminé de releer El juego del ángel, el segundo libro de una saga de cuatro (de los cuales se publicaron 3) de Carlos Ruiz Zafón. Adictivo. Sobre todo por que no me acordaba nada de la historia. Lo único que recordaba era lo mucho que me había gustado su forma de relatar.

"...la noche reptaba sobre Barcelona...", "...me lanzó una mirada que oxidaba al contacto...", "...un sudario de luz escarlata se esparcía sobre la ciudad..." (estoy citando de memoria y seguramente errando, pero ese es el tono).

La próxima novela a releer es La sombra del viento.


Simple template Latex para escribir una novela

Durante la última semana estuve buscando en Google distintas variaciones del título de este post sin resultado positivo. Busqué en español, en inglés y en checo. Nada.

¿Qué buscaba? Un archivo .tex con algunas definiciones básicas de formato que hagan que el resultado compilado luzca bien y en el que pueda escribir capítulos en archivo separados y que estos sean incluidos.

Abatido por las circunstancias, y fiel al espíritu del núcleo duro de los desarrolladores del kernel Linux, que dice que si algo no está es por que yo no lo hice, escribí el template Latex que quería.

O al menos una primera versión del mismo. Está hecho en base al documento de mi tesis de maestría (no publicado aún) pero mucho más simplificado. Para escribir una novela no se necesita (en principio) incluir gráficos, fórmulas matemáticas o código fuente.

El resultado está en github para poder mantener revisiones del mismo y para yo, o quien quiera, poder forkearlo cada vez que se quiera empezar una novela.

Forkeame en github.