SlideShare una empresa de Scribd logo
1 de 69
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
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

Más contenido relacionado

Destacado

Linux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronLinux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronFrederico Madeira
 
Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)Bruno Abinader
 
Computação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticosComputação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticosbshecht
 
Agenda tarefas
Agenda tarefasAgenda tarefas
Agenda tarefastarcisioti
 
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...Dafmet Ufpel
 
MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013Arthur Francisco Lorenzon
 
(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processos(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processosAnderson Lago
 
Desenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDADesenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDAFilipo Mór
 
Introdução à Shellscript
Introdução à ShellscriptIntrodução à Shellscript
Introdução à ShellscriptVinícius Hax
 
Desenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonDesenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonRelsi Maron
 
Introduction to NumPy (PyData SV 2013)
Introduction to NumPy (PyData SV 2013)Introduction to NumPy (PyData SV 2013)
Introduction to NumPy (PyData SV 2013)PyData
 

Destacado (18)

OpenMP Day1
OpenMP Day1OpenMP Day1
OpenMP Day1
 
Linux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o CronLinux - Agendando Tarefas com o Cron
Linux - Agendando Tarefas com o Cron
 
Aula CRONTAB
Aula CRONTABAula CRONTAB
Aula CRONTAB
 
Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)Plasma Animations Overview (aka. Pimp my Plasmoids!)
Plasma Animations Overview (aka. Pimp my Plasmoids!)
 
Computação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticosComputação paralela utilizando OpenMP para aplicações matemáticos
Computação paralela utilizando OpenMP para aplicações matemáticos
 
Agenda tarefas
Agenda tarefasAgenda tarefas
Agenda tarefas
 
OpenMP Day 3
OpenMP Day 3OpenMP Day 3
OpenMP Day 3
 
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010  4ª ...
XVII SAMET - Dr. Gerson Cavalheiro [Programação com Open MP - 01.12.2010 4ª ...
 
Curso openmp
Curso openmpCurso openmp
Curso openmp
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013MiniCurso Programação Paralela com OpenMP - SACTA 2013
MiniCurso Programação Paralela com OpenMP - SACTA 2013
 
CUDA/Open CL
CUDA/Open CLCUDA/Open CL
CUDA/Open CL
 
Grupo de Estudos de Softwares Livres
Grupo de Estudos de Softwares LivresGrupo de Estudos de Softwares Livres
Grupo de Estudos de Softwares Livres
 
(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processos(08)inicializacao e gerencia_de_processos
(08)inicializacao e gerencia_de_processos
 
Desenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDADesenvolvendo Aplicações de Uso Geral para GPU com CUDA
Desenvolvendo Aplicações de Uso Geral para GPU com CUDA
 
Introdução à Shellscript
Introdução à ShellscriptIntrodução à Shellscript
Introdução à Shellscript
 
Desenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonDesenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em Python
 
Introduction to NumPy (PyData SV 2013)
Introduction to NumPy (PyData SV 2013)Introduction to NumPy (PyData SV 2013)
Introduction to NumPy (PyData SV 2013)
 

Similar a Python-purple: Desenvolvendo bindings para Python usando o Cython

Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsHelio Colombe
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação PythonJunior Sobrenome
 
Python Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem PythonPython Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem Pythonantonio sérgio nogueira
 
Administração de sistemas usando Python
Administração de sistemas usando PythonAdministração de sistemas usando Python
Administração de sistemas usando PythonHelio Loureiro
 
Projeto para a faculdade? Canivete Python resolve!
Projeto para a faculdade? Canivete Python resolve!Projeto para a faculdade? Canivete Python resolve!
Projeto para a faculdade? Canivete Python resolve!Guilherme Medeiros
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonAlvaro Oliveira
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webAlvaro Oliveira
 
Gerando bindings de bibliotecas C++ para Python
Gerando bindings de bibliotecas C++ para PythonGerando bindings de bibliotecas C++ para Python
Gerando bindings de bibliotecas C++ para PythonMarcelo Lira
 
Introdução a programação em python d3
Introdução a programação em python d3Introdução a programação em python d3
Introdução a programação em python d3Moises de Paula
 
python_para_desenvolvedores.pdf
python_para_desenvolvedores.pdfpython_para_desenvolvedores.pdf
python_para_desenvolvedores.pdfProfIvanSaboia
 
Composer dependency manager
Composer   dependency managerComposer   dependency manager
Composer dependency managerVitor Mattos
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + PythonMateus Padua
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonFlávio Ribeiro
 
Aula 02 - Análise de Dados - Introdução ao Python.pdf
Aula 02 - Análise de Dados - Introdução ao Python.pdfAula 02 - Análise de Dados - Introdução ao Python.pdf
Aula 02 - Análise de Dados - Introdução ao Python.pdfAcauan Ribeiro
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonFabio Spanhol
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução PythonGleison Rodrigues
 

Similar a Python-purple: Desenvolvendo bindings para Python usando o Cython (20)

Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - Português
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
 
Python Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem PythonPython Módulo Básico - Introdução a linguagem Python
Python Módulo Básico - Introdução a linguagem Python
 
Administração de sistemas usando Python
Administração de sistemas usando PythonAdministração de sistemas usando Python
Administração de sistemas usando Python
 
Projeto para a faculdade? Canivete Python resolve!
Projeto para a faculdade? Canivete Python resolve!Projeto para a faculdade? Canivete Python resolve!
Projeto para a faculdade? Canivete Python resolve!
 
Introdução à linguagem python
Introdução à linguagem pythonIntrodução à linguagem python
Introdução à linguagem python
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações web
 
Gerando bindings de bibliotecas C++ para Python
Gerando bindings de bibliotecas C++ para PythonGerando bindings de bibliotecas C++ para Python
Gerando bindings de bibliotecas C++ para Python
 
Introdução a programação em python d3
Introdução a programação em python d3Introdução a programação em python d3
Introdução a programação em python d3
 
python_para_desenvolvedores.pdf
python_para_desenvolvedores.pdfpython_para_desenvolvedores.pdf
python_para_desenvolvedores.pdf
 
Workshop Python.2
Workshop Python.2Workshop Python.2
Workshop Python.2
 
Apostila_IC.pdf
Apostila_IC.pdfApostila_IC.pdf
Apostila_IC.pdf
 
Composer dependency manager
Composer   dependency managerComposer   dependency manager
Composer dependency manager
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
Git presentation
Git presentationGit presentation
Git presentation
 
Aula 02 - Análise de Dados - Introdução ao Python.pdf
Aula 02 - Análise de Dados - Introdução ao Python.pdfAula 02 - Análise de Dados - Introdução ao Python.pdf
Aula 02 - Análise de Dados - Introdução ao Python.pdf
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com Python
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução Python
 

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
  • 6.
  • 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