YOU ARE DOWNLOADING DOCUMENT

Please tick the box to continue:

Transcript
Page 1: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

Programación Cross-Platform

Cosas a tener en cuenta para no quedarte pelado

Roberto Alsina <[email protected]>

Manuel de la Peña <[email protected]>

Programando Cross Platform

PyCon Argentina 2011

Page 2: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

Cross Platform: Qué y Porqué

• Medio hacia un fin

• Fin en sí mismo

Programando Cross Platform

PyCon Argentina 2011

Page 3: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

Cross Platform: ¿Es difícil?Muy. ¡Pregúntenle a Manuel!

Programando Cross Platform

PyCon Argentina 2011

Page 4: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

¿Cuántas plataformas estamos hablando?

• Linux (GNOME/KDE/Unity/ninguno)

• Windows (XP/Vista/7/8)

• Mac

• Mobile (Android/iOS)

• Web (Chrome/Firefox/Safari/Mobile browsers/IE x.x)

Programando Cross Platform

PyCon Argentina 2011

Page 5: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

¡Nos mudamos a la web!

• La web no es una única plataforma

• Se puede ser web y no ser cross-platform

• Se puede ser web y ser desktop (aplicaciones mixtas)

Programando Cross Platform

PyCon Argentina 2011

Page 6: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

Desktop: ¿Se puede?

• Convenciones de la UI

Programando Cross Platform

PyCon Argentina 2011

Page 7: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

Ser igual a los demás

Programando Cross Platform

PyCon Argentina 2011

Page 8: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

Ser igual a sí mismo

Programando Cross Platform

PyCon Argentina 2011

Page 9: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

Notificaciones

• Bubbles

• App indicators

• Growl

Programando Cross Platform

PyCon Argentina 2011

Page 10: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

FilesystemsCuando se trabaja con diferentes filesystems se ha de tener cuidado con los siguientestemas:

• Paths: Como han de manajarse los paths. Es os.path suficiente?

• Eventos: Que eventos recibimos del fs cuando se editan los archivos.

• Unicode vs Binary

• User rights.

Programando Cross Platform

PyCon Argentina 2011

Page 11: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

FilesystemsProblemas de Paths:

• Caracteres illegales * Linux: / null * Mac OS X: :/ null * Windows:

• DOS Fat32: x00-x1F SPACE DEL " * / : < > ? \ |

• Windows NTFS: " * : < > ? \ / |

Programando Cross Platform

PyCon Argentina 2011

Page 12: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

FilesystemsHay más problemas con los paths:

(Pregunta para la gente de la sala)

Programando Cross Platform

PyCon Argentina 2011

Page 13: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

FilesystemsAggg.... tus paths son demasiado largos.

• Windows:

• Old school: Path maximo es de 255 char

• NTFS: Cada componente del path puede ser de 255

Programando Cross Platform

PyCon Argentina 2011

Page 14: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

Filesystemsos.path esta roto:

• listdir:

• 'C:\Python27/.' => funciona o/

• '\\?\C:\Python27/.' => no funciona :( puto!

Programando Cross Platform

PyCon Argentina 2011

Page 15: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

FilesystemsWindows: Vamos a jugar al teto, tú te agachas y yo te la meto:

Nombre illegales:

• AUX

• CLOCK$

• COM[0-9]

• CON

• LPT[1-9]

• NUL

• PRN

Programando Cross Platform

PyCon Argentina 2011

Page 16: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

Esto incluye todos los nombres ya mencionados incluyendo la extension (AUX.txt). Peroes windwos... se puede usar si se usa \?WTF?!?!

Programando Cross Platform

PyCon Argentina 2011

Page 17: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

EventosQueremos recibir eventos cuando una archivo es modificado:

• Linux: pyinotify

• Windows: ReadDirecotryChangesW

• Mac OS X: FSEvents

Programando Cross Platform

PyCon Argentina 2011

Page 18: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

EventosLos diferentes FS tienen diferentes APIs:

• Linux: Por directorio

• Windows: Por árbol

• Mac OS X: Por árbol

Programando Cross Platform

PyCon Argentina 2011

Page 19: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

EventosLos diferentes FS tienes diferentes eventos:

• Linux:

pyinotify.IN_OPENpyinotify.IN_CLOSE_NOWRITEpyinotify.IN_CLOSE_WRITEpyinotify.IN_CREATEpyinotify.IN_CREATE | pyinotify.IN_ISDIR

• Windows:

1: IN_CREATE2: IN_DELETE

Programando Cross Platform

PyCon Argentina 2011

Page 20: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

3: IN_MODIFY4: IN_MOVED_FROM5: IN_MOVED_TO

• Mac OS X:

Programando Cross Platform

PyCon Argentina 2011

Page 21: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

Binary vs UnicodeEs importante usar binary o unicode?

(pregunta para la audiencia)

Programando Cross Platform

PyCon Argentina 2011

Page 22: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

User rightso.chmod si, pero no!

• Linux: Ok

• Mac OS X: Ok

• Windows: AddAccessAllowedAceEx, AddAccessDeniedAceEx

Programando Cross Platform

PyCon Argentina 2011

Page 23: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

User rights Windowssecurity_descriptor = GetFileSecurity(path, DACL_SECURITY_INFORMATION)dacl = ACL()for group_sid, attributes in groups: # set the attributes of the group only if not null if attributes: dacl.AddAccessAllowedAceEx(ACL_REVISION, CONTAINER_INHERIT_ACE | OBJECT_INHERIT_ACE, attributes, group_sid)# the dacl has all the info of the diff groups passed in the parameterssecurity_descriptor.SetSecurityDescriptorDacl(1, dacl, 0)SetFileSecurity(path, DACL_SECURITY_INFORMATION, security_descriptor)

Programando Cross Platform

PyCon Argentina 2011

Page 24: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

IPCFormas de hacer ipc:

• Linux: Dbus, tcp

• Windows: NamedPipes, tcp, Shared Memory

• Mac Os X: NSDistributedNotificationCenter or NSPortNameServer (mach ports)

Hay que abstraer la comunicación ya que cada uno tienes un estilo de exponer losmensajes.

Programando Cross Platform

PyCon Argentina 2011

Page 25: Programando Cross-Platform: cosas a tener en cuenta para no quedarte pelado

Packaging

• Packaging en Linux

• Installers en Windows

• App stores en mobile

Programando Cross Platform

PyCon Argentina 2011