Archivos para Enero, 2009

Jugando con Gimp y Potrace

Fanart de Gunbuster 01-09

Fanart de Gunbuster 01-09

Basado en un trabajo de Shunya Yamashita, del artbook “Wild Flower”.

El personaje es “Noriko Takaya”, una de las protagonistas de la famosa serie “Gunbuster” de Gainax, la cual fue continuada en la serie Diebuster. Ambas son muy divertidas.

En cuanto a la imagen, salió a partir de tratar de darle un aspecto “vectorizado” al original, luego aplicar “relieve” y finalmente retocar el tema del color general, para terminar el acabado simil “piedra”, (que por cierto no me conforma cómo quedó).

Dejar un comentario

Conociendo Factor

Como estoy de vacaciones y soy un geek, no podía hacer otra cosa que aprender un lenguaje de programación nuevo y raro.

Pues bien. Hace meses que estoy dando vueltas como mosca sobre www.factorcode.org bajando los binarios del lenguaje, pero nunca me decidí a comenzar con el aprendizaje.

Pues bien. Hoy estaba aburrido y me puse manos a la obra. Para empezar, Factor tiene unas cuantas peculiaridades:

  • concatenativo
  • basado en pila
  • basado en Forth
  • requiere un procesador con instrucciones SSE 2 (posterior a Pentium 4) . Update ( 10/02/09 ): Si se compila desde el código fuente, se puede correr sobre procesadores más viejos. Las versiones precompiladas de Factorcode son las que requieren las instrucciones especiales.

Lo primero significa en términos rápidos y groseros, que los operandos van primero y el operador al final. Por ejemplo:

(1 + 2) / 5 en Factor se escribe 1 2 + 5 /

Lo segundo indica que la estructura principal de almacenamiento de datos es una pila. Es decir, todos los datos se insertan y quitan de una pila que maneja el lenguaje. Ésto permite simplificar un montón las cosas, sobre todo en lo que es la forma de “decir” las cosas.

Continuando con el ejemplo anterior, lo que sucedió es lo siguiente:

  1. al escribir 1 2 se “pushean” en la pila los elementos 1 y 2
  2. ” + ” es una función que toma dos elementos de la pila y le inserta el resultado, por lo que queda un 3 en la pila.
  3. luego se le inserta un 5, por lo que en la pila queda ” 3 5 “
  4. y finalmente ” / ” toma dos operandos de la pila y “pushea” el resultado nuevamente, por lo que queda ” 3/5 ” (si, queda como fracción, no como punto flotante).

Pero para cosas más interesantes viene lo tercero. Forth es un lenguaje bastante viejo, pero muy visionario en su época. Combina un intérprete interactivo con un compilador. El usuario escribe de manera interactiva las subrutinas que en Forth se denominan “palabras” ( “words” ). Previsiblemente un conjunto de palabras forman un “vocabulario”. Las palabras se compilan, debuggean y reescriben de manera interactiva, todo mediante una máquina virtual.

De la misma manera, en Factor trabajamos en un entorno, definiendo palabras, que trabajan sobre una pila.

Entorno de Factor

Entorno de Factor

Por ejemplo, una secuencia se escribe entre llaves.

{ 1 2 3 4 }

Para definir una función que obtenga el promedio de la secuencia anterior hacemos

: average ( seq -- n ) dup sum swap length / ;

Y por supuesto podemos probar haciendo

{ 1 2 3 4 } average .

que retorna “2+1/2″.

Lo que hace la palabra “average” es duplicar el contenido de la cima de la pila (queda la secuencia repetida), luego hacer la sumatoria del la primer secuencia, y se deposita el resultado en la cima de la pila. Intercambiamos (“swap”) el primer elemento de la pila por el segundo (queda la secuencia en la cima). Obtenemos la longitud de la secuencia y depositamos el resultado en la pila. Finalmente obtenemos el resultado final realizando el cociente entre los dos elementos que hay en la pila.

Por supuesto que esto no demuestra todo el lenguaje ni su potencial, pero mi intención es introducirlos un poco en el tema.

Un punto feo de Factor es que no existe mucha documentación para el principiante. Si bien el lenguaje incluye muchísimo código y documentación, es para gente ya “fluente” en el lenguaje. Los que comenzamos tenemos que ir dilucidando por prueba, error y algún que otro chispazo de inspiración.  Pero la gente de Factor está trabajando en éso. Piensen que el lenguaje todavía está en “beta”, aunque es funcional y ya sirve para realizar un montón de cosas.

Si quieren investigar más al respecto pueden consultar los siguientes enlaces:

http://en.wikipedia.org/wiki/Stack-oriented_programming_language

http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_basado_en_pila

http://concatenative.org/

http://factor-language.blogspot.com/2009/01/advantages-of-concatenative-and-stack.html

http://learnfactor.org/

Esta es una charla de Slava Pestov, el mismísimo creador de Factor. Si entienden inglés, se la recomiendo.

Dejar un comentario