Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Programando Cross-Platform

Programando Cross-Platform

Roberto Alsina

July 11, 2012
Tweet

More Decks by Roberto Alsina

Other Decks in Programming

Transcript

  1. 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
  2. Cross Platform: Qué y Porqué • Medio hacia un fin

    • Fin en sí mismo Programando Cross Platform PyCon Argentina 2011
  3. ¿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
  4. ¡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
  5. 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
  6. 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
  7. Filesystems Hay más problemas con los paths: (Pregunta para la

    gente de la sala) Programando Cross Platform PyCon Argentina 2011
  8. 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
  9. Filesystems os.path esta roto: • listdir: • 'C:\Python27/.' => funciona

    o/ • '\\?\C:\Python27/.' => no funciona :( puto! Programando Cross Platform PyCon Argentina 2011
  10. 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
  11. 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
  12. Eventos Queremos recibir eventos cuando una archivo es modificado: •

    Linux: pyinotify • Windows: ReadDirectoryChangesW • Mac OS X: FSEvents Programando Cross Platform PyCon Argentina 2011
  13. Eventos Los diferentes FS tienen diferentes APIs: • Linux: Por

    directorio • Windows: Por árbol • Mac OS X: Por árbol Programando Cross Platform PyCon Argentina 2011
  14. 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
  15. 3: IN_MODIFY 4: IN_MOVED_FROM 5: IN_MOVED_TO • Mac OS X:

    Programando Cross Platform PyCon Argentina 2011
  16. Binary vs Unicode Es importante usar binary o unicode? (pregunta

    para la audiencia) Programando Cross Platform PyCon Argentina 2011
  17. User rights os.chmod si, pero no! • Linux: Ok •

    Mac OS X: Ok • Windows: AddAccessAllowedAceEx, AddAccessDeniedAceEx Programando Cross Platform PyCon Argentina 2011
  18. 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
  19. 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
  20. Packaging • Packaging en Linux • Installers en Windows •

    App stores en mobile Programando Cross Platform PyCon Argentina 2011