kit de plug-ins para generar diagramas de constelaciones con GIMP
Más información sobre este proyecto en la sección Constelaciones.
Más información sobre este proyecto en la sección Constelaciones.
Programando mi generador de constelaciones llegué a este problema:
Obtener el mínimo cuadrado perfecto mayor a n (con n
¿Cómo hubiese sido la forma iterativa de hacerlo?
>>> def min_perf_sqrt(n): ... i = s = 1 ... while (s Este es mi one-liner hecho en python con un toque de programación funcional:min(filter(lambda i: i > n, map(lambda j: j*j, range(13))))Mmm probablemente la versión iterativa sea más eficiente.. programadores? comentarios?
Como parte de mi aprendizaje del lenguaje de programación Python y por la necesidad de generar automáticamente algunos dibujos, incurcioné en el milenario arte del Python-Fu.
Si querés conocer más sobre este acestral arte, seguí leyendo..
Script-Fu (un dialecto de Scheme) es el lenguaje original (además de C) utilizado para escribir plug-ins para Gimp (The GNU Image Manipulation Program). Actualmente se pueden escribir plug-ins en otros lenguajes como Perl, Tcl y.. Python
¿qué hay que tener instalado?
<li>python (<code>apt-get install python</code> en Debian GNU/Linux)</li> <li>gimp (<code>apt-get install gimp</code>)</li> <li>pygimp (<code>apt-get install gimp-python</code>)</li>
Los dos primeros programas suelen estar instalados en la mayoría de las instalaciones de GNU/Linux, el último no. Una verificación rápida puede hacerse ejecutando gimp y buscando la opción Python-Fu en el menú Exts.
Script-Fu
En http://www.jamesh.id.au/software/pygimp/structure-of-plugin.html se puede ver la estructura de un Script-Fu.
Cuando gimp es ejecutado, busca los archivos ejecutables que se encuentran en $HOME/.gimp-x-y/plug-ins/
. En el caso de los scripts en python, la función register() es ejecutada y cuando se acceda al plug-in mediante el menú especificado se ejecutará su función principal. Antención a esto: los archivos deben ser tener encendido el bit de ejecución (chmod +x hello-world.py
).
Otro tip: si algo no funciona como se espera, una forma de enterarse que pasó es ejecutar gimp desde una terminal (gimp --verbose
) y leer en esta las distintas salidas que produce el programa (allí se van a escribir los errores que se produzcan en tiempo de ejecución).
Links útiles
[update: a pedido del público: hello-world.py]
Pueden bajar hello-world.py para ver un ejemplo sencillo. Debería generar una imagen como esta:salvo que cambien los parámetros ;-)
Estoy usando emacs para practicar python.
En ~/.emacs.d/ guardé python-mode.el y en ~/.emacs tengo estas líenas:
(setq load-path (cons (expand-file-name "~/.emacs.d") load-path ))
(require 'python-mode)
(nconc auto-mode-alist '(("\.py\'" . python-mode)))
Cuando abro un archivo llamado *.py puedo tipear M-x font-lock-fontify-buffer[enter] y tener la sintaxis coloreada.
Este mes, cuando empecé a escribir código Python y quise publicarlo en mi blog, quería que se vea bien. Probé algunos coloreadores de código que encontré en la web, pero no me convencieron. Quería algo mas simple.
Entonces escribí un pequeño script que haga lo que yo quería, lo escribí logeado en la sesión ssh donde chequeaba mi correo electrónico.. y funciono! :-)
Le hice algunos arreglos antes de publicarlo, el más importante es la capacidad de aceptar muchos archivos como argumentos, entonces se puede usar por ejemplo así:
juanjo@platon:$ ./py2html.py *.py
Archivo comparacion.py procesado.
Archivo divisible.py procesado.
Archivo funcionesPF.py procesado.
Archivo maxRecurDeep.py procesado.
Archivo nullShell.py procesado.
Archivo py2html.py procesado.
Archivo tartaglia.py procesado.
Archivo whiteSpaces.py procesado.
Dejó el código fuente disponible por si a alguien le interesa, creo que es un buen ejemplo para empezar: py2html.py
¡Sugerencias son bienvenidas!
Otra cosa que leí es el apéndice A de TPiP : A Selective and Impressionistic Short Review of Python. Encontré muchas cosas interesantes que no conocía y encontré algunas cosas sobre programación funcional que estaba buscando: funciones anónimas, lambda, map, filter y reduce... siga leyendo!
Funciones anónimas:
Python toma de la programación funcional la posibilidad de definir funciones anónimas,
la desventaja de estas es que solo las podremos usar una vez, no podemos invocarlas por su nombre, no tienen :-)
Pero justamente esta es la idea, no tener que definir funciones (simples) que solo se usaran una vez, para usar por
ejemplo (aquí es donde las estoy usando) en funciones que esperan funciones como algunos de sus argumentos (ej: map, filter)
Estas fucniones no pueden (de forma natural) ejecutar más de una sentencia.
Ejemplos para probar en el intérprete:
Ejemplo 1:
>>> lambda x: x+1 # x es el argumento de la función anónima
function _lambda at 0x40219e2c_
Si bien la función fue definida, ya no podemos usarla, no tenemos como referenciarla.
Ejemplo 2:
>>> map(lambda x: x+1, [0, 1, 2, 3]) [1, 2, 3, 4]
Ejemplo 3: una forma de darle un nombre a una función definida mediante 'lambda'
>>> nombre = lambda x: x+1 >>> nombre(5) 6
map, filter y reduce:
Escribí un script con ejemplos sobre estas funciones: funcionesPF.py
La primer vez que escribí un código para el triángulo de tartaglia lo hice en Prolog y se me ocurrió que podría hacerlo en Python para practivar, lo hice de 4 formas distintas: tartaglia.py
Hola, estuve leyendo algunas cosas estos días:
How to Think Like a Computer Scientist -- Learning with Python a pesar de ser un texto introductorio a la programación, me pareció muy piola para ordenar ideas dispersas sobre Python que venía leyendo en distintos lugares. Leí los 4 primeros capítulos, y el capítulo 7 sobre cadenas de caracteres (strings):
Capítulo 1: The way of the program: da una introducción a los programas de computadoras, intérpretes y compiladores. También introduce a Python como lenguaje a usar en el curso.
For example, Linux is an operating system that contains thousands of lines of code, but it started out as a simple program Linus Torvalds used to explore the Intel 80386 chip. According to Larry Greenfield, "One of Linus's earlier projects was a program that would switch between printing AAAA and BBBB. This later evolved to Linux." (The Linux Users' Guide Beta Version 1)
Capítulo 2: Variables, expressions and statements Introduce algo que me parece muy importante en Python, el shell interactivo --el autor lo usa para dar sus ejemplos--. Cuando en una terminal ejecutamos python:
$ python
accedemos al shell interactivo en el que podemos probar cosas que luego usemos en nuestros scripts:
Python 2.3.4 (#2, Aug 31 2005, 09:12:07) [GCC 3.3.4 (Debian 1:3.3.4-9ubuntu5)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 3+4 7
Capítulo 3: Functions Usar funciones, cómo definirlas.. no menciona lambda que es lo que yo esperaba encontrar :-).
Capítulo 4:Conditionals and recursion Este capítulo estuvo lindo, y mientras lo leía hice algunas pruebas simples:
[1] El código se compila a byte-code (como Java). Se lo suele llamar interpretado por que no requiere que para probar un cambio en un programa se pase por el ciclo de modificar-compilar-enalzar-probar, separando explícitamente la compilación. Utiliza una máquina virtual, como Small-Talk.
[2] No es declarativo como Prolog (paradigma lógico)
[3] Permite tanto una programación procedural, orientada a objetos o funcional (básico).
No se mucho más que esto (más algunas cosas que empecé a leer sobre su sintaxis y las estructuras de datos que provee --como listas, tuplas y diccionarios--). Siga leyendo!
Voy a ir aprendiéndolo de a poco y voy a ir publicando aca mis avances, con ejemplos de código para que quien quiera pueda usarlos para aprender. Incluso podemos ir aprendiendo juntos, espero leer comentarios.
Material de Estudio:
Un artículo escrito por Eric Raymond: http://www.linuxjournal.com/article/3882 (a modo de motivación)
Nos seguimos leyendo por aca! (en busca del cinturón amarillo-python)