PDF de programación - PET: Python Entre Todos #3

Imágen de pdf PET: Python Entre Todos #3

PET: Python Entre Todos #3gráfica de visualizaciones

Publicado el 22 de Mayo del 2018
911 visualizaciones desde el 22 de Mayo del 2018
10,5 MB
61 paginas
Creado hace 12a (16/07/2011)
Licencia

Esta revista está disponible bajo una licencia CC-by-nc-sa-2.5.

Es decir que usted es libre de:

Copiar, distribuir, exhibir, y ejecutar la obra

Hacer obras derivadas

Bajo las siguientes condiciones:

Atribución — Usted debe atribuir la obra en la forma especificada por
el autor o el licenciante.

No Comercial — Usted no puede usar esta obra con fines comerciales.

Compartir Obras Derivadas Igual — Si usted altera, transforma, o crea
sobre esta obra, sólo podrá distribuir la obra derivada resultante bajo
una licencia idéntica a ésta.

Texto completo de la licencia (http://creativecommons.org/licenses/by-nc-sa/2.5/ar/)

En Este Número
Licencia
Y…Python cambió mi vida (Seguro vos me entendes)
Python en tu filesystem: Creando filesystems en userspace
con Python y Fuse
Desarrollo de Plugins en python para software educativo
TurtleArt
Chorizos de serpiente
Procesamiento de lenguaje natural con NLTK (Natural
Language Toolkit)
Haciendo videojuegos con pilas
pycamp ORM, haciendo fácil usar sqlalchemy
VIM, un editor con baterías incluidas
¿Qué se siente llegar a ser disertante?
xkcd

2
1
3

9

16
20

28
35
48
55
58

Staff

Editores: Juan B Cabral - Tomas Zulberti. Sitio: http://revista.python.org.ar
PET es la revista de PyAr, el grupo de usuarios de Python Argentina. Para
aprender sobre PyAr, visite su sitio: http://python.org.ar Los artículos son (c)
de sus respectivos autores, reproducidos con autorización. Portada: Catriel
Müller
Editor responsable: Roberto Alsina, Don Bosco 146 Dto 2, San Isidro,
Argentina. ISSN: 1853-2071

1

Y…Python cambió mi vida (Seguro vos me entendes)

Y…Python cambió mi vida (Seguro vos me
entendes)

Autor:
Bio:

Web:

Juan B. Cabral
JBC conoció python una solitaria noche
del 2007. Desarrolló su proyecto de
grado de
la carrera Ingeniería en
Sistemas con este lenguaje utilizando
el framework Django y trabajó 1 año
desarrollando
de
información usando nuestro querido
reptil.
http://jbcabral.wordpress.com

evaluadores

Twitter: @juanbcabral

Si bien al cierre del evento dije que mis compañeros solo fueron colaboradores, eso
no es cierto, fue una palabra muy pequeña que lastimó bastante a algunos.
Este evento fue laburo de mucha gente, si bien metí el pecho como coordinador
general, mucha otra gente hizo posible el evento:
Sin Santiago moreno, no hubiéramos tenido lugares, ni cañon, ni pizarrones, ni todo
lo que dio la universidad.
Sin Emilio Ramirez, la comida no hubiera sido posible, todos tendrían que haber ido
hasta el centro y volver en 1:30 para comer, así como el asado de la noche (con ping
pong y metegol) no hubiera existido
Sin Tsunami Boom (Anggie), probablemente no hubiéramos llegado a las 100
personas inscriptas, con lo cual los asistentes hubieran sido no más de 30.
Además de ellos… mucha otra gente ayudo en el momento de la organización sin que
se le pida mucho: Catriel Muller, Nestor Navarro, X-Ip, JJConti, Tomás Zulberti, Facu
Batista… y casi todos los que estuvieron ahí.
Este evento, en definitiva, perteneció a todos los que fueron y a los que no fueron. Te
pertenece a vos, que lo pudiste apreciar por una llamada telefónica, un tweet, algun
post, unas fotos o esta revista… a vos miembro de Pyar que cambiaste mi vida, le
dedico esta revista por que te lo mereces.
Fue un gusto…

Python Entre Todos (número 3, Julio 2011) — http://revista.python.org.ar

Y…Python cambió mi vida (Seguro vos me entendes)

2

Juan B Cabral Coordinador General - Pyday Cordoba 2011 Editor Pet Nro.3
Los Organizadores:

Python Entre Todos (número 3, Julio 2011) — http://revista.python.org.ar

3

Python en tu filesystem: Creando filesystems en userspace con
Python y Fuse
Python en tu filesystem: Creando filesystems en
userspace con Python y Fuse

Autor: Roger Durán

Bio:

Email:

Linuxero, pythonista y con problemas
sociopáticos
[email protected]

Twitter: @roger_duran

Web:

http://www.fsck.com.ar

Primero que nada veamos que es un filesystem.
Una forma simple de verlo, seria un método de guardar datos y organizarlos de una
forma que sea fácil encontrarlos y accederlos, estos se representan como directorios
y archivos, estos usualmente se almacenan en dispositivos como puede ser un disco
rígido o una memoria.
Algunos ejemplos conocidos:

• ext2 (http://en.wikipedia.org/wiki/Ext4)
• ext3 (http://en.wikipedia.org/wiki/Ext3)
• ext4 (http://en.wikipedia.org/wiki/Ext4)
• reiserfs (http://en.wikipedia.org/wiki/Reiserfs)
• fat (http://en.wikipedia.org/wiki/File_Allocation_Table)
• ntfs (http://en.wikipedia.org/wiki/Ntfs)

¿Que es Fuse?

Fuse (http://fuse.sourceforge.net/) es un modulo de kernel, como podría ser
cualquiera de los nombrados anteriormente, pero que en vez de implementar un
filesystem, nos expone su API en espacio de usuario. Pero… ¿Qué sistemas operativos
puedo usar fuse?

Python Entre Todos (número 3, Julio 2011) — http://revista.python.org.ar

Python en tu filesystem: Creando filesystems en userspace con
Python y Fuse

4

• En la mayor parte de los sistemas operativos *nix, como

puede ser GNU/Linux, MacOS, *bsd..

• En Windows existe una implementación de fuse llamada
“Dokan”, no puedo comentar mucho sobre esta, ya que no la
he probado.

Algunos ejemplos de uso de fuse

• En Python:

• fusql
• Gmailfs
• Youtubefs
• Cuevanafs
• FatFuse
• Otros lenguajes:

• gnomeVFS2
• zfs-fuse
• sshfs
• etc..

Como podemos ver, podemos crear desde un filesystem mapeando recursos de
internet/red, hasta filesystem tradicionales como puede ser zfs(muy popular en
solaris) o fat.
Fusql es un fs fuera de lo común, lo que lo hace interesante es que mapea una base
de datos relacional(Sqlite) como si fuera un filesystem, pudiéndose operar sobre ella
completamente.
Las ventajas que tenemos al desarrollar un filesystem con Fuse son:

• Podemos programar en nuestro lenguaje favorito (en este

caso python).

• Simplemente reiniciando la aplicación, estaremos haciendo

pruebas con el codigo actualizado.

Python Entre Todos (número 3, Julio 2011) — http://revista.python.org.ar

5

Fuse: El API

• Podemos acceder a las librerías del sistema para crearlos,

por ej el stdlib de python.

• No tendremos que lidear con kernel panics, reinicios,

utilización de maquinas virtuales para las pruebas, etc.

• Mayor portabilidad, ya que fuse existe en diversos sistemas

operativos.

• Podemos ejecutar nuestros filesystem con permisos de

usuario.

• Facil debugging de los mismos.

Fuse: El API
El API de fuse funciona por callbacks. Por ejemplo: cuando nosotros accedemos a un
directorio, en nuestra aplicación se llama a getattr, opendir, readdir, releasedir.

create(path, mode) # creación de un archivo
truncate(path, mode) # achicar o agrandar el tamaño de un archivo
open(path, mode) # apertura de un archivoError: BadDrawable
write(path, data, offset) # escritura de un archivo
read(data, lenght, offset) # lectura de un archivo
release(path) # liberación de un archivo
fsync(path) # sincronización de un archivo
chmod(path, mode) # cambio de permisos
chown(path, uid, gid) # cambio de propietario
mkdir(path, mode) # creación de directorio
unlink(path) # eliminación de un archivolink
rmdir(path) # eliminacón de un directorio
rename(opath, npath) # renombrado
link(srcpath, dstpath) # creación de un link

Como se usa
Este es un ejemplo mínimo de lectura y escritura de un archivo, hagamos de cuenta
que estos métodos están en un objeto que tiene un diccionario llamado items con el
path como key y los datos de este como valor

# lectura
def read(self, path, offset, length):

Python Entre Todos (número 3, Julio 2011) — http://revista.python.org.ar

Fuse: El API

6

# establecemos el comienzo de nuestra lectura
start - offset

# establecemos el fin de la lectura
end - start + length

# retornamos la cantidad de datos solicitado
return self.items[path][start:end]

# escritura
def write(self, path, offset, data):
# tomamos el tamaño de los datos a escribir
length - len(data)

# tomamos los datos actuales de nuestro archivo
item_data - self.items[path]

# agregamos/reemplazamos la parte del archivo que se solicito
item_data - itdat[:offset] + data + item[offset+length:]

# remplazamos el contenido de nuestro item
self.items[path] - item_data

# devolvemos el tamaño de datos que escribimos
return length

# truncate
def truncate(self, path, length):
# tomamos los datos de nuestro archivo
item_data - self.items[path]

If len(item_data) > length:
# si el tamaño de nuestros datos es mayor que el solicitado
# lo acortamos a este
self.items[path] - item_data[:length]
else:
# sino rellenamos con 0 al tamaño solicitado
self.items[path] +- '0' * len(item_data)

Python Entre Todos (número 3, Julio 2011) — http://revista.python.org.ar

7

Defuse

Defuse
Trabajando con python-fuse, una de las cosas que me parecieron incomodas es el
manejo de los path, viniendo del mundo de las webs, sobre todo con werkzeug/flask,
se me ocurrió implementar algo similar a su manejo de rutas, pero para la escritura
de un filesystem, así es como nació defuse https://github.com/Roger/defuse.
Lo que esto nos permite es utilizar decoradores para el manejo de las rutas,
separando cada parte de nuestro filesystem como una clase con todos los métodos
que nos proporciona fuse.
Un pequeño ejemplo

fs - FS.get()

@fs.route('/')
class Root(object):
def __init__(self):
root_mode - S_IRUSR|S_IXUSR|S_IWUSR|S_IRGRP|S_IXGRP|S_IXOTH|S_IROTH
self.dir_metadata - BaseMetadata(root_mode, True)

def getattr(self, *args):
return self.dir_metadata

def readdir(self, *args):
for i in xrange(4):
yield fuse.Direntry('test%s.txt' % i)

@fs.route('/<filename>.<ext>')
class Files(object):
def __init
  • Links de descarga
http://lwp-l.com/pdf11222

Comentarios de: PET: Python Entre Todos #3 (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad