SlideShare uma empresa Scribd logo
Python-purple:
Desenvolvendo bindings para Python utilizando o Cython
Bruno Abinader Anderson Briglia
INdT, 2009
Agenda
1 Cython
O que é?
Objetivos
Aspectos Gerais
Exemplo
Agenda
1 Cython
O que é?
Objetivos
Aspectos Gerais
Exemplo
2 Libpurple
Histórico
O que é?
Aspectos Gerais
Agenda
1 Cython
O que é?
Objetivos
Aspectos Gerais
Exemplo
2 Libpurple
Histórico
O que é?
Aspectos Gerais
3 Python-purple
Histórico
O que é?
Aspectos Gerais
Agenda
1 Cython
O que é?
Objetivos
Aspectos Gerais
Exemplo
2 Libpurple
Histórico
O que é?
Aspectos Gerais
3 Python-purple
Histórico
O que é?
Aspectos Gerais
4 Referências
Python-purple: Desenvolvendo bindings para Python usando o Cython
Extensões em C para Python
Cython
O que é?
O Cython é:
Linguagem que permite escrever extensões em C para Python
Cython
O que é?
O Cython é:
Linguagem que permite escrever extensões em C para Python
Baseado na linguagem Pyrex
Cython
O que é?
O Cython é:
Linguagem que permite escrever extensões em C para Python
Baseado na linguagem Pyrex
Linguagem similar a Python
Cython
Objetivos
O Cython proporciona:
Otimização de tempo de execução de código em Python
Geração de código eficiente em C
Cython
Objetivos
O Cython proporciona:
Otimização de tempo de execução de código em Python
Geração de código eficiente em C
Encapsulamento de bibliotecas e módulos em C
Cython
Aspectos Gerais
O Cython usa três tipos de arquivo-fonte:
Arquivo de implementação .pyx
Cython
Aspectos Gerais
O Cython usa três tipos de arquivo-fonte:
Arquivo de implementação .pyx
Contém as implementações (funções em C, C++ ou Python)
Arquivo de definição .pxd
Cython
Aspectos Gerais
O Cython usa três tipos de arquivo-fonte:
Arquivo de implementação .pyx
Contém as implementações (funções em C, C++ ou Python)
Arquivo de definição .pxd
Possui apenas declarações em C para uso em módulos do Cython
Cython
Aspectos Gerais
O Cython usa três tipos de arquivo-fonte:
Arquivo de implementação .pyx
Contém as implementações (funções em C, C++ ou Python)
Arquivo de definição .pxd
Possui apenas declarações em C para uso em módulos do Cython
Não corresponde necessariamente a um arquivo .pyx ou módulo Python
Cython
Aspectos Gerais
O Cython usa três tipos de arquivo-fonte:
Arquivo de implementação .pyx
Contém as implementações (funções em C, C++ ou Python)
Arquivo de definição .pxd
Possui apenas declarações em C para uso em módulos do Cython
Não corresponde necessariamente a um arquivo .pyx ou módulo Python
Útil para armazenar declarações comuns (ex: bibliotecas externas)
Cython
Aspectos Gerais
O Cython usa três tipos de arquivo-fonte:
Arquivo de implementação .pyx
Contém as implementações (funções em C, C++ ou Python)
Arquivo de definição .pxd
Possui apenas declarações em C para uso em módulos do Cython
Não corresponde necessariamente a um arquivo .pyx ou módulo Python
Útil para armazenar declarações comuns (ex: bibliotecas externas)
Arquivo de inclusão textual .pxi
Cython
Aspectos Gerais
O Cython usa três tipos de arquivo-fonte:
Arquivo de implementação .pyx
Contém as implementações (funções em C, C++ ou Python)
Arquivo de definição .pxd
Possui apenas declarações em C para uso em módulos do Cython
Não corresponde necessariamente a um arquivo .pyx ou módulo Python
Útil para armazenar declarações comuns (ex: bibliotecas externas)
Arquivo de inclusão textual .pxi
Similar a diretiva #include do C
Cython
Aspectos Gerais
O Cython usa três tipos de arquivo-fonte:
Arquivo de implementação .pyx
Contém as implementações (funções em C, C++ ou Python)
Arquivo de definição .pxd
Possui apenas declarações em C para uso em módulos do Cython
Não corresponde necessariamente a um arquivo .pyx ou módulo Python
Útil para armazenar declarações comuns (ex: bibliotecas externas)
Arquivo de inclusão textual .pxi
Similar a diretiva #include do C
Sub-utilizado após o uso do cimport *
Cython
Exemplo
Hello World em Cython
# salve este arquivo como test.pyx
cdef char *__hello_world ():
cdef char *c_string = "Hello World!"
cdef object string
string = c_string + " :)"
return string
def hello_world ():
print __hello_world ()
Cython
Exemplo (2)
Arquivo de setup do python
# salve este arquivo como setup.py
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
setup (
cmdclass = {'build_ext ': build_ext},
ext_modules = [Extension("test",
["test.pyx"])]
)
Cython
Exemplo (3)
Criação da biblioteca (módulo Python)
$ python setup.py build_ext --inplace
Cython
Exemplo (3)
Criação da biblioteca (módulo Python)
$ python setup.py build_ext --inplace
Executando o módulo
$ python
>>> import test
>>> test.hello_world ()
Hello World! :)
Libpurple
Libpurple
Biblioteca que provê suporte a mensagem instantânea
Libpurple
Histórico
Figure: Pidgin: Front-end da Libpurple
Libpurple
O que é?
A Libpurple é:
Biblioteca que provê funcionalidades clientes de mensagens
instantâneas
Libpurple
O que é?
A Libpurple é:
Biblioteca que provê funcionalidades clientes de mensagens
instantâneas
Suporta vários protocolos (MSN, Yahoo, IRC, Jabber, entre outros)
Libpurple
O que é?
A Libpurple é:
Biblioteca que provê funcionalidades clientes de mensagens
instantâneas
Suporta vários protocolos (MSN, Yahoo, IRC, Jabber, entre outros)
Pidgin: Front-end da libpurple
Libpurple
O que é?
A Libpurple é:
Biblioteca que provê funcionalidades clientes de mensagens
instantâneas
Suporta vários protocolos (MSN, Yahoo, IRC, Jabber, entre outros)
Pidgin: Front-end da libpurple
Outros clientes: Adium (Mac), Finch (Console), Meebo (Web)
Libpurple
Aspectos Gerais
Características da Libpurple:
Gerencia conexões a redes de mensagem instantânea
Libpurple
Aspectos Gerais
Características da Libpurple:
Gerencia conexões a redes de mensagem instantânea
Gerencia contas e preferências de usuário
Libpurple
Aspectos Gerais
Características da Libpurple:
Gerencia conexões a redes de mensagem instantânea
Gerencia contas e preferências de usuário
Possui API unificada para todos os protocolos
Libpurple
Aspectos Gerais
Características da Libpurple:
Gerencia conexões a redes de mensagem instantânea
Gerencia contas e preferências de usuário
Possui API unificada para todos os protocolos
Implementa o que é genérico entre todos os protocolos
Libpurple
Aspectos Gerais
Características da Libpurple:
Gerencia conexões a redes de mensagem instantânea
Gerencia contas e preferências de usuário
Possui API unificada para todos os protocolos
Implementa o que é genérico entre todos os protocolos
API específica para exceções
Libpurple
Aspectos Gerais (2)
Sinais e callbacks:
Registro de callbacks para diversos tipos de eventos (UI operations)
Libpurple
Aspectos Gerais (2)
Sinais e callbacks:
Registro de callbacks para diversos tipos de eventos (UI operations)
Eventos da conta, lista de usuários, mensagens, entre outros
Libpurple
Aspectos Gerais (2)
Sinais e callbacks:
Registro de callbacks para diversos tipos de eventos (UI operations)
Eventos da conta, lista de usuários, mensagens, entre outros
Estruturas de callbacks populadas no início da execução do cliente
Libpurple
Aspectos Gerais (2)
Sinais e callbacks:
Registro de callbacks para diversos tipos de eventos (UI operations)
Eventos da conta, lista de usuários, mensagens, entre outros
Estruturas de callbacks populadas no início da execução do cliente
Sinais que podem ser associados a callbacks
Libpurple
Aspectos Gerais (3)
Extensões e exceções:
Extensível através de plugins
Libpurple
Aspectos Gerais (3)
Extensões e exceções:
Extensível através de plugins
Suporte a um protocolo específico é um plugin
Libpurple
Aspectos Gerais (3)
Extensões e exceções:
Extensível através de plugins
Suporte a um protocolo específico é um plugin
Lidos no início da execução do cliente
Libpurple
Aspectos Gerais (3)
Extensões e exceções:
Extensível através de plugins
Suporte a um protocolo específico é um plugin
Lidos no início da execução do cliente
Não possui suporte a threads
Cliente não pode lidar com a biblioteca em threads separadas
Libpurple
Aspectos Gerais (3)
Extensões e exceções:
Extensível através de plugins
Suporte a um protocolo específico é um plugin
Lidos no início da execução do cliente
Não possui suporte a threads
Cliente não pode lidar com a biblioteca em threads separadas
Facilidade para fazer encapsulamento
Libpurple
Aspectos Gerais (3)
Extensões e exceções:
Extensível através de plugins
Suporte a um protocolo específico é um plugin
Lidos no início da execução do cliente
Não possui suporte a threads
Cliente não pode lidar com a biblioteca em threads separadas
Facilidade para fazer encapsulamento
Loop principal diferente para cada tipo de cliente
Python-purple
Python-purple
Interface da Libpurple para Python escrito em Cython
Python-purple
Histórico
Figure: Carman: Infosharing em ação
Python-purple
O que é?
O Python-purple é:
Spin-off de funcionalidade de compartilhamento de informações entre
amigos no Carman
Python-purple
O que é?
O Python-purple é:
Spin-off de funcionalidade de compartilhamento de informações entre
amigos no Carman
Escrito em Cython
Python-purple
O que é?
O Python-purple é:
Spin-off de funcionalidade de compartilhamento de informações entre
amigos no Carman
Escrito em Cython
Provê acesso completo à implementação da Libpurple para programas
Python
Python-purple
O que é?
O Python-purple é:
Spin-off de funcionalidade de compartilhamento de informações entre
amigos no Carman
Escrito em Cython
Provê acesso completo à implementação da Libpurple para programas
Python
Único passo: Importar o módulo purple
Python-purple
Aspectos Gerais
Características do Python-purple:
Headers da API da Libpurple separados em arquivos .pxd
Python-purple
Aspectos Gerais
Características do Python-purple:
Headers da API da Libpurple separados em arquivos .pxd
Declaração das funções e variáveis (extern)
Python-purple
Aspectos Gerais
Características do Python-purple:
Headers da API da Libpurple separados em arquivos .pxd
Declaração das funções e variáveis (extern)
Forward declarations usados para evitar loops recursivos no Cython
Python-purple
Aspectos Gerais
Características do Python-purple:
Headers da API da Libpurple separados em arquivos .pxd
Declaração das funções e variáveis (extern)
Forward declarations usados para evitar loops recursivos no Cython
Mesmo vínculo com o mainloop da GLib que o Pidgin
Python-purple
Aspectos Gerais
Características do Python-purple:
Headers da API da Libpurple separados em arquivos .pxd
Declaração das funções e variáveis (extern)
Forward declarations usados para evitar loops recursivos no Cython
Mesmo vínculo com o mainloop da GLib que o Pidgin
glib_input_add implementado em C e importado pelo Cython
Python-purple
Aspectos Gerais
Características do Python-purple:
Headers da API da Libpurple separados em arquivos .pxd
Declaração das funções e variáveis (extern)
Forward declarations usados para evitar loops recursivos no Cython
Mesmo vínculo com o mainloop da GLib que o Pidgin
glib_input_add implementado em C e importado pelo Cython
Outras funções da mainloop implementadas pela Libpurple
Core: Inicia a execução da biblioteca
Python-purple
Aspectos Gerais
Características do Python-purple:
Headers da API da Libpurple separados em arquivos .pxd
Declaração das funções e variáveis (extern)
Forward declarations usados para evitar loops recursivos no Cython
Mesmo vínculo com o mainloop da GLib que o Pidgin
glib_input_add implementado em C e importado pelo Cython
Outras funções da mainloop implementadas pela Libpurple
Core: Inicia a execução da biblioteca
Inicializa o núcleo da Libpurple e as estruturas de operações na UI
Python-purple
Aspectos Gerais (2)
Callbacks e sinais:
Armazenados em dicionários lidos pelas callbacks genéricas
implementadas em C
Python-purple
Aspectos Gerais (2)
Callbacks e sinais:
Armazenados em dicionários lidos pelas callbacks genéricas
implementadas em C
Chamam sequencialmente de acordo com o evento ou sinal associado
Python-purple
Aspectos Gerais (2)
Callbacks e sinais:
Armazenados em dicionários lidos pelas callbacks genéricas
implementadas em C
Chamam sequencialmente de acordo com o evento ou sinal associado
Traduzem os parâmetros das chamadas em Python para C e vice-versa
Python-purple
Aspectos Gerais (2)
Callbacks e sinais:
Armazenados em dicionários lidos pelas callbacks genéricas
implementadas em C
Chamam sequencialmente de acordo com o evento ou sinal associado
Traduzem os parâmetros das chamadas em Python para C e vice-versa
Quando um retorno é necessário:
Função em C intercepta o retorno da callback
Python-purple
Aspectos Gerais (2)
Callbacks e sinais:
Armazenados em dicionários lidos pelas callbacks genéricas
implementadas em C
Chamam sequencialmente de acordo com o evento ou sinal associado
Traduzem os parâmetros das chamadas em Python para C e vice-versa
Quando um retorno é necessário:
Função em C intercepta o retorno da callback
Vide add_callback() e signal_connect()
Python-purple
Diagrama de fluxo
Referências
Cython: http://www.cython.org
Cython user guide: http://docs.cython.org
Cython wiki: http://wiki.cython.org
Libpurple: http://pidgin.im
Páginas dos desenvolvedores: http://developer.pidgin.im
Wiki: http://developer.pidgin.im/wiki
Python-purple: http://garage.maemo.org/projects/python-purple
HowTo: http://developer.pidgin.im/wiki/PythonHowTo
Perguntas ?
Obrigado!
Contato:
bruno.abinader@openbossa.org
anderson.briglia@openbossa.org
#indt @ irc.freenode.org

Mais conteúdo relacionado

DOCX
Python, CPython, Pythonico, Cython
DOCX
A lógica do Python e seus termos
PDF
Programando em python modulos
PDF
Python Para Administradores Linux
PDF
PDF
M2ti - Python Brasil
PDF
Lab so-abertos-unidade14
PPTX
Python, CPython, Pythonico, Cython
A lógica do Python e seus termos
Programando em python modulos
Python Para Administradores Linux
M2ti - Python Brasil
Lab so-abertos-unidade14

Destaque (18)

PPTX
PDF
Linux - Agendando Tarefas com o Cron
PDF
Aula CRONTAB
PDF
Plasma Animations Overview (aka. Pimp my Plasmoids!)
PPTX
Computação paralela utilizando OpenMP para aplicações matemáticos
PDF
Agenda tarefas
PPTX
PPTX
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...
PDF
Curso openmp
PPSX
Cakephp 2.0 - O que mudou
ODP
MiniCurso Programação Paralela com OpenMP - SACTA 2013
PDF
CUDA/Open CL
PPTX
Grupo de Estudos de Softwares Livres
PDF
(08)inicializacao e gerencia_de_processos
PPTX
Desenvolvendo Aplicações de Uso Geral para GPU com CUDA
PDF
Introdução à Shellscript
PDF
Desenvolvendo aplicações Mobile em Python
PDF
Introduction to NumPy (PyData SV 2013)
Linux - Agendando Tarefas com o Cron
Aula CRONTAB
Plasma Animations Overview (aka. Pimp my Plasmoids!)
Computação paralela utilizando OpenMP para aplicações matemáticos
Agenda tarefas
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...
Curso openmp
Cakephp 2.0 - O que mudou
MiniCurso Programação Paralela com OpenMP - SACTA 2013
CUDA/Open CL
Grupo de Estudos de Softwares Livres
(08)inicializacao e gerencia_de_processos
Desenvolvendo Aplicações de Uso Geral para GPU com CUDA
Introdução à Shellscript
Desenvolvendo aplicações Mobile em Python
Introduction to NumPy (PyData SV 2013)
Anúncio

Semelhante a Python-purple: Desenvolvendo bindings para Python usando o Cython (13)

PPTX
Ampliando os Horizontes dos Profissionais de Redes através do Python
PPTX
Congresso iii unifacsv3
PDF
Introdução a linguagem Python
PDF
Congresso iv
ODP
Slide PyQt versus Pyside
PDF
Apresentação QtConBr
PDF
Python - Programando em alto nível
PDF
O que podemos fazer com Python?
PDF
Django: desenvolvendo aplicações web de maneira simples e rápida!
PPTX
Automação de Aplicativos: Scripting com Python
PDF
Tutorial Python ed. #2
PDF
Gerando bindings de bibliotecas C++ para Python
PDF
Python Training #1 - ed4
Ampliando os Horizontes dos Profissionais de Redes através do Python
Congresso iii unifacsv3
Introdução a linguagem Python
Congresso iv
Slide PyQt versus Pyside
Apresentação QtConBr
Python - Programando em alto nível
O que podemos fazer com Python?
Django: desenvolvendo aplicações web de maneira simples e rápida!
Automação de Aplicativos: Scripting com Python
Tutorial Python ed. #2
Gerando bindings de bibliotecas C++ para Python
Python Training #1 - ed4
Anúncio

Último (11)

PPTX
Tipos de servidor em redes de computador.pptx
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PPTX
Arquitetura de computadores - Memórias Secundárias
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Eng. Software - pontos essenciais para o início
PPTX
Utilizando code blockes por andre backes
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Design - Introdução a Gestalt e teoria das formas
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Tipos de servidor em redes de computador.pptx
Viasol Energia Solar -Soluções para geração e economia de energia
Arquitetura de computadores - Memórias Secundárias
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Manejo integrado de pragas na cultura do algodão
Eng. Software - pontos essenciais para o início
Utilizando code blockes por andre backes
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Design - Introdução a Gestalt e teoria das formas
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf

Python-purple: Desenvolvendo bindings para Python usando o Cython

  • 1. Python-purple: Desenvolvendo bindings para Python utilizando o Cython Bruno Abinader Anderson Briglia INdT, 2009
  • 2. Agenda 1 Cython O que é? Objetivos Aspectos Gerais Exemplo
  • 3. Agenda 1 Cython O que é? Objetivos Aspectos Gerais Exemplo 2 Libpurple Histórico O que é? Aspectos Gerais
  • 4. Agenda 1 Cython O que é? Objetivos Aspectos Gerais Exemplo 2 Libpurple Histórico O que é? Aspectos Gerais 3 Python-purple Histórico O que é? Aspectos Gerais
  • 5. Agenda 1 Cython O que é? Objetivos Aspectos Gerais Exemplo 2 Libpurple Histórico O que é? Aspectos Gerais 3 Python-purple Histórico O que é? Aspectos Gerais 4 Referências
  • 7. Extensões em C para Python
  • 8. Cython O que é? O Cython é: Linguagem que permite escrever extensões em C para Python
  • 9. Cython O que é? O Cython é: Linguagem que permite escrever extensões em C para Python Baseado na linguagem Pyrex
  • 10. Cython O que é? O Cython é: Linguagem que permite escrever extensões em C para Python Baseado na linguagem Pyrex Linguagem similar a Python
  • 11. Cython Objetivos O Cython proporciona: Otimização de tempo de execução de código em Python Geração de código eficiente em C
  • 12. Cython Objetivos O Cython proporciona: Otimização de tempo de execução de código em Python Geração de código eficiente em C Encapsulamento de bibliotecas e módulos em C
  • 13. Cython Aspectos Gerais O Cython usa três tipos de arquivo-fonte: Arquivo de implementação .pyx
  • 14. Cython Aspectos Gerais O Cython usa três tipos de arquivo-fonte: Arquivo de implementação .pyx Contém as implementações (funções em C, C++ ou Python) Arquivo de definição .pxd
  • 15. Cython Aspectos Gerais O Cython usa três tipos de arquivo-fonte: Arquivo de implementação .pyx Contém as implementações (funções em C, C++ ou Python) Arquivo de definição .pxd Possui apenas declarações em C para uso em módulos do Cython
  • 16. Cython Aspectos Gerais O Cython usa três tipos de arquivo-fonte: Arquivo de implementação .pyx Contém as implementações (funções em C, C++ ou Python) Arquivo de definição .pxd Possui apenas declarações em C para uso em módulos do Cython Não corresponde necessariamente a um arquivo .pyx ou módulo Python
  • 17. Cython Aspectos Gerais O Cython usa três tipos de arquivo-fonte: Arquivo de implementação .pyx Contém as implementações (funções em C, C++ ou Python) Arquivo de definição .pxd Possui apenas declarações em C para uso em módulos do Cython Não corresponde necessariamente a um arquivo .pyx ou módulo Python Útil para armazenar declarações comuns (ex: bibliotecas externas)
  • 18. Cython Aspectos Gerais O Cython usa três tipos de arquivo-fonte: Arquivo de implementação .pyx Contém as implementações (funções em C, C++ ou Python) Arquivo de definição .pxd Possui apenas declarações em C para uso em módulos do Cython Não corresponde necessariamente a um arquivo .pyx ou módulo Python Útil para armazenar declarações comuns (ex: bibliotecas externas) Arquivo de inclusão textual .pxi
  • 19. Cython Aspectos Gerais O Cython usa três tipos de arquivo-fonte: Arquivo de implementação .pyx Contém as implementações (funções em C, C++ ou Python) Arquivo de definição .pxd Possui apenas declarações em C para uso em módulos do Cython Não corresponde necessariamente a um arquivo .pyx ou módulo Python Útil para armazenar declarações comuns (ex: bibliotecas externas) Arquivo de inclusão textual .pxi Similar a diretiva #include do C
  • 20. Cython Aspectos Gerais O Cython usa três tipos de arquivo-fonte: Arquivo de implementação .pyx Contém as implementações (funções em C, C++ ou Python) Arquivo de definição .pxd Possui apenas declarações em C para uso em módulos do Cython Não corresponde necessariamente a um arquivo .pyx ou módulo Python Útil para armazenar declarações comuns (ex: bibliotecas externas) Arquivo de inclusão textual .pxi Similar a diretiva #include do C Sub-utilizado após o uso do cimport *
  • 21. Cython Exemplo Hello World em Cython # salve este arquivo como test.pyx cdef char *__hello_world (): cdef char *c_string = "Hello World!" cdef object string string = c_string + " :)" return string def hello_world (): print __hello_world ()
  • 22. Cython Exemplo (2) Arquivo de setup do python # salve este arquivo como setup.py from distutils.core import setup from distutils.extension import Extension from Cython.Distutils import build_ext setup ( cmdclass = {'build_ext ': build_ext}, ext_modules = [Extension("test", ["test.pyx"])] )
  • 23. Cython Exemplo (3) Criação da biblioteca (módulo Python) $ python setup.py build_ext --inplace
  • 24. Cython Exemplo (3) Criação da biblioteca (módulo Python) $ python setup.py build_ext --inplace Executando o módulo $ python >>> import test >>> test.hello_world () Hello World! :)
  • 26. Libpurple Biblioteca que provê suporte a mensagem instantânea
  • 28. Libpurple O que é? A Libpurple é: Biblioteca que provê funcionalidades clientes de mensagens instantâneas
  • 29. Libpurple O que é? A Libpurple é: Biblioteca que provê funcionalidades clientes de mensagens instantâneas Suporta vários protocolos (MSN, Yahoo, IRC, Jabber, entre outros)
  • 30. Libpurple O que é? A Libpurple é: Biblioteca que provê funcionalidades clientes de mensagens instantâneas Suporta vários protocolos (MSN, Yahoo, IRC, Jabber, entre outros) Pidgin: Front-end da libpurple
  • 31. Libpurple O que é? A Libpurple é: Biblioteca que provê funcionalidades clientes de mensagens instantâneas Suporta vários protocolos (MSN, Yahoo, IRC, Jabber, entre outros) Pidgin: Front-end da libpurple Outros clientes: Adium (Mac), Finch (Console), Meebo (Web)
  • 32. Libpurple Aspectos Gerais Características da Libpurple: Gerencia conexões a redes de mensagem instantânea
  • 33. Libpurple Aspectos Gerais Características da Libpurple: Gerencia conexões a redes de mensagem instantânea Gerencia contas e preferências de usuário
  • 34. Libpurple Aspectos Gerais Características da Libpurple: Gerencia conexões a redes de mensagem instantânea Gerencia contas e preferências de usuário Possui API unificada para todos os protocolos
  • 35. Libpurple Aspectos Gerais Características da Libpurple: Gerencia conexões a redes de mensagem instantânea Gerencia contas e preferências de usuário Possui API unificada para todos os protocolos Implementa o que é genérico entre todos os protocolos
  • 36. Libpurple Aspectos Gerais Características da Libpurple: Gerencia conexões a redes de mensagem instantânea Gerencia contas e preferências de usuário Possui API unificada para todos os protocolos Implementa o que é genérico entre todos os protocolos API específica para exceções
  • 37. Libpurple Aspectos Gerais (2) Sinais e callbacks: Registro de callbacks para diversos tipos de eventos (UI operations)
  • 38. Libpurple Aspectos Gerais (2) Sinais e callbacks: Registro de callbacks para diversos tipos de eventos (UI operations) Eventos da conta, lista de usuários, mensagens, entre outros
  • 39. Libpurple Aspectos Gerais (2) Sinais e callbacks: Registro de callbacks para diversos tipos de eventos (UI operations) Eventos da conta, lista de usuários, mensagens, entre outros Estruturas de callbacks populadas no início da execução do cliente
  • 40. Libpurple Aspectos Gerais (2) Sinais e callbacks: Registro de callbacks para diversos tipos de eventos (UI operations) Eventos da conta, lista de usuários, mensagens, entre outros Estruturas de callbacks populadas no início da execução do cliente Sinais que podem ser associados a callbacks
  • 41. Libpurple Aspectos Gerais (3) Extensões e exceções: Extensível através de plugins
  • 42. Libpurple Aspectos Gerais (3) Extensões e exceções: Extensível através de plugins Suporte a um protocolo específico é um plugin
  • 43. Libpurple Aspectos Gerais (3) Extensões e exceções: Extensível através de plugins Suporte a um protocolo específico é um plugin Lidos no início da execução do cliente
  • 44. Libpurple Aspectos Gerais (3) Extensões e exceções: Extensível através de plugins Suporte a um protocolo específico é um plugin Lidos no início da execução do cliente Não possui suporte a threads Cliente não pode lidar com a biblioteca em threads separadas
  • 45. Libpurple Aspectos Gerais (3) Extensões e exceções: Extensível através de plugins Suporte a um protocolo específico é um plugin Lidos no início da execução do cliente Não possui suporte a threads Cliente não pode lidar com a biblioteca em threads separadas Facilidade para fazer encapsulamento
  • 46. Libpurple Aspectos Gerais (3) Extensões e exceções: Extensível através de plugins Suporte a um protocolo específico é um plugin Lidos no início da execução do cliente Não possui suporte a threads Cliente não pode lidar com a biblioteca em threads separadas Facilidade para fazer encapsulamento Loop principal diferente para cada tipo de cliente
  • 48. Python-purple Interface da Libpurple para Python escrito em Cython
  • 50. Python-purple O que é? O Python-purple é: Spin-off de funcionalidade de compartilhamento de informações entre amigos no Carman
  • 51. Python-purple O que é? O Python-purple é: Spin-off de funcionalidade de compartilhamento de informações entre amigos no Carman Escrito em Cython
  • 52. Python-purple O que é? O Python-purple é: Spin-off de funcionalidade de compartilhamento de informações entre amigos no Carman Escrito em Cython Provê acesso completo à implementação da Libpurple para programas Python
  • 53. Python-purple O que é? O Python-purple é: Spin-off de funcionalidade de compartilhamento de informações entre amigos no Carman Escrito em Cython Provê acesso completo à implementação da Libpurple para programas Python Único passo: Importar o módulo purple
  • 54. Python-purple Aspectos Gerais Características do Python-purple: Headers da API da Libpurple separados em arquivos .pxd
  • 55. Python-purple Aspectos Gerais Características do Python-purple: Headers da API da Libpurple separados em arquivos .pxd Declaração das funções e variáveis (extern)
  • 56. Python-purple Aspectos Gerais Características do Python-purple: Headers da API da Libpurple separados em arquivos .pxd Declaração das funções e variáveis (extern) Forward declarations usados para evitar loops recursivos no Cython
  • 57. Python-purple Aspectos Gerais Características do Python-purple: Headers da API da Libpurple separados em arquivos .pxd Declaração das funções e variáveis (extern) Forward declarations usados para evitar loops recursivos no Cython Mesmo vínculo com o mainloop da GLib que o Pidgin
  • 58. Python-purple Aspectos Gerais Características do Python-purple: Headers da API da Libpurple separados em arquivos .pxd Declaração das funções e variáveis (extern) Forward declarations usados para evitar loops recursivos no Cython Mesmo vínculo com o mainloop da GLib que o Pidgin glib_input_add implementado em C e importado pelo Cython
  • 59. Python-purple Aspectos Gerais Características do Python-purple: Headers da API da Libpurple separados em arquivos .pxd Declaração das funções e variáveis (extern) Forward declarations usados para evitar loops recursivos no Cython Mesmo vínculo com o mainloop da GLib que o Pidgin glib_input_add implementado em C e importado pelo Cython Outras funções da mainloop implementadas pela Libpurple Core: Inicia a execução da biblioteca
  • 60. Python-purple Aspectos Gerais Características do Python-purple: Headers da API da Libpurple separados em arquivos .pxd Declaração das funções e variáveis (extern) Forward declarations usados para evitar loops recursivos no Cython Mesmo vínculo com o mainloop da GLib que o Pidgin glib_input_add implementado em C e importado pelo Cython Outras funções da mainloop implementadas pela Libpurple Core: Inicia a execução da biblioteca Inicializa o núcleo da Libpurple e as estruturas de operações na UI
  • 61. Python-purple Aspectos Gerais (2) Callbacks e sinais: Armazenados em dicionários lidos pelas callbacks genéricas implementadas em C
  • 62. Python-purple Aspectos Gerais (2) Callbacks e sinais: Armazenados em dicionários lidos pelas callbacks genéricas implementadas em C Chamam sequencialmente de acordo com o evento ou sinal associado
  • 63. Python-purple Aspectos Gerais (2) Callbacks e sinais: Armazenados em dicionários lidos pelas callbacks genéricas implementadas em C Chamam sequencialmente de acordo com o evento ou sinal associado Traduzem os parâmetros das chamadas em Python para C e vice-versa
  • 64. Python-purple Aspectos Gerais (2) Callbacks e sinais: Armazenados em dicionários lidos pelas callbacks genéricas implementadas em C Chamam sequencialmente de acordo com o evento ou sinal associado Traduzem os parâmetros das chamadas em Python para C e vice-versa Quando um retorno é necessário: Função em C intercepta o retorno da callback
  • 65. Python-purple Aspectos Gerais (2) Callbacks e sinais: Armazenados em dicionários lidos pelas callbacks genéricas implementadas em C Chamam sequencialmente de acordo com o evento ou sinal associado Traduzem os parâmetros das chamadas em Python para C e vice-versa Quando um retorno é necessário: Função em C intercepta o retorno da callback Vide add_callback() e signal_connect()
  • 67. Referências Cython: http://www.cython.org Cython user guide: http://docs.cython.org Cython wiki: http://wiki.cython.org Libpurple: http://pidgin.im Páginas dos desenvolvedores: http://developer.pidgin.im Wiki: http://developer.pidgin.im/wiki Python-purple: http://garage.maemo.org/projects/python-purple HowTo: http://developer.pidgin.im/wiki/PythonHowTo