SlideShare uma empresa Scribd logo
1 de 45
Baixar para ler offline
Implementação de Aplicações Móveis
e Jogos com Python
Review
 3ª Aula
 Mais appuifw
 Title, body, menus
 Teclado
 Graphics e Canvas
 Data Handling
 Um pouco de jogos :-)
Pra Hoje...
 4ª Aula
 Fim do Appuifw
 Forms e tabs
 Exercícios
 Bluetooth
 Networking
 Camera
 O módulo sysinfo
 Dicas de um Projeto
 Definição dos grupos e Projetos
Appuifw:
Forms e Tabs
Appuifw.Form
 appuifw.Form
 Objeto de formulários da s60
 Recebe no construtor uma lista de tuplas e
seu tipo de edição.
 (nome,tipo[,valor default])
 Nome é um unicode
 Tipo pode ser:
 'text'
 'number'
 'date'
 'time'
 'combo'
 'float'
Appuifw.Form
 appuifw.Form
 Objeto de formulários da s60
 Tem os seguintes atributos
 Flags
 FFormEditModeOnly – Aceita edição
 FFormViewModeOnly – Não aceita edição
 Menu
 Recebe uma lista de tuplas (titulo, callback)
 Callback é uma referencia a função
 Titulo é um unicode
Appuifw.Form
 appuifw.Form
 Objeto de formulários da s60
 Tem os seguintes Métodos
 Execute()
 Apresenta a Form na UI
 insert()
 Insere itens ao Form
 Pop() e length()
 save_hook()
Appuifw.Form
import appuifw
modelos = [u'e61',u'xpressmusic',u'iphone']
fields = [(u'Company','text'), (u'Model', 'combo', (modelos,0))]
myForm = appuifw.Form( fields, flags=appuifw.FFormEditModeOnly)
myForm.execute()
 Exemplo 1
Appuifw.Form
import appuifw, time
models = [u"6600", u"6630", u"7610", u"N90", u"N70"]
fields = [(u"Company", 'text', u"Nokia"), (u"Model", 'combo', (models, 0)),
(u"Amount",'number', 1), (u"Date", 'date', time.time()), (u"Time", 'time')]
saved = False
def save(arg):
global saved
saved = True
return True
myForm = appuifw.Form(fields, flags=appuifw.FFormEditModeOnly)
myForm.save_hook = save
myForm.execute()
if saved == True:
print myForm[0][2], models[myForm[1][2][1]], myForm[2][2]
print time.strftime("%d/%m/%Y", time.localtime(myForm[3][2]))
print time.strftime(time.ctime(myForm[4][2])[11:20])
 Exemplo 2
PyS60 – Exercício 1
Exerc cio!í
Crie uma Agenda de Contatos. O usuário será capaz de
escolher entre adicionar pessoas a agenda (onde o programa
pede Nome e Telefone da pessoa) ou buscar pelo nome
usando uma multi_selection list.
Ao selecionar o nome da pessoa, o programa deverá imprimir
em um appuifw.Text() o Nome da pessoa e o Telefone dela. Ao
selecionar o menu novamente o appuifw.Text() deverá ser
apagado.
É desejável que o programa utilize Orientação a Objetos.
PyS60 – Exercício 2
Exerc cio!í
Criar uma aplicação que capture eventos do teclado e chame
funções da appuifw (query e note, por exemplo.)
É desejável que o programa utilize Orientação a Objetos, com
bibliotecas de captura de eventos e de gerência dos callbacks.
PyS60 – Exercício 3
Exerc cio!í
Criar uma aplicação que, a cada evento gerado do joystick,
mude a cor do body.
Criar também um menu (popup_menu) com a escolha de
escrever um nome (query). Esse nome escrito irá aparecer no
meio da tela com a cor preta (usando canvas.text ao invés de
appuifw.text).
Bluetooth
Bluetooth
 OBEX (OBject EXchange)
 Protocolo Bluetooth voltado pra transmissão de arquivos (audio,
imagem, etc)
Bluetooth
 OBEX (OBject EXchange)
 Protocolo Bluetooth voltado pra transmissão de arquivos (audio,
imagem, etc)
 Para scan de dispositivos OBEX:
import socket
endereco, servicos = socket.bt_obex_discover()
print endereco,servicos
Bluetooth
 Enviando uma foto
import camera, e32, socket, appuifw
foto = u"C:Imagesarquivo_foto.jpg"
def enviar_foto():
address, services = socket.bt_obex_discover()
if u'OBEX Object Push' in services:
channel = services[u'OBEX Object Push']
socket.bt_obex_send_file(address, channel, arquivo_foto)
appuifw.note(u"Foto enviada!", "info")
else:
appuifw.note(u"Dispositivo não preparado.", "error")
def tirar_foto():
photo = camera.take_photo()
canvas.blit(photo)
photo.save(arquivo_foto)
def quit():
app_lock.signal()
canvas = appuifw.Canvas()
appuifw.app.body = canvas
appuifw.app.exit_key_handler = quit
appuifw.app.menu = [(u"Tirar Foto", tirar_foto), (u"Enviar", enviar_foto)]
app_lock = e32.Ao_lock()
app_lock.wait()
 RFCOMM (Radio Frequency COMMunication)
 Protocolo Bluetooth para transmissão (RX e TX) de texto ou
raw data
Bluetooth
 RFCOMM (Radio Frequency COMMunication)
 Protocolo Bluetooth para transmissão (RX e TX) de texto ou
raw data
 Para scan de dispositivos RFCOMM:
Bluetooth
import socket
endereco, servicos = socket.bt_discover()
print endereco,servicos
Bluetooth
 Fazendo um CHAT – Lado Servidor
import socket, appuifw
def chat_server():
server = socket.socket(socket.AF_BT, socket.SOCK_STREAM)
channel = socket.bt_rfcomm_get_available_server_channel(server)
server.bind(("", channel))
server.listen(1)
socket.bt_advertise_service(u"NossoChat", server, True, socket.RFCOMM)
socket.set_security(server, socket.AUTH | socket.AUTHOR)
appuifw.note(u”Esperando Conexão”)
conn, client_addr = server.accept()
appuifw.note(u”Conectado!”)
talk(conn, None)
Bluetooth
 Fazendo um CHAT – Lado Cliente
def chat_client():
conn = socket.socket(socket.AF_BT, socket.SOCK_STREAM)
address, services = socket.bt_discover()
if 'NossoChat' in services:
channel = services[u'btchat']
conn.connect((address, channel))
appuifw.note(u”Conectado!”)
talk(None, conn)
else:
appuifw.note(u"O celular não está rodando o chat.", "error")
Bluetooth
 Fazendo um CHAT – Comum
def receive_msg(fd):
print "Esperando a mensagem.."
reply = fd.readline()
print "Recebido: " + reply
appuifw.note(unicode(reply), "info")
def send_msg(fd):
msg = appuifw.query(u"Envie:", "text")
print "Enviado: " + msg
print >> fd, msg
def talk(client, server):
try:
if server:
fd = server.makefile("rw", 0)
receive_msg(fd)
if client:
fd = client.makefile("rw", 0)
while True:
send_msg(fd)
receive_msg(fd
except:
appuifw.note(u"Desconectou",
"info")
if client: client.close()
if server: server.close()
index = appuifw.popup_menu([u"Servir",
u"Conectar"])
if index != None:
if index:
chat_client()
else:
chat_server()
Networking
Networking
 Maneiras de acessar servidores
 Computação Distribuída
 Módulos de Acesso
 httplib, urllib (core)
 json.py (Patric Logan)
 http://meu-ip/json.py
Networking
 Fazendo um simples download
import urllib
url = “http://pagina/arquivo.html”
arquivo = “C:Dataarquivo.txt”
urllib.urlretrieve(url, arquivo)
Networking
 Comunicando-se através de POST
 Lado Cliente (Celular)
import httplib, urllib, appuifw
def senddata():
params = urllib.urlencode({'data': "Flavio"})
headers = {"Content-type": "application/x-www-form-urlencoded","Accept":
"text/plain"}
conn = httplib.HTTPConnection("www.flavioribeiro.com")
appuifw.note(u'Espere...')
conn.request("POST", "/exemplo.php", params, headers)
response = conn.getresponse()
uniresponse = unicode(response.read())
conn.close()
appuifw.note(uniresponse)
senddata()
Networking
 Comunicando-se através de POST
 Lado Servidor (PHP!)
<?php
$data = $_REQUEST['data'];
$filename = 'textfile.txt';
$handle = fopen($filename, 'a+');
$text="n";
fwrite($handle, $data);
fwrite($handle, $text);
echo 'Post com Sucesso!';
fclose($handle);
?>
Série 'Network Programming for s60'
do Marcelo Barros
http://croozeus.com/
Camera
Camera
 Módulo responsável por interação direta com a(s) camera(s)
 Alguns métodos:
 cameras_available()
 image_modes()
 flash_modes()
 max_zoom()
 take_photo()
Camera
 ViewFinder
 Feedback pro usuário sobre a posição da imagem
import camera, appuifw, e32
def viewfinder(img):
canvas.blit(img)
def quit():
camera.stop_finder()
lock.signal()
appuifw.app.body = canvas = appuifw.Canvas()
appuifw.app.exit_key_handler = quit
camera.start_finder(viewfinder)
lock = e32.Ao_lock()
lock.wait()
Camera
 ViewFinder
 Feedback pro usuário sobre a posição da imagem
Camera
 camera.take_photo()
 Retorna um objeto graphics.Image
import camera
foto = camera.take_photo()
foto.save(“C:Imagesfoto.jpg”)
O módulo sysinfo
 Módulo responsável por informações do sistema
 sysinfo.battery()
 Retorna o nivel da bateria (entre 0 e 7)
 sysinfo.imei()
 Retorna o número de identificação do celular
 sysinfo.active_profile()
 Retorna o perfil utilizado no momento (Silencioso, Reunião,
etc)
 sysinfo.display_pixels()
 Retorna o tamanho da tela em pixels (muito importante)
Sysinfo
 Módulo responsável por informações do sistema
 sysinfo.free_drivespace()
 Retorna o espaço livre em bytes em cada drive
 {u'C:': 58463232, u'D:': 9494528, u'Z:': 0}
 sysinfo.total_ram()
 Retorna o tamanho da memória RAM
 sysinfo.free_ram()
 Retorna a memória RAM livre
 sysinfo.signal_bars()
 Retorna o sinal da antena (de 0 a 7)
 sysinfo.sw_version()
 Versão do firmware
Sysinfo
Dicas de Organização
de um Projeto
 Várias funções em um só arquivo
 Arquivo: operacoes.py
 Funções:
 soma(x,y)
 subtrai(x,y)
 divide(x,y)
Namespace e Dicas de um projeto Python
import operacoes
operacoes.soma(10,20)
operacoes.divide(100,2)
 Várias Classes em um só arquivo
 Arquivo: funcionarios.py
 Classes:
 Presidente
 Diretor
 Estagiario
Namespace e Dicas de um projeto Python
import funcionarios
flavio = funcionarios.Estagiario()
lucas = funcionarios.Presidente()
flavio.trabalha()
lucas.toma_cafe()
 Métodos
 trabalha()
 toma_cafe()
 Várias Classes em um só arquivo (Exemplo II)
 Arquivo: funcionarios.py
 Classes:
 Presidente
 Diretor
 Estagiario
Namespace e Dicas de um projeto Python
from funcionarios import *
flavio = Estagiario()
lucas = Presidente()
flavio.trabalha()
lucas.toma_cafe()
 Métodos
 trabalha()
 toma_cafe()
 Pacotes
 Pasta: conexoes/
 Arquivo __init__.py (vazio)
 Arquivos:
 bluetooth.py → Classes Server e Client
 wireless.py → Classes AccessPoint e Client
Namespace e Dicas de um projeto Python
import conexoes.bluetooth
import conexoes.wireless
bt = conexoes.bluetooth.Client()
wifi = conexoes.wireless.AccessPoint()
 Pacotes (Exemplo II)
 Pasta: conexoes/
 Arquivo __init__.py (vazio)
 Arquivos:
 bluetooth.py → Classes Server e Client
 wireless.py → Classes AccessPoint e Client
Namespace e Dicas de um projeto Python
from conexoes import bluetooth
bt = bluetooth.Client()
 Pacotes (Exemplo III)
 Pasta: conexoes/
 Arquivo __init__.py (vazio)
 Arquivos:
 bluetooth.py → Classes Server e Client
 wireless.py → Classes AccessPoint e Client
Namespace e Dicas de um projeto Python
from conexoes.bluetooth import Server
bt = Server()
 Dicas:
 Crie uma pasta pra seu programa:
 Deixe uma pasta do seu programa para os códigos (src)
 Deixe outra pasta para Arquivos no geral (files)
 Crie outras necessárias
Namespace e Dicas de um projeto Python
import os, os.path
PATH = u”C:DataMinhaAplicação”
if not os.path.exists(PATH): os.makedirs(PATH)
import os, os.path
Sources = u”C:DataMinhaAplicaçãosrc”
if not os.path.exists(Sources): os.makedirs(Sources)
 Dicas:
 Coloque a pasta de códigos no seu Python Path
Assim ele será visível e poderá ser incluído nos seus códigos.
Namespace e Dicas de um projeto Python
import sys
Sources = u”C:DataMinhaAplicaçãosrc”
sys.path.append(Sources)
Projetos!

Mais conteúdo relacionado

Mais procurados

Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelAndrews Medina
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Wilson Júnior
 
Palestra python
Palestra pythonPalestra python
Palestra pythonRony Cruch
 
Introdução a linguagem Go
Introdução a linguagem GoIntrodução a linguagem Go
Introdução a linguagem GoAllisson Azevedo
 
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos  parte 2Golang para desenvolvedores pragmáticos  parte 2
Golang para desenvolvedores pragmáticos parte 2Wilson Júnior
 
Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Hugo Maia Vieira
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECLW3P Projetos Web
 
007 programando em python - funcoes
007   programando em python - funcoes007   programando em python - funcoes
007 programando em python - funcoesLeandro Barbosa
 
013 programando em python - arquivos
013   programando em python - arquivos013   programando em python - arquivos
013 programando em python - arquivosLeandro Barbosa
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etcLuciano Ramalho
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em PythonLuciano Ramalho
 

Mais procurados (20)

Design de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentávelDesign de código: princípios e práticas para ter um código sustentável
Design de código: princípios e práticas para ter um código sustentável
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)
 
Palestra python
Palestra pythonPalestra python
Palestra python
 
Introdução a linguagem Go
Introdução a linguagem GoIntrodução a linguagem Go
Introdução a linguagem Go
 
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos  parte 2Golang para desenvolvedores pragmáticos  parte 2
Golang para desenvolvedores pragmáticos parte 2
 
Scatole Nere
Scatole NereScatole Nere
Scatole Nere
 
Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)Introdução ao Shell Script (versão estendida)
Introdução ao Shell Script (versão estendida)
 
PHP 5.3 - What's new?
PHP 5.3 - What's new?PHP 5.3 - What's new?
PHP 5.3 - What's new?
 
Linguagem Go
Linguagem GoLinguagem Go
Linguagem Go
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECL
 
007 programando em python - funcoes
007   programando em python - funcoes007   programando em python - funcoes
007 programando em python - funcoes
 
013 programando em python - arquivos
013   programando em python - arquivos013   programando em python - arquivos
013 programando em python - arquivos
 
Python Class
Python ClassPython Class
Python Class
 
Shell script
Shell scriptShell script
Shell script
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Javascript
JavascriptJavascript
Javascript
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
Spring Capitulo 03
Spring Capitulo 03Spring Capitulo 03
Spring Capitulo 03
 

Destaque

Integração de aplicações em
Integração de aplicações emIntegração de aplicações em
Integração de aplicações emgsroma
 
Python Training #0.5 ed. 7
Python Training #0.5 ed. 7Python Training #0.5 ed. 7
Python Training #0.5 ed. 7Fabio Spanhol
 
Aprendizado Profundo & CNNs
Aprendizado Profundo & CNNsAprendizado Profundo & CNNs
Aprendizado Profundo & CNNsFabio Spanhol
 
Python Training #1, ed. 6
Python Training #1, ed. 6Python Training #1, ed. 6
Python Training #1, ed. 6Fabio Spanhol
 
Python Training #1 ed.6
Python Training #1 ed.6 Python Training #1 ed.6
Python Training #1 ed.6 Fabio Spanhol
 
Python Training #1 - ed4
Python Training #1 - ed4Python Training #1 - ed4
Python Training #1 - ed4Fabio Spanhol
 
Mostrando a Cobra - Breve Introdução à Linguagem Python
Mostrando a Cobra - Breve Introdução à Linguagem Python Mostrando a Cobra - Breve Introdução à Linguagem Python
Mostrando a Cobra - Breve Introdução à Linguagem Python Fabio Spanhol
 

Destaque (7)

Integração de aplicações em
Integração de aplicações emIntegração de aplicações em
Integração de aplicações em
 
Python Training #0.5 ed. 7
Python Training #0.5 ed. 7Python Training #0.5 ed. 7
Python Training #0.5 ed. 7
 
Aprendizado Profundo & CNNs
Aprendizado Profundo & CNNsAprendizado Profundo & CNNs
Aprendizado Profundo & CNNs
 
Python Training #1, ed. 6
Python Training #1, ed. 6Python Training #1, ed. 6
Python Training #1, ed. 6
 
Python Training #1 ed.6
Python Training #1 ed.6 Python Training #1 ed.6
Python Training #1 ed.6
 
Python Training #1 - ed4
Python Training #1 - ed4Python Training #1 - ed4
Python Training #1 - ed4
 
Mostrando a Cobra - Breve Introdução à Linguagem Python
Mostrando a Cobra - Breve Introdução à Linguagem Python Mostrando a Cobra - Breve Introdução à Linguagem Python
Mostrando a Cobra - Breve Introdução à Linguagem Python
 

Semelhante a Implementação de Aplicações Móveis com Python

Java recursos avançados - streams
Java   recursos avançados - streamsJava   recursos avançados - streams
Java recursos avançados - streamsArmando Daniel
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Cristiano Rafael Steffens
 
Construindo aplicações para o Windows Phone com Silverlight
Construindo aplicações para o Windows Phone com Silverlight  Construindo aplicações para o Windows Phone com Silverlight
Construindo aplicações para o Windows Phone com Silverlight Luciano Condé
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 2
Implementação de Aplicações Móveis e Jogos com Python - Aula 2Implementação de Aplicações Móveis e Jogos com Python - Aula 2
Implementação de Aplicações Móveis e Jogos com Python - Aula 2Flávio Ribeiro
 
Apresentação pygame
Apresentação pygameApresentação pygame
Apresentação pygameDanilo Costa
 
Introdução ao Titanium Mobile
Introdução ao Titanium MobileIntrodução ao Titanium Mobile
Introdução ao Titanium MobileEric Cavalcanti
 
Escreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoEscreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoWilson Júnior
 
Introdução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livreIntrodução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livrepichiliani
 
Uso Do Arena Em Simulacao
Uso Do Arena Em SimulacaoUso Do Arena Em Simulacao
Uso Do Arena Em SimulacaoPrydigo
 
Possibilidades com python
Possibilidades com pythonPossibilidades com python
Possibilidades com pythonUFPA
 
TDC - Introdução ao Actor Model com Microsoft Orleans
TDC - Introdução ao Actor Model com Microsoft OrleansTDC - Introdução ao Actor Model com Microsoft Orleans
TDC - Introdução ao Actor Model com Microsoft OrleansFabio Gouw
 
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacaoTDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacaotdc-globalcode
 
Django Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a OtimizaçãoDjango Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a OtimizaçãoLeandro Zanuz
 

Semelhante a Implementação de Aplicações Móveis com Python (20)

Curso Python for S60
Curso Python for S60Curso Python for S60
Curso Python for S60
 
Java recursos avançados - streams
Java   recursos avançados - streamsJava   recursos avançados - streams
Java recursos avançados - streams
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
 
Construindo aplicações para o Windows Phone com Silverlight
Construindo aplicações para o Windows Phone com Silverlight  Construindo aplicações para o Windows Phone com Silverlight
Construindo aplicações para o Windows Phone com Silverlight
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 2
Implementação de Aplicações Móveis e Jogos com Python - Aula 2Implementação de Aplicações Móveis e Jogos com Python - Aula 2
Implementação de Aplicações Móveis e Jogos com Python - Aula 2
 
Curso de Node JS Básico
Curso de Node JS BásicoCurso de Node JS Básico
Curso de Node JS Básico
 
Apresentação pygame
Apresentação pygameApresentação pygame
Apresentação pygame
 
Flutter do zero a publicacao
Flutter do zero a publicacaoFlutter do zero a publicacao
Flutter do zero a publicacao
 
Introdução ao Titanium Mobile
Introdução ao Titanium MobileIntrodução ao Titanium Mobile
Introdução ao Titanium Mobile
 
Escreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornadoEscreva aplicações web assíncronas com python3 + tornado
Escreva aplicações web assíncronas com python3 + tornado
 
Introdução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livreIntrodução à visão computacional utilizando software livre
Introdução à visão computacional utilizando software livre
 
Sokoban com PyS60
Sokoban com PyS60Sokoban com PyS60
Sokoban com PyS60
 
Uso Do Arena Em Simulacao
Uso Do Arena Em SimulacaoUso Do Arena Em Simulacao
Uso Do Arena Em Simulacao
 
Possibilidades com python
Possibilidades com pythonPossibilidades com python
Possibilidades com python
 
Minicurso pygame
Minicurso pygameMinicurso pygame
Minicurso pygame
 
Pro3 03 e_dados_complexos
Pro3 03 e_dados_complexosPro3 03 e_dados_complexos
Pro3 03 e_dados_complexos
 
TDC - Introdução ao Actor Model com Microsoft Orleans
TDC - Introdução ao Actor Model com Microsoft OrleansTDC - Introdução ao Actor Model com Microsoft Orleans
TDC - Introdução ao Actor Model com Microsoft Orleans
 
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacaoTDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
 
Flutter do zero a publicacao
Flutter do zero a publicacaoFlutter do zero a publicacao
Flutter do zero a publicacao
 
Django Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a OtimizaçãoDjango Apps - Do Núcleo a Otimização
Django Apps - Do Núcleo a Otimização
 

Mais de Flávio Ribeiro

Snickers: Open Source HTTP API for Media Encoding
Snickers: Open Source HTTP API for Media EncodingSnickers: Open Source HTTP API for Media Encoding
Snickers: Open Source HTTP API for Media EncodingFlávio Ribeiro
 
Building a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York TimesBuilding a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York TimesFlávio Ribeiro
 
Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...
Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...
Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...Flávio Ribeiro
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Flávio Ribeiro
 
BemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-Peer
BemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-PeerBemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-Peer
BemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-PeerFlávio Ribeiro
 
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e Linux
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e LinuxDesenvolvimento Mobile & Embedded com Arduino, Python, ARM e Linux
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e LinuxFlávio Ribeiro
 
stewie: Machine Learning para detecção não supervisionada de anomalias
stewie: Machine Learning para detecção não supervisionada de anomaliasstewie: Machine Learning para detecção não supervisionada de anomalias
stewie: Machine Learning para detecção não supervisionada de anomaliasFlávio Ribeiro
 
Test Driven Development - Trabalhe tranquilo e maximize sua produtividade
Test Driven Development - Trabalhe tranquilo e maximize sua produtividadeTest Driven Development - Trabalhe tranquilo e maximize sua produtividade
Test Driven Development - Trabalhe tranquilo e maximize sua produtividadeFlávio Ribeiro
 
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
 
Introdução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonIntrodução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonFlávio Ribeiro
 
Linux em Sistemas Embarcados
Linux em Sistemas EmbarcadosLinux em Sistemas Embarcados
Linux em Sistemas EmbarcadosFlávio Ribeiro
 

Mais de Flávio Ribeiro (11)

Snickers: Open Source HTTP API for Media Encoding
Snickers: Open Source HTTP API for Media EncodingSnickers: Open Source HTTP API for Media Encoding
Snickers: Open Source HTTP API for Media Encoding
 
Building a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York TimesBuilding a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York Times
 
Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...
Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...
Towards the Application of WebRTC Peer-to-Peer to Scale Live Video Streaming ...
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1Implementação de Aplicações Móveis e Jogos com Python - Aula 1
Implementação de Aplicações Móveis e Jogos com Python - Aula 1
 
BemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-Peer
BemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-PeerBemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-Peer
BemTV: Modelo Híbrido para Transmissão de Vídeos ao Vivo utilizando Peer-to-Peer
 
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e Linux
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e LinuxDesenvolvimento Mobile & Embedded com Arduino, Python, ARM e Linux
Desenvolvimento Mobile & Embedded com Arduino, Python, ARM e Linux
 
stewie: Machine Learning para detecção não supervisionada de anomalias
stewie: Machine Learning para detecção não supervisionada de anomaliasstewie: Machine Learning para detecção não supervisionada de anomalias
stewie: Machine Learning para detecção não supervisionada de anomalias
 
Test Driven Development - Trabalhe tranquilo e maximize sua produtividade
Test Driven Development - Trabalhe tranquilo e maximize sua produtividadeTest Driven Development - Trabalhe tranquilo e maximize sua produtividade
Test Driven Development - Trabalhe tranquilo e maximize sua produtividade
 
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
 
Introdução a Linguagem de Programação Python
Introdução a Linguagem de Programação PythonIntrodução a Linguagem de Programação Python
Introdução a Linguagem de Programação Python
 
Linux em Sistemas Embarcados
Linux em Sistemas EmbarcadosLinux em Sistemas Embarcados
Linux em Sistemas Embarcados
 

Implementação de Aplicações Móveis com Python

  • 1. Implementação de Aplicações Móveis e Jogos com Python
  • 2. Review  3ª Aula  Mais appuifw  Title, body, menus  Teclado  Graphics e Canvas  Data Handling  Um pouco de jogos :-)
  • 3. Pra Hoje...  4ª Aula  Fim do Appuifw  Forms e tabs  Exercícios  Bluetooth  Networking  Camera  O módulo sysinfo  Dicas de um Projeto  Definição dos grupos e Projetos
  • 5. Appuifw.Form  appuifw.Form  Objeto de formulários da s60  Recebe no construtor uma lista de tuplas e seu tipo de edição.  (nome,tipo[,valor default])  Nome é um unicode  Tipo pode ser:  'text'  'number'  'date'  'time'  'combo'  'float'
  • 6. Appuifw.Form  appuifw.Form  Objeto de formulários da s60  Tem os seguintes atributos  Flags  FFormEditModeOnly – Aceita edição  FFormViewModeOnly – Não aceita edição  Menu  Recebe uma lista de tuplas (titulo, callback)  Callback é uma referencia a função  Titulo é um unicode
  • 7. Appuifw.Form  appuifw.Form  Objeto de formulários da s60  Tem os seguintes Métodos  Execute()  Apresenta a Form na UI  insert()  Insere itens ao Form  Pop() e length()  save_hook()
  • 8. Appuifw.Form import appuifw modelos = [u'e61',u'xpressmusic',u'iphone'] fields = [(u'Company','text'), (u'Model', 'combo', (modelos,0))] myForm = appuifw.Form( fields, flags=appuifw.FFormEditModeOnly) myForm.execute()  Exemplo 1
  • 9. Appuifw.Form import appuifw, time models = [u"6600", u"6630", u"7610", u"N90", u"N70"] fields = [(u"Company", 'text', u"Nokia"), (u"Model", 'combo', (models, 0)), (u"Amount",'number', 1), (u"Date", 'date', time.time()), (u"Time", 'time')] saved = False def save(arg): global saved saved = True return True myForm = appuifw.Form(fields, flags=appuifw.FFormEditModeOnly) myForm.save_hook = save myForm.execute() if saved == True: print myForm[0][2], models[myForm[1][2][1]], myForm[2][2] print time.strftime("%d/%m/%Y", time.localtime(myForm[3][2])) print time.strftime(time.ctime(myForm[4][2])[11:20])  Exemplo 2
  • 10. PyS60 – Exercício 1 Exerc cio!í Crie uma Agenda de Contatos. O usuário será capaz de escolher entre adicionar pessoas a agenda (onde o programa pede Nome e Telefone da pessoa) ou buscar pelo nome usando uma multi_selection list. Ao selecionar o nome da pessoa, o programa deverá imprimir em um appuifw.Text() o Nome da pessoa e o Telefone dela. Ao selecionar o menu novamente o appuifw.Text() deverá ser apagado. É desejável que o programa utilize Orientação a Objetos.
  • 11. PyS60 – Exercício 2 Exerc cio!í Criar uma aplicação que capture eventos do teclado e chame funções da appuifw (query e note, por exemplo.) É desejável que o programa utilize Orientação a Objetos, com bibliotecas de captura de eventos e de gerência dos callbacks.
  • 12. PyS60 – Exercício 3 Exerc cio!í Criar uma aplicação que, a cada evento gerado do joystick, mude a cor do body. Criar também um menu (popup_menu) com a escolha de escrever um nome (query). Esse nome escrito irá aparecer no meio da tela com a cor preta (usando canvas.text ao invés de appuifw.text).
  • 14. Bluetooth  OBEX (OBject EXchange)  Protocolo Bluetooth voltado pra transmissão de arquivos (audio, imagem, etc)
  • 15. Bluetooth  OBEX (OBject EXchange)  Protocolo Bluetooth voltado pra transmissão de arquivos (audio, imagem, etc)  Para scan de dispositivos OBEX: import socket endereco, servicos = socket.bt_obex_discover() print endereco,servicos
  • 16. Bluetooth  Enviando uma foto import camera, e32, socket, appuifw foto = u"C:Imagesarquivo_foto.jpg" def enviar_foto(): address, services = socket.bt_obex_discover() if u'OBEX Object Push' in services: channel = services[u'OBEX Object Push'] socket.bt_obex_send_file(address, channel, arquivo_foto) appuifw.note(u"Foto enviada!", "info") else: appuifw.note(u"Dispositivo não preparado.", "error") def tirar_foto(): photo = camera.take_photo() canvas.blit(photo) photo.save(arquivo_foto) def quit(): app_lock.signal() canvas = appuifw.Canvas() appuifw.app.body = canvas appuifw.app.exit_key_handler = quit appuifw.app.menu = [(u"Tirar Foto", tirar_foto), (u"Enviar", enviar_foto)] app_lock = e32.Ao_lock() app_lock.wait()
  • 17.  RFCOMM (Radio Frequency COMMunication)  Protocolo Bluetooth para transmissão (RX e TX) de texto ou raw data Bluetooth
  • 18.  RFCOMM (Radio Frequency COMMunication)  Protocolo Bluetooth para transmissão (RX e TX) de texto ou raw data  Para scan de dispositivos RFCOMM: Bluetooth import socket endereco, servicos = socket.bt_discover() print endereco,servicos
  • 19. Bluetooth  Fazendo um CHAT – Lado Servidor import socket, appuifw def chat_server(): server = socket.socket(socket.AF_BT, socket.SOCK_STREAM) channel = socket.bt_rfcomm_get_available_server_channel(server) server.bind(("", channel)) server.listen(1) socket.bt_advertise_service(u"NossoChat", server, True, socket.RFCOMM) socket.set_security(server, socket.AUTH | socket.AUTHOR) appuifw.note(u”Esperando Conexão”) conn, client_addr = server.accept() appuifw.note(u”Conectado!”) talk(conn, None)
  • 20. Bluetooth  Fazendo um CHAT – Lado Cliente def chat_client(): conn = socket.socket(socket.AF_BT, socket.SOCK_STREAM) address, services = socket.bt_discover() if 'NossoChat' in services: channel = services[u'btchat'] conn.connect((address, channel)) appuifw.note(u”Conectado!”) talk(None, conn) else: appuifw.note(u"O celular não está rodando o chat.", "error")
  • 21. Bluetooth  Fazendo um CHAT – Comum def receive_msg(fd): print "Esperando a mensagem.." reply = fd.readline() print "Recebido: " + reply appuifw.note(unicode(reply), "info") def send_msg(fd): msg = appuifw.query(u"Envie:", "text") print "Enviado: " + msg print >> fd, msg def talk(client, server): try: if server: fd = server.makefile("rw", 0) receive_msg(fd) if client: fd = client.makefile("rw", 0) while True: send_msg(fd) receive_msg(fd except: appuifw.note(u"Desconectou", "info") if client: client.close() if server: server.close() index = appuifw.popup_menu([u"Servir", u"Conectar"]) if index != None: if index: chat_client() else: chat_server()
  • 23. Networking  Maneiras de acessar servidores  Computação Distribuída  Módulos de Acesso  httplib, urllib (core)  json.py (Patric Logan)  http://meu-ip/json.py
  • 24. Networking  Fazendo um simples download import urllib url = “http://pagina/arquivo.html” arquivo = “C:Dataarquivo.txt” urllib.urlretrieve(url, arquivo)
  • 25. Networking  Comunicando-se através de POST  Lado Cliente (Celular) import httplib, urllib, appuifw def senddata(): params = urllib.urlencode({'data': "Flavio"}) headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "text/plain"} conn = httplib.HTTPConnection("www.flavioribeiro.com") appuifw.note(u'Espere...') conn.request("POST", "/exemplo.php", params, headers) response = conn.getresponse() uniresponse = unicode(response.read()) conn.close() appuifw.note(uniresponse) senddata()
  • 26. Networking  Comunicando-se através de POST  Lado Servidor (PHP!) <?php $data = $_REQUEST['data']; $filename = 'textfile.txt'; $handle = fopen($filename, 'a+'); $text="n"; fwrite($handle, $data); fwrite($handle, $text); echo 'Post com Sucesso!'; fclose($handle); ?>
  • 27. Série 'Network Programming for s60' do Marcelo Barros http://croozeus.com/
  • 29. Camera  Módulo responsável por interação direta com a(s) camera(s)  Alguns métodos:  cameras_available()  image_modes()  flash_modes()  max_zoom()  take_photo()
  • 30. Camera  ViewFinder  Feedback pro usuário sobre a posição da imagem
  • 31. import camera, appuifw, e32 def viewfinder(img): canvas.blit(img) def quit(): camera.stop_finder() lock.signal() appuifw.app.body = canvas = appuifw.Canvas() appuifw.app.exit_key_handler = quit camera.start_finder(viewfinder) lock = e32.Ao_lock() lock.wait() Camera  ViewFinder  Feedback pro usuário sobre a posição da imagem
  • 32. Camera  camera.take_photo()  Retorna um objeto graphics.Image import camera foto = camera.take_photo() foto.save(“C:Imagesfoto.jpg”)
  • 34.  Módulo responsável por informações do sistema  sysinfo.battery()  Retorna o nivel da bateria (entre 0 e 7)  sysinfo.imei()  Retorna o número de identificação do celular  sysinfo.active_profile()  Retorna o perfil utilizado no momento (Silencioso, Reunião, etc)  sysinfo.display_pixels()  Retorna o tamanho da tela em pixels (muito importante) Sysinfo
  • 35.  Módulo responsável por informações do sistema  sysinfo.free_drivespace()  Retorna o espaço livre em bytes em cada drive  {u'C:': 58463232, u'D:': 9494528, u'Z:': 0}  sysinfo.total_ram()  Retorna o tamanho da memória RAM  sysinfo.free_ram()  Retorna a memória RAM livre  sysinfo.signal_bars()  Retorna o sinal da antena (de 0 a 7)  sysinfo.sw_version()  Versão do firmware Sysinfo
  • 37.  Várias funções em um só arquivo  Arquivo: operacoes.py  Funções:  soma(x,y)  subtrai(x,y)  divide(x,y) Namespace e Dicas de um projeto Python import operacoes operacoes.soma(10,20) operacoes.divide(100,2)
  • 38.  Várias Classes em um só arquivo  Arquivo: funcionarios.py  Classes:  Presidente  Diretor  Estagiario Namespace e Dicas de um projeto Python import funcionarios flavio = funcionarios.Estagiario() lucas = funcionarios.Presidente() flavio.trabalha() lucas.toma_cafe()  Métodos  trabalha()  toma_cafe()
  • 39.  Várias Classes em um só arquivo (Exemplo II)  Arquivo: funcionarios.py  Classes:  Presidente  Diretor  Estagiario Namespace e Dicas de um projeto Python from funcionarios import * flavio = Estagiario() lucas = Presidente() flavio.trabalha() lucas.toma_cafe()  Métodos  trabalha()  toma_cafe()
  • 40.  Pacotes  Pasta: conexoes/  Arquivo __init__.py (vazio)  Arquivos:  bluetooth.py → Classes Server e Client  wireless.py → Classes AccessPoint e Client Namespace e Dicas de um projeto Python import conexoes.bluetooth import conexoes.wireless bt = conexoes.bluetooth.Client() wifi = conexoes.wireless.AccessPoint()
  • 41.  Pacotes (Exemplo II)  Pasta: conexoes/  Arquivo __init__.py (vazio)  Arquivos:  bluetooth.py → Classes Server e Client  wireless.py → Classes AccessPoint e Client Namespace e Dicas de um projeto Python from conexoes import bluetooth bt = bluetooth.Client()
  • 42.  Pacotes (Exemplo III)  Pasta: conexoes/  Arquivo __init__.py (vazio)  Arquivos:  bluetooth.py → Classes Server e Client  wireless.py → Classes AccessPoint e Client Namespace e Dicas de um projeto Python from conexoes.bluetooth import Server bt = Server()
  • 43.  Dicas:  Crie uma pasta pra seu programa:  Deixe uma pasta do seu programa para os códigos (src)  Deixe outra pasta para Arquivos no geral (files)  Crie outras necessárias Namespace e Dicas de um projeto Python import os, os.path PATH = u”C:DataMinhaAplicação” if not os.path.exists(PATH): os.makedirs(PATH) import os, os.path Sources = u”C:DataMinhaAplicaçãosrc” if not os.path.exists(Sources): os.makedirs(Sources)
  • 44.  Dicas:  Coloque a pasta de códigos no seu Python Path Assim ele será visível e poderá ser incluído nos seus códigos. Namespace e Dicas de um projeto Python import sys Sources = u”C:DataMinhaAplicaçãosrc” sys.path.append(Sources)