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

Programando Cross-Platform

Programando Cross-Platform

B1ff2afbfbfe88037c59978bc4c102a6?s=128

Roberto Alsina

July 11, 2012
Tweet

Transcript

  1. Programación Cross-Platform Cosas a tener en cuenta para no quedarte

    pelado Roberto Alsina <ralsina@kde.org> Manuel de la Peña <manuel@canonical.com> 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. Cross Platform: ¿Es difícil? Muy. ¡Pregúntenle a Manuel! Programando Cross

    Platform PyCon Argentina 2011
  4. ¿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
  5. ¡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
  6. Desktop: ¿Se puede? • Convenciones de la UI Programando Cross

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

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

    2011
  9. Notificaciones • Bubbles • App indicators • Growl Programando Cross

    Platform PyCon Argentina 2011
  10. 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
  11. 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
  12. Filesystems Hay más problemas con los paths: (Pregunta para la

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

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

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

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

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

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

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

    App stores en mobile Programando Cross Platform PyCon Argentina 2011