25
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

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

Embed Size (px)

Citation preview

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

Cross Platform: Qué y Porqué

• Medio hacia un fin

• Fin en sí mismo

Programando Cross Platform

PyCon Argentina 2011

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

Programando Cross Platform

PyCon Argentina 2011

¿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

¡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

Desktop: ¿Se puede?

• Convenciones de la UI

Programando Cross Platform

PyCon Argentina 2011

Ser igual a los demás

Programando Cross Platform

PyCon Argentina 2011

Ser igual a sí mismo

Programando Cross Platform

PyCon Argentina 2011

Notificaciones

• Bubbles

• App indicators

• Growl

Programando Cross Platform

PyCon Argentina 2011

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

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

FilesystemsHay más problemas con los paths:

(Pregunta para la gente de la sala)

Programando Cross Platform

PyCon Argentina 2011

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

Filesystemsos.path esta roto:

• listdir:

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

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

Programando Cross Platform

PyCon Argentina 2011

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

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

EventosQueremos recibir eventos cuando una archivo es modificado:

• Linux: pyinotify

• Windows: ReadDirecotryChangesW

• Mac OS X: FSEvents

Programando Cross Platform

PyCon Argentina 2011

EventosLos diferentes FS tienen diferentes APIs:

• Linux: Por directorio

• Windows: Por árbol

• Mac OS X: Por árbol

Programando Cross Platform

PyCon Argentina 2011

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

3: IN_MODIFY4: IN_MOVED_FROM5: IN_MOVED_TO

• Mac OS X:

Programando Cross Platform

PyCon Argentina 2011

Binary vs UnicodeEs importante usar binary o unicode?

(pregunta para la audiencia)

Programando Cross Platform

PyCon Argentina 2011

User rightso.chmod si, pero no!

• Linux: Ok

• Mac OS X: Ok

• Windows: AddAccessAllowedAceEx, AddAccessDeniedAceEx

Programando Cross Platform

PyCon Argentina 2011

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

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

Packaging

• Packaging en Linux

• Installers en Windows

• App stores en mobile

Programando Cross Platform

PyCon Argentina 2011