Agosto 15, 2007

Clasificado bajo: Personal, Software, Software libre, PythonPablo Orduña @ 2:11 am

Y otro año más se acabaron ya los cursillos de Julio :-( Como siempre, puedes ir a menos de los que te hubiera gustado, pero es lo que hay.

Por mi parte este año he dado dos cursillos, uno de Python (similar al que el año pasado di con arka, algún que otro cambio añadiendo un poco de TDD), y otro completamente nuevo con María y Kalgan, de Rich Internet Applications, metiendo OpenLaszlo y Google Web Toolkit, que me ha gustado cómo ha quedado al final.
Las transparencias del cursillo de Python están aquí:

Y las del taller de Rich Internet Applications están aquí:

Aparte, tanto las transparencias como todo el material (código, código de las transpas, etc.) está en mi página de documentación (además de en la web del e-ghost).

Diciembre 26, 2005

Clasificado bajo: Móvil, PythonPablo Orduña @ 3:08 am

En ratos libres, sigo jugando con Python en el móvil. Y ya tocaba probar la consola de Python del móvil a través de Bluetooth.

O sea, hasta ahora había jugado o bien desde el móvil diréctamente (cuando no tenía el ordenador a mano), o bien desde el ordenador, escribiendo la prueba, mandándola al móvil por bluetooth, y desde ahí ejecutándola. Pero una de las cosas que más me gusta de Python es el hecho de que tenga una consola interactiva, en la que puedas ir escribiendo código y viendo su efecto en ejecución, y por eso también me mola por ejemplo jython cuando tengo que programar en Java, para tareas como probar de manera más intuitiva el resultado de determinadas librerías.

Y el intérprete de Python de Nokia para Symbian, pues tiene una opción de “Bluetooth console”, que lo que hace es establecer una conexión bluetooth con el ordenador y emular una comunicación de puerto serie, de manera que con un programa como minicom puedes tener abierta una consola de Python del móvil en el ordenador.

Para hacerlo, hay documentación en varios sitios, que resumido:

En /etc/bluetooth/rfcomm.conf tengo:

rfcomm0 {
        bind no;
        device 00:13:fd:b8:52:d5;
        channel 1;
        comment "Example Bluetooth device";
}

Y luego, pues ejecuto:

# /etc/init.d/bluez-utils restart
# sdptool add --channel=1 SP
# rfcomm listen /dev/rfcomm0

desde el móvil, ejecuto en python lo de “Bluetooth Console”, y veo en el donde había puesto lo de rfcomm:

Connection from 00:13:FD:B8:52:D5 to /dev/rfcomm0
Press CTRL-C for hangup

Entonces, ya:

$ minicom -m

que previamente habré configurado para que tire de /dev/rfcomm0 haciendo:

$ minicom -m -s

Y me dice que iniciando modem y luego ya:

>>> AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0
  File "“, line 1
    AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0
        ^
SyntaxError: invalid syntax
>>> print “hola mundo”
hola mundo
>>>

Lo primero no tengo la menor idea de por qué sale, pero paso de buscar :-)

Y eso, todo lo que vas ejecutando lo está ejecutando el móvil, con lo que si haces:

>>> import appuifw
>>> appuifw.note(u'Hola',u'info')

pues te aparece un bonito “Hola” en el móvil. Y el resto, pues sin más, puedes probar la API y librerías que metas.

Y Escape + X para salir.

Una cosilla que igual no mola mucho es que no he visto nada tipo sandbox. Porque cuando estuve en el codecamp, pude comprobar que puedo mandar SMSs o sacar fotos en dos o tres líneas:

>>> #Sacar foto
>>> import camera
>>> f = camera.take_photo()
>>> f.save('C:\prueba.png')
>>> #O bien en una línea
>>> __import__('camera').take_photo().save('C:\prueba.png')

o

>>> #Mandar un SMS
>>> import messaging
>>> messaging.sms_send(u"61235678",u"hola")
>>> #O bien en una línea
>>> __import__('messaging').sms_send(u'612345678',u'hola')

y el script se ejecuta y lo hace sin preguntar ni nada (hombre, ves por ahí el simbolito de que se está enviando un SMS… pero vamos, que no es mucho).

Por último, como curiosidad, Kalgan nos contó el otro día un par de huevos de pascua de Python:

>>> import this

y

>>> from __future__ import braces

que, curiosamente, la implementación de Nokia implementa también el segundo :-D pero no el primero.

Diciembre 7, 2005

Clasificado bajo: Python, Idas de ollaPablo Orduña @ 11:55 pm

En ocasiones… no veo sueños. Vamos, que a veces me cuesta dormir. Y más los últimos días. Y esperando a que el sueño llegue, a veces me pongo a hacer el chorra.

Por ejemplo, ayer mi hermana por el día cogió una foto de una compañera de curro y con el Gimp hizo una movida como los típicos pósters de Marylin Monroe o Ché Guevara hechos por Andy Warhol (qué mofa, lo digo como supiera lo que digo!). Ella seguía esta guía, y el rollo de coger la imagen final, ir copiándola varias veces, cambiando colores cada vez, e ir pegándolas ordenaditas en una nueva… fue como “qué rollo”.

Y anoche, pues no podía dormir, y rayado me dio el puntazo pensando… “qué diablos! fijo que se puede programar!”… et voilà! un scriptillo cutre en Python y más o menos facilita la parte rayada de la tarea.

Yo, a lo Andy Warhol

La movida es que Gimp tiene su libgimp, y tiene la capacidad de hacer plug-ins rápidos mediante scripts que llamen a esas funciones para interactuar con la imagen. Y los scripts pueden estar programados en Python, me imagino que gracias a tener instalado en Ubuntu el paquete gimp-python.

Con esto puedes hacer cosas como eso, tener un submenú más en el menú de la imagen, y que cuando lo llames, pues le pases unos parámetros (datos del plugin que tú pidas) y actúes en consecuencia (haciendo lo que te de la gana). Es un poco jarto porque por lo que parece no hay nada tipo sandbox, o sea que tienes que confiar mucho en los plug-ins. A cambio, lo que pueden hacer es bastante cañero, porque en tareas muy mecánicas, pues te ahorra tiempo.

Entonces, para hacer los Andy Warhols, sólo hay que:

  • Instalar el plugin (bajarlo de aquí a ~/.gimp-2.2/plug-ins/ y darle permisos de ejecución - chmod 755 andy_warhol.py)
  • Coger una foto:
    Yo, a lo Andy Warhol
  • Y con el lacete (”Seleccionar regiones dibujadas a mano”), pues pillar el jeto de la foto, copiar y “pegar como nueva”, por ejemplo.
    Yo, a lo Andy Warhol
  • Coger la capa en la que se ha pegado, y duplicarla. Si la ventana con las capas no está a la vista, pues en la ventana principal del Gimp darle a: Archivo -> Diálogos -> Capas (o bien Control + L)
  • En la capa duplicada, dando a Capa -> Colores -> Umbral, sale un menucillo que según lo cambias puedes ver los rasgos que se verán luego. Dependerá de la imagen y eso
    Yo, a lo Andy Warhol
  • También le damos a Seleccionar -> por color, seleccionamos el blanco y lo quitamos
  • Una vez hecho esto, cambiamos el nombre de la capa en la que está la foto original, y la llamamos “Original”
  • Para hacerlo más chulo, podemos cambiar nombre de la capa en la que está la cara, y la llamamos “Face”
  • Entonces, haciendo click en Python-fu -> Andy-Warhol, sale un menucillo con una serpiente. Le decimos que aceptar y..
  • Se ejecuta el script.

Yo, a lo Andy Warhol
Lo que hace el script es una chorrada, coge la imagen original, le pone un umbral de la ostia para distinguir la silueta, y entonces, teniendo un fondo, la silueta, y lo que hemos cogido de la jeta antes, va copiando la imagen con diferentes colores pues las veces que venga en el script en una nueva imagen.

¿Que cuántas veces y qué colores? Pues los colores he hecho una de rapiña de este sitio, y están en la primera línea del script con una cosa de este pelo:

AW_BACKGROUND_COLORS=[
[ [0xFF,0xFD,0x0A], [0x05,0x83,0xEA], [0x2A,0x20,0x81] ],
[ [0xF6,0x84,0x07], [0xE2,0x09,0x1C], [0x86,0xB2,0x07] ],
[ [0x21,0x6E,0x64], [0xFF,0xFB,0x06], [0xE4,0x04,0x7C] ]
]

AW_FACE_COLORS=[
[ [0x2B,0x25,0x7D], [0xE3,0x05,0x7C], [0xE9,0x06,0x21] ],
[ [0x79,0x43,0x99], [0x1D,0x1A,0x21], [0xEA,0x68,0x08] ],
[ [0xE7,0x09,0x76], [0xE9,0x1D,0x20], [0x29,0x20,0x7D] ]
]

Entonces… los colores son esos (en RGB), en plan AW_FACE_COLORS por ejemplo es una lista, que tiene 3 filas, cada una de las cuales tiene 3 colores (una por columna), siendo cada color una lista de tres números (R,G,B). Y el número de filas / columnas, pues es ese también. Vamos, que si lo cambiamos por:

AW_BACKGROUND_COLORS=[
[ [0xFF,0xFD,0x0A], [0x05,0x83,0xEA] ],
[ [0xF6,0x84,0x07], [0xE2,0x09,0x1C] ],
[ [0x21,0x6E,0x64], [0xFF,0xFB,0x06] ]
]

AW_FACE_COLORS=[
[ [0x2B,0x25,0x7D], [0xE3,0x05,0x7C] ],
[ [0x79,0x43,0x99], [0x1D,0x1A,0x21] ],
[ [0xE7,0x09,0x76], [0xE9,0x1D,0x20] ]
]

pues en lugar de 3 filas por 3 columnas, tiene 3 filas por 2 columnas, sin más.

Supongo que para peña que sepa todo esto será una chapuza y mal hecha, o sea que mis oídos están abiertos a todo tipo de críticas constructivas y sugerencias :-D (y no hace falta decir que si alguien se pone a mejorar el script, que haga lo que quiera con él, vamos, que dominio público)

Y ya con eso, acaba mi puntazo pseudo-artístico por un tiempo :-) a ver si le sirve de algo a alguien

Como fin, otras pruebas que he hecho, con Richard:
Richard, a lo Andy Warhol
María:
Richard, a lo Andy Warhol
Nando:
Nando, a lo Andy Warhol
o Saladino:
Saladino, a lo Andy Warhol

EDIT: Dejo aquí una pequeña actualización, que permite colorear también el borde, por ejemplo:
Saladino, a lo Andy Warhol

Noviembre 5, 2005

Clasificado bajo: Software libre, Python, IECON 2005Pablo Orduña @ 5:28 pm

Hoy me he despertado en el apartamento de Bram.

Parece que la cosa mejora: anteanoche dormía en una colchoneta hinchable que a las 6 de la mañana estaba deshinchada (y la madera del suelo no entra en mi definición de comodidad), pero Corey se piró a trabajar y le pude robar la cama, que era un colchón de pocos centímetros. Anoche salimos de mucha farra, y como no había modo de volver a la fraternidad (salí con Bram y sus colegas), pues he dormido en el apartamento de Bram, en un sofá (que no se deshincha ;-) ), y cuando Bram se ha ido a prácticas de música, le he podido robar la señora cama que tiene :-D

Y Open Source. Ayer estuve hablando con un profesor de ciencias atmosféricas de la UGA que es de la hermandad donde me estoy alojando, y me estuvo contando cómo en sus clases hacían las prácticas con Python, y una de las razones por las que había elegido ese lenguaje era precisamente que era Open Source.

También es cañero ver a Bram tirando de mozilla o a Corey de firefox. Aunque Corey te diga que no sabe qué es eso de Open Source, y que usa Firefox por comodidad, es flipante ver a Bram, estudiante de Económicas, manejando su página web con bash en el servidor Debian GNU/Linux de un colega suyo, tirando de ssh desde su putty en su Windows. Creo que ha sido la primera vez que veo a un usuario de Windows que nunca ha tenido instalado un UNIX tirando de bash. Pero bueno, Bram siempre ha sido un artista.

No sé, mola ver que realmente el software libre no tiene ninguna relación con “algo dificil de usar”, con algo “que sólo le gusta a programadores”, o algo que no funciona demasiado bien, como a veces hay quien dice.

Octubre 31, 2005

Clasificado bajo: Software, Móvil, PythonPablo Orduña @ 1:33 am

Willy en su cursillo de bluetooth con Java puso como ejemplo un programilla con el que iba pasando transparencias desde el móvil, para evitar tener que estar delante del ordenador.

Como Willy lo puso para Windows con Java, jugando con Python en el móvil, he probado a programarlo para GNU/Linux, y, aunque será una chapuza total, lo voy a colgar aquí.

Y la verdad es que es interesante el intérprete de Python para móviles. Encontré un documento cojonudo aquí, donde más o menos introduce a los primeros pasitos en Python en móviles desde GNU/Linux, que es justo lo que yo necesito ahora mismo.

Lo que haces es, básicamente, instalar el intérprete de Python de Nokia en el móvil, y, una vez instalado, desde el móvil puedes ejecutar un intérprete, o interpretar un .py, o bien lanzar una consola de Python vía bluetooth, que es algo que todavía no he conseguido. Y la API que ofrece es bastante cañera. Por el momento sólo he dado un par de pasitos pequeñitos pequeñitos con bluetooth y el GUI, pero parece que tiene bastantes cosas, que si para mandar SMSs, información de la batería, imei, audio, que si sacar fotos con la cámara, etc. etc.

Pero bueno, como tampoco es ahora mismo algo que me agobie precisamente, va a ser que no voy a retocar el tema hasta dentro de algún tiempo…