Há algum tempo por fins de experimentos no meu mestrado, eu desenvolvi um cliente para consumir a API do Foursquare em Python. O nome do projeto é PyFoursquare e está hospedado como projeto open-source no Github.
Recentemente um amigo me perguntou se era possível fazer o processo de autenticação/login via web em vez de ser realizado via console. Ainda não era! Mas então aceitei o desafio e após 2 horas construi uma aplicação web bem simples usando python + django + foursquare + pyfoursquare :D
Para aqueles que procuram algum guia ou exemplo este pode ser um excelente ponto de partida.
Para usar é muito simples:
Crie uma aplicação no Foursquare e obtenha seu Client ID e seu Client Secret. É importante que a url de callback seja agora a url local da sua máquina de desenvolvimento ( no meu caso como uso django a url padrão é o http://localhost:8000/callback )
Uma observação importante é que o formulário de validação não permite usar o caractere ':' na sua url de callback. Mas uma vez que sua app esteja registrada, você pode editar a url e adicionar o :8000, visto que o formulário não valida a atualização. A sua url irá ficar como algo abaixo:
Agora basta acessar os exemplos disponíveis na pasta examples/django. Ele já fornece toda a app pronta em django com algumas views, algumas páginas simples html , uma para login e uma para quando estiver logado.
O que você precisa fazer é, primeiramente rodar o comando abaixo:
python manage.py syncdb
Feito isso ele criará algumas tabelas para armazenar as sessões das requisições da sua app web. Isto será armazenado em um mini-banco de dados local que Python suporta nativamente em Sqlite3 :D
Agora abra o settings.py e adicione no final do arquivo os campos:
Se você abrir o arquivo djfoursquare/views.py , você verá toda a lógica relacionada ao processo de autenticação utilizando já a api do PyFoursquare com OAuth2 .
Vamos agora rodar o servidor web com:
python manage.py runserver
Abra seu browser na página http://localhost:8000
E é isto pessoal, uma simples app web com uma simples autenticação OAuth com Foursquare usando a biblioteca PyFoursquare. O código está completo no github se quiser dar uma olhada mais profunda!
A outra palestra foi sobre PyFoursquare, que é uma biblioteca em Python para acesso à API da rede social de localização móvel Foursquare. Apresentei as principais características da biblioteca em desenvolvimento e futuros release. Projeto open-source sobre licença MIT.
Estou disponibilizando os slides da segunda parte do curso de residência do reuso da empresa RISE focado em frameworks web. Na primeira parte apresentei sobre o Python + Django e nesta explorei algumas apps práticas usando o Django como a instalação de apps terceiras na sua aplicação web, a instalação do projeto Pinax (para construção de Redes Sociais) e por a construção de API's REST por meio do Django-Piston.
Acredito que o público gostou do curso e do conteúdo absorvido :) Muitos comentários positivos com o primeiro contato com Django. Estou agora aguardando o feedback por meio dos projetos que o pessoal irá desenvolver usando o Django :D Vamos aguardar!!
Estive lendo alguns blogs sobre geo-localização e serviços móveis e acabei encontrando um post muito interessante no site TechCrunch do Robert Scoble (um popular reporter nos EUA). Ele fala sobre a experiência atual com sistemas de localização e comentar suas previsões para 2012 sobre este cenário.
Eu gostaria de replicar estas informações e adicionar alguns comentários em especial relacionados ao nosso cenário brasileiro. Atualmente, estamos sofrendo da era de silos da informação. O que seriam silos da informação ? Cada vez mais novos serviços web estão aparecendo, porém nenhum deles se comunicam entre si a fim de permitir a oferta de serviços personalizados para o nosso dia-a-dia. Ou seja, os serviços hoje são como uma caixa-preta onde os dados ficam expostos por meio de uma API (sim ainda há uma comunicação), mas não há uma interligação entre um serviço de uma empresa A com um serviço de uma empresa B.
Vou dar um exemplo real: Hoje temos o Twitter que é uma das maiores redes sociais em formato microblog do mundo e temos o maior sistema popular de localização-móvel em formato de rede social o Foursquare. Ambas hoje estão permitindo que você possa geo-referenciar o seus posts ou geo-referenciar aonde você está (por meio de check-ins). Entretanto, cada serviço tem a sua maneira, a sua base de dados individual com tais informações. Ou seja, eu terei que localizar o lugar no twitter (Se este estiver cadastrado lá) e depois lançar o post geo-referenciado e torcer para que no Foursquare, ele tenha o mesmo nome (ou também esteja cadastrado) e aí poder dar finalmente o check-in no Foursquare. Entendem o problema? Duas bases de dados com as mesmas informações únicas geo-referenciáveis do mesmo local. São verdadeiros silos de informação. E isto prejudica a todos usuários e até estas empresas que tornam serviços de localização móvel um empecilho para a adoção massiva desses serviços. E logicamente se quisermos sair desta era onde serviços web são como silos e partir para verdadeiras coleções (mashups) de informação útil é necessário uma maior integração.
Silos de Informação: Nossa Web hoje!
No Brasil, a cenário é ainda um pouco mais complicado. Digo isso porque ainda é exorbitante o preço para um simples usuário por meio do seu telefone poder acessar a internet, isso associado ao fato de ele tenha que saber que tem GPS no seu aparelho ou até saber como usar. Estou sendo um pouco radical, mas eu falo da maioria da população. É lógico que temos vários grupos de usuários que tem acesso a toda essa tecnologia, e é o que está movimentando o mercado brasileiro de aplicativos móveis. Mas esse post vai além disso, o que irei transcrever aqui agora o que pode ser no Brasil em um futuro não distante.
O codinome para esta aplicação fícticia batizo de projeto Caranguejo (em homenagem aos animais tipicamente brasileiros encontrados em especial no litoral brasileiro).
Imagem do Aplicativo Siri
"Estou em janeiro de 2012 e estou com meu novo aparelho celular Android 3.0 que comprei pela operadora X com 3G ilimitado. Eu entrarei de férias no meu trabalho e tenho uma viagem hoje mais tarde e preciso pegar coisas na lavanderia e uma reunião de emergência com um colega para entrega de alguns trabalhos. Abro meu telefone e acesso o aplicativo instalado no meu aparelho 'Caranguejo'. Este aplicativo é uma mão na roda para mim, praticamente minha secretária eletrônica direto do meu aparelho, ou como chamo na linguagem científica: Meu assistente móvel virtual personalizado.
Assim que aciono o aplicativo, ele já começa a me enviar alertas me lembrando da reunião com o meu colega por meio da integração com o Google Agenda e que preciso pegar coisas na lavanderia (atividade) por meio dos alertas do Remember the Milk . Claro e ainda consulto se o vôo de mais tarde está tudo ok por meio de uma integração nova do Caranguejo com as informações dos vôos por todo Brasil por meio da Infraero em tempo real. Ok, após checado tudo, é hora de fazer a primeira atividade do dia, ir até a lavanderia. Assim que saio de casa, o Caranguejo (sabendo onde estou já por meio da integração do Foursquare e por meio da minha agenda) já me envia um alerta: 'Eu vi que você já saiu de Marcel's house, você poderia me avisar para aonde você está indo ?' O Caranguejo já vem integrado com a funcionalidade voz-para-texto, então eu digo ao meu telefone: 'Eu irei para lavanderia MIX pegar minhas roupas.' Isto faz com que o Caranguejo automaticamente abra uma pequena caixa com o nome do local, telefone, endereço e um pequeno mapa com a posição da lavanderia marcada. Ele pergunta: 'Você está indo para aí ?' Eu respondo: 'Sim'. Ele automaticamente já abre um pequena caixa com minha posição atual e como faço para chegar até lá por meio da integração com o Google Maps. Ele pergunta: 'Você irá de carro, de ônibus ou à pé ?' Dessa vez como a lavanderia é perto, decido ir de ônibus. Ele já se comunica com o serviço do ÔnibusRecife e já me traz informações do ônibus, paradas e onde tenho que descer e o custo da passagem. Após chegar ao local, o Caranguejo já faz o check-in no Foursquare do local automaticamente. Após pegar tudo, me bate uma fome e decido tomar um cafézinho, mas para onde ir ? Ou melhor, será que tem uma cafeteria por aqui perto ? Pego meu telefone e já aciono o Caranguejo: 'Eu gostaria de uma cafeteria por aqui perto'. O Caranguejo já sabendo onde estou por meio das APIs do Foursquare e do Google Latitude e por meio de uma pesquisa em serviços parceiros como Guia da Veja , ObaOba, Kekanto; começa a processar a lista de recomendações e compara um a um o meu histórico no Foursquare e Reviews do mesmo e também com minha posição atual. Esse cruzamento de informações em tempo real, resulta em o o sitema me falando: 'Encontrei 1 Cafeteria São Braz há 12 km daí e o Café Delta há 8 km daí. ' (Já sabendo que frequentei muito mês passado a cafeteria São Braz e também que marquei excelente o serviço do café Delta), e ainda continua: 'Se você deseja tentar outra opção do que suas 2 escolhas comuns ou se você precisa de alguma opção diferente, me avise'. Eu já vendo o relógio, penso que vai ser difícil chegar a tempo na reunião, então desisto de ir para a cafeteria. Café vai ficar para outra hora!
Mais uma vez o Caranguejo lança um alerta: 'Hoje você tem uma reunião hoje de meio dia com Ricardo, faltam 1 hora.'. Eita não posso esquecer desta reunião, volto para casa e já começo a me trocar. Assim que saio o Caranguejo me pergunta: 'Você ainda vai ter a reunião com Ricardo no Sppetus à 12:00 pm ?' Eu respondo: 'Sim'. Diretamente o Caranguejo já consulta sites de reviews do restaurante (Kekanto, Google Maps e VejaRestaurantes) e me avisa que é um excelente restaurante e bastante refinado. O Caranguejo já me dá o telefone do local (infelizmente ainda não há uma API para reservas via celular) e eu disco já confirmando minha reserva. Eu também coloco um uma roupa mais sofisticada e parto de carro para o restaurante.Assim que parto, mais uma vez o Caranguejo confirma para onde estou indo e que transporte irei tomar e já consulta a API do trânsito do Recife para me informar que eu não devo pegar a avenida Agamenon Magalhães (parte da rota informada pelo Google Maps) e já me dá outra rota alternativa e que vai demorar 40 minutos para chegar. Quando estou no carro aparece 3 mensagens no Caranguejo com alguns amigos postando via Twitter me perguntando se eu irei mais tarde para o cinemar ver o filme 'Homem de Ferro 2'. Já mando um reply via caranguejo pro voz avisando que não poderei comparecer, pois viajarei. Não esquecer também que o Caranguejo já consultou minha agenda telefônica e já mandou um SMS para o Ricardo avisando que estou à caminho.
Chegando no local e mais uma vez o Caranguejo já marcando no Foursquare o Sppetus, ele me avisa: 'Há 45 pessoas que estão por aqui e 2 deles são seus amigos' (Ele já consultou o número de usuários no Foursquare e também já procurou por amigos que deram check-in naquele momento). Vejo pelos detetalhes que um deles é o Ricardo. Ele já chegou! Depois de conversarmos sobre projetos e trabalho, volto para casa.
Há algumas horas do vôo, o sistema me avisa que o vôo está próximo de chegar em Recife (Já consultando informações da Infraero). Já me direciono ao Caranguejo e pergunto: 'Gostaria de pegar um táxi para o aeroporto'. O Caranguejo já busca em páginas web sobre possíveis empresas de táxi e me dá um conjunto de opções para escolha. Decido a 'fast' que oferece o pagamento mediante cartão de crédito. Já ligo e agendo o táxi!
Chegando no aeroporto, o Caranguejo já me informa que o vôo que irei pegar embarca as 18:30. Me envia já o meu código de embarque que armazenei no meu Remember the Milk. Faço check-in mas ainda dá tempo para tomar um cafézinho, mais uma vez Caranguejo já me dando as melhores opções, e me alertando que se eu for na Cafeteria Doce Nordestino e der um check-in lá ganho 15% de desconto no café ou tenho a opção de ir à Cafeteria Dengoso que por meio do ZIPME se eu comprar um voucher por meio de compra coletiva, ganho 20% de desconto. Decido ir ao Dengoso e depois de tomar um cappuccino adiciono um review para este novo restaurante que o Caranguejo me informou dando 5 estrelas com o comentário: Excelente cappuccino! .
Eita o meu vôo! Antes de partir meu Caranguejo informa que alguns amigos já me deram boa viagem via Twitter e eu mando postar no Twitter : 'Partindo para São Paulo!'. É hora de desligar o caranguejo e o aparelho, ansioso porque ele vai ser extremamente importante em São Paulo, onde é um mundo desconhecido para mim!'
Pois é pessoal, este é apenas um depoimento de um cenário hipotético no futuro de um aplicativo que toma a forma de um assistente pessoal virtual inteligente direto do meu telefone. Logicamente hoje isso seria inviável ainda porque grande parte desses serviços mencionados acima não oferecem APIs de acesso, e quando oferecem funcionam como SILOS totalmente isolados um do outro.
É preciso que a informação seja ubíqua ou seja compartilhada. Os serviços precisam estar em comunicação e cientes uma das outras. Se eu vou à algum lugar aciona serviços como Foursquare, Twitter e serviços de mapa como Google Maps e informações de trânsito de sites locais. Este cenário ainda está longe de existir, em especial no Brasil onde as informações ainda estão brutas em páginas HTML.
Percebi que menos de 10% das empresas mencionadas acima oferecem uma API para acesso dos seus dados, que seria um belo início. Ainda não temos aplicativos inteligentes que funcionem como agentes que me alerte, recomende e que mantenha minha rede de contatos sempre disponível.
Sim, estou falando de um agente onisciente rodando em meu aparelho celular. O Caranguejo, o único em qualquer lugar à sua disposição.
Ah, antes de finalizar este post dêem uma olhada neste projeto e neste vídeo. Entendem agora porque no Brasil estamos ainda longe para atingirmos isso ?!
Pois é , acabei de lembrar que preciso dar um check-in no Foursquare que estou em casa e ainda consultar minha agenda no Google Agenda para saber meus compromissos de amanhã.
Viva a Web 2.0!
PS: Agradecimentos especiais ao amigo Ricardo Caspirro, por discutirmos e amadurecermos sobre esses projetos a desenvolver.
Gostaria de publicar a contribuição do colega Richard Matovu (@matrich) ao meu projeto PysChart que foi um dos meus primeiros projetos open-source envolvendo Python e computação móvel. O projeto foca em disponibilizar um pequeno framework para construção de gráficos em aplicações para dispositivos móveis Symbian S60 (Ex: N95, N73, 5800 XM, E71, etc.)
Esta biblioteca foi construída em meados de outubro de 2008, fruto de um projeto o qual eu utilizei tal biblioteca para construção de gráficos de linha. O mais interessante é que o Richard me procurou, e ele da Uganda na África, para utilizar o framework e também fazer umas melhorias! O resultado está lá no site oficial do projeto hospedado no Google Project, o qual você pode agora construir gráficos de linha com mais de uma série! Sensacional!
Quem quiser conhecer mais sobre o projeto e quiser utilizá-lo ou modificá-lo, visite o site oficial do projeto PySChart. Ele roda sobre o runtime do Python para celulares Symbian S60: o PyS60.
O que mais me impressiona, é a convergência de pessoas que a cultura open-source promove. Nunca se sabe quais pessoas ao redor do mundo podem estar usando coisas que você desenvolveu! E o mais legal a interação que você tem com essas pessoas. Recomendo a todos a criarem projetos se possível open-source, você pode conhecer várias pessoas e receber contribuições ao seu projeto de diversas formas! Está aí a prova!
Quem quiser saber mais sobre o depoimento do Richard sobre o PysChart, clique aqui.
Gostaria de divulgar mais um pequeno projeto oriundo de um projeto maior que eu ando desenvolvendo para apresentar II Encontro de Software Livre aqui de Pernambuco. Pois é! Irei dar uma palestra sobre Python lá, mas isso é assunto para um outro post específico!
Então, desenvolvi uma biblioteca em Python, especificamente em PyS60 (Python for Symbian) o qual permite o desenvolver construir mapas com suporte à geolocalização para exibição nos smartphones Symbian como N95, N96, N82, E61, E63, N73, E71, etc.
A biblioteca utiliza a comunicação com o Yahoo Maps REST API. Através da comunicação por meio do protocolo REST e intercâmbio de arquivos XML, consigo obter a imagem do mapa com a possível localização definida pelo usuário.
Não só coordenadas, como também passando como parâmetro o endereço do local é possível obter uma localização aproximada do usuário! Dêem uma olhada nos screenshots da demonstração abaixo:
Se vocês quiserem saber mais sobre a aplicação, e inclusive fazer o download para usá-la em suas aplicações dêem uma olhada no site do Wiki Forum Nokia (em inglês):
Estou aqui para divulgar que a versão da biblioteca para upload de fotos ao serviço TweetPhoto está disponível agora para celulares Symbian S60. Para isso é necessário que você tenha o runtime/interpretador do Python (PyS60) instalado no seu aparelho.
Para usá-lo, basta adicionar a biblioteca no diretório da sua aplicação e importá-lo no código-fonte da mesma pelo comando:
from s60tweetphoto import *
e usar os métodos disponíveis para envio de fotos ao TweetPhoto/Twitter. O mais legal é que você pode também enviar as coordenadas (posição geográfica) junto à foto caso sua aplicação capture as coordenadas do GPS ou outro serviço de localização. Isto é , sua foto agora geolocalizada!! Já fiz um pequeno exemplo de como fazer isso, mas isso é assunto para outro post!
Para download da biblioteca visitem o site do projeto:
Gostaria de divulgar mais um novo projeto open-source que eu desenvolvi para upload de fotos ao Twitter. Desta vez, construí uma biblioteca em python para acessar a API do serviço de armazenamento de fotos TweetPhoto e assim podendo fazer upload de fotos ao web service.
O mais legal do TweetPhoto é a possibilidade de adicionar tags à imagem, escrita de mensagem junto à imagem (que será postada junto com o link no Twitter) e até a possibilidade de enviar as coordenadas (geolocalização) de onde foi tirada
a foto! Muito legal! Tudo isso podendo o usuário solicitar ou não o envio da foto também ao Twitter com todas essas funcionalides integradas.
O nome do projeto se chama python-tweetphoto. Ele é atualmente open-source e pode ser executado em quaisquer plataformas com runtime do python.
Em breve estarei disponibilizando também um porting da biblioteca para PyS60 (Python para celulares Symbian S60), permitindo que os desenvolvedores criem aplicativos para upload de fotos tiradas diretamente do celular ao Twitter.
Quaisquer dúvidas, sugestões ou críticas entrar em contato!
Achei uma demonstração bem legal do Java Sensor API com os acelerômetros embutido no Nokia N97 . A Demonstração foi gravada em vídeo durante o Nokia Developer Summit. O vídeo consiste em controlar um carro de controle remoto através do aparelho, utilizando apenas movimentos sobre o aparelho para acelerar, freiar e fazer curvas sobre o carro.
O Java Sensor API dá o poder para apliações java de obter informações sobre a orientação do aparelho. Logo, com tais sinais pode se controlar o carro através destes sinais por transmissão bluetooth (Java Bluetooth API) .
Ótima notícia para os desenvolvedores, especialmente fãs do Nokia Maps. Ela disponibilizou uma API para que os desenvolvedores integrem seus aplicativos com os mapas disponibilizados pela Nokia !