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
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
Recommended