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
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"])]
)
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)
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
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
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
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
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
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()