Slide 1

Slide 1 text

Programación Cross-Platform Cosas a tener en cuenta para no quedarte pelado Roberto Alsina Manuel de la Peña Programando Cross Platform PyCon Argentina 2011

Slide 2

Slide 2 text

Cross Platform: Qué y Porqué • Medio hacia un fin • Fin en sí mismo Programando Cross Platform PyCon Argentina 2011

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

¿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

Slide 5

Slide 5 text

¡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

Slide 6

Slide 6 text

Desktop: ¿Se puede? • Convenciones de la UI Programando Cross Platform PyCon Argentina 2011

Slide 7

Slide 7 text

Ser igual a los demás Programando Cross Platform PyCon Argentina 2011

Slide 8

Slide 8 text

Ser igual a sí mismo Programando Cross Platform PyCon Argentina 2011

Slide 9

Slide 9 text

Notificaciones • Bubbles • App indicators • Growl Programando Cross Platform PyCon Argentina 2011

Slide 10

Slide 10 text

Filesystems Cuando se trabaja con diferentes filesystems se ha de tener cuidado con los siguientes temas: • 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

Slide 11

Slide 11 text

Filesystems Problemas 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

Slide 12

Slide 12 text

Filesystems Hay más problemas con los paths: (Pregunta para la gente de la sala) Programando Cross Platform PyCon Argentina 2011

Slide 13

Slide 13 text

Filesystems Aggg.... 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

Slide 14

Slide 14 text

Filesystems os.path esta roto: • listdir: • 'C:\Python27/.' => funciona o/ • '\\?\C:\Python27/.' => no funciona :( puto! Programando Cross Platform PyCon Argentina 2011

Slide 15

Slide 15 text

Filesystems Windows: 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

Slide 16

Slide 16 text

Esto incluye todos los nombres ya mencionados incluyendo la extension (AUX.txt). Pero es windwos... se puede usar si se usa \?WTF?!?! Programando Cross Platform PyCon Argentina 2011

Slide 17

Slide 17 text

Eventos Queremos recibir eventos cuando una archivo es modificado: • Linux: pyinotify • Windows: ReadDirectoryChangesW • Mac OS X: FSEvents Programando Cross Platform PyCon Argentina 2011

Slide 18

Slide 18 text

Eventos Los diferentes FS tienen diferentes APIs: • Linux: Por directorio • Windows: Por árbol • Mac OS X: Por árbol Programando Cross Platform PyCon Argentina 2011

Slide 19

Slide 19 text

Eventos Los diferentes FS tienes diferentes eventos: • Linux: pyinotify.IN_OPEN pyinotify.IN_CLOSE_NOWRITE pyinotify.IN_CLOSE_WRITE pyinotify.IN_CREATE pyinotify.IN_CREATE | pyinotify.IN_ISDIR • Windows: 1: IN_CREATE 2: IN_DELETE Programando Cross Platform PyCon Argentina 2011

Slide 20

Slide 20 text

3: IN_MODIFY 4: IN_MOVED_FROM 5: IN_MOVED_TO • Mac OS X: Programando Cross Platform PyCon Argentina 2011

Slide 21

Slide 21 text

Binary vs Unicode Es importante usar binary o unicode? (pregunta para la audiencia) Programando Cross Platform PyCon Argentina 2011

Slide 22

Slide 22 text

User rights os.chmod si, pero no! • Linux: Ok • Mac OS X: Ok • Windows: AddAccessAllowedAceEx, AddAccessDeniedAceEx Programando Cross Platform PyCon Argentina 2011

Slide 23

Slide 23 text

User rights Windows security_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 parameters security_descriptor.SetSecurityDescriptorDacl(1, dacl, 0) SetFileSecurity(path, DACL_SECURITY_INFORMATION, security_descriptor) Programando Cross Platform PyCon Argentina 2011

Slide 24

Slide 24 text

IPC Formas 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 los mensajes. Programando Cross Platform PyCon Argentina 2011

Slide 25

Slide 25 text

Packaging • Packaging en Linux • Installers en Windows • App stores en mobile Programando Cross Platform PyCon Argentina 2011