Mostrando postagens com marcador artigo. Mostrar todas as postagens
Mostrando postagens com marcador artigo. Mostrar todas as postagens

Aplicativos envolvendo CrowdSourcing e Geolocalização

Mais novos aplicativos estão surgindo nesta nova onda de popularização do movimento de crowdsourcing e  geolocalização.   Desde o último evento realizado em Nova York pela TechCrunch: Techcrunch Disrupt , descobri 2 startups muito interessantes e que tem tudo haver com um dos principais tópicos do meu interesse nesta área de mobilidade: a descoberta por conteúdo e sistemas colaborativos de perguntas e respostas.

Uma delas é o Sonar, uma app desenvolvida para telefones móveis onde o objetivo dela é permitir que os usuários possam saber quem está ao seu redor. A idéia é simples mas matadora, ela procura por outros usuários ao seu redor em um determinado local e cruza as informações do seu perfil com os perfis destes usuários por meio das redes sociais que vocês tem em comum: Twitter, Facebook, Linkedin, etc. e retorna uma lista de usuários com os interesses em interseção de maior relevância.  Ou seja, imagine você está em uma conferência e gostaria de se apresentar para um guru que você sempre quis conhecer... Com o Sonar, se ambos estiverem usando a app, ela  cruza as informações de ambos e informa quantos amigos vocês tem em comum no Facebook, Twitter, etc.  Ou seja o problema de timidez na apresentação se acaba, pois você pode mandar via Sonar uma mensagem direto para aquele usuário! :D

Estou pensando em até construir algo assim para o evento do PythonBrasil deste ano, quem sabe?!  :D


Sonar Mobile App

O conceito mais legal desta aplicação é o uso de mashups de várias redes sociais para a descoberta e apresentação de pessoas em um determinado lugar, uma espécie de cartão de visitas só que social. 

Recomendo assistirem o vídeo da apresentação deles na final da batalha de startups do Techcrunch Disrupt para mais informações.


A outra aplicação que eu acabei encontrando muito legal foi o Gootip. Esta app me lembrou bastante de uma aplicação que meu colega brasileiro Yuri Malheiros está desenvolvendo chamada Norteie.me :D O sistema é um site colaborativo de perguntas e respostas usando localização móvel. Ele utiliza as APIs do Google Places, onde os usuários podem perguntar e responder perguntas sobre um determinado lugar. É uma mistura de Yelp com Quora,  onde usuários podem buscar por perguntas similares, categorizar perguntas e restringir respostas até um determinado tempo (ser um sistema em tempo real).

Gootip; Sistema colaborativo de Q&A sobre contexto móvel

Uma aplicação bem interessante que permite você buscar informações sobre um determinado local em tempo real onde pessoas que estão lá ou que já foram podem ajudar na busca por respostas. Esta app me lembrou muito de uma outra que está em desenvolvimento: Localmind que já até inclusive falei sobre ela em meu blog.

O que me desperta e chama atenção nesta geração de aplicativos é o interesse cada vez maior pela maior integração com redes sociais como uma espécie de agregador de redes onde informações são cruzadas usando o poder da geolocalização e serendipidade para recomendação de novos produtos, locais, serviços e até futuros parceiros e amigos! 

Meus artigos sobre este assunto aqui e aqui.

Vamos ficar de olho nesta tendência!

Atenciosamente,

Marcel Caraciolo
Olá a todos,

Poucos conhecem esta classe escondida em Python, mas que tem me ajudado bastante na construção de pequenos parsers e analisadores léxicos em alguns projetos que estou trabalhando. Estou falando do módulo "re", responsável pelo uso de expressões regulares em códigos Python cuja uma das classes  não documentadas oficialmente, o Scanner  pode nos auxiliar nestas tarefas.

A classe Scanner ainda não documentada oficialmente por estar ainda em experimentação pode ser bastante útil no processo de tokenização de textos, uma fase de pré-processamento importante em mineração de textos.

O seu uso é bastante simples, basta passar como parâmetro uma lista de expressões regulares e suas respectivas funções callback. Quando uma string é "casada", a mesma é convertida em um respectivo token por meio da chamada da função callback associada e assim adicionada à uma lista de tokens a serem retornados. Se o scanner atinge um ponto em que não há um token a ser "casado",  o mesmo retorna a lista de tokens identificados até aquele ponto e o restante do texto em string que não foi casado.

Vamos a um exemplo prático!  Um dos cenários para o seu uso é os tweets espalhados pelo microblog social Twitter.  Se quisessémos construir um simples analisador léxico para separar links, hashtags, usernames e texto poderíarmos fazer de diversas maneiras. Entretanto com a classe re.Scanner esta atividade torna-se bem mais eficiente e rápida visto que ela já abstrai ao desenvolvedor a necessidade de implementar um analisador que varre as strings à busca de expressões regulares definidas pelo desenvolvedor.

Então se montarmos nosso scanner para extrair dados do twitter conforme a figura abaixo:

Exemplo de Extrator de Tweets

E executá-lo, veremos como resultado:

Resultado do Scanner

Podemos observar pela figura acima que após executar nosso pequeno parser, conseguimos extrair com sucesso os tokens relacionados a Retweets, nomes de usuários, palavras, HashTags e até URl's . Para quem trabalha com processamento de linguagem natural (NLP) isto pode ser uma útil ferramenta para a fase de pré-processamento em mineração de textos.

Com isso concluo a apresentação da classe Scanner escondida na biblioteca padrão que vem ao Python.
Quem não entender muito o que vem nessas strings que começam com  r'', visite meu post sobre expressões regulares, pode ser útil para quem está começando!

Espero ter ajudado pessoal,

Atenciosamente,

Marcel Caraciolo

Referências:

Olá pessoal,

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.
Olá pessoal,

Publiquei no meu outro blog sobre Mineração de Dados e Inteligência Articial (http://aimotion.blogspot.com)  sobre meu novo projeto que estou desenvolvendo para obtenção do título de mestre em ciência da computação pela UFPE (Universidade Federal de Pernambuco).  Eu dou um breve resumo sobre os desafios, motivação e proposta para desenvolvimento de um sistema de recomendação inteligente focado em mídias móveis.

O resumo está em inglês, mas quem estiver interessado em ler e discutir comigo sobre alguns aspectos e críticas sobre esta proposta. Se sintam à vontade!!  



Áreas do conhecimento: Mineração de Dados,  Sistemas de Recomendação, Mídias Móveis, Web Services, Geolocalização, SOA, Middleware, Redes Sociais, Microblogs, Inteligência Coletiva e Aprendizagem de Máquina.

Atenciosamente,

Marcel

Olá pessoal,
Estou divulgando mais um artigo meu publicado no Wiki Forum Nokia sobre o uso do serviço TwitPic para upload de fotos para telefones Symbian S60. Desenvolvi uma biblioteca API em Python (especificamente suportada em telefones PyS60), para que suporte telefones Symbian, assim podendo postar fotos diretamente do telefone ao Twitter.


O artigo está em inglês, e também vem junto com uma pequena aplicação demonstração que eu desenvolvi que permite o usuário postar fotos tiradas da câmera do seu telefone diretamente ao serviço TwitPic.




Recomendo a leitura!


Algoritmos evolucionários pervasivos em dispositivos móveis

Olá pessoal,

Estive essa semana aproveitando alguns intervalos livres para ler alguns feeds de blogs de Inteligência Artificial que acompanho. Uma das novidades que me chamou bem atenção foi a execução de algoritmos inteligentes de forma computacionalmente distribuída. Irei dar um simples exemplo:

Um dos projetos aceitos em um congresso internacional na Espanha (International Symposium on Distributed Computing and Artificial Intelligence 2009 - DCAI ) foi o desenvolvimento de um framework de computação de distribuída por meio de aparelhos móveis através de comunicação via sem fio Bluetooth. A idéia do projeto é desenvolver uma API em JavaME disponibilizando um ambiente de computação distribuída com uso de camadas, cliente-servidor e arquitetura de comunicação assíncrona entre os dispositivos. Na prática, eles solucionaram alguns problemas bem conhecidos na literatura de computação evolucionária (O problema do Caixeiro Viajante e o problema de maximização de funções de onda).

O mais interessante é que eles usaram aparelhos móveis reais para executar os experimentos a fim de solucionar os respectivos problemas. De acordo com os autores, a parte mais difícil foi encontrar aparelhos que tivesse a pilha de protocolos Bluetooth funcionando corretamente. A figura abaixo ilustra o experimento em execução:

2 aparelhos Nokia em execução

Achei muito interessante a idéia, especialmente este campo de sistemas distribúidos com computação inteligente. Imagine se cada telefone nosso fosse um agente inteligente e as conexões fossem as conexões sem fio através de WiFi, Bluetooth, etc. Imagine uma rede de varios telefones interconectados processando informações em paralelo. Agora dimensione isso para mais de 150 milhões de aparelhos rodando em paralelo. Uma mega infra-estrutura de computação distribuída pervasiva portátil e móvel! Incrível não ?? Quem sabe não ouviremos isso num futuro próximo. Por sinal, tive até a idéia de portar minha implementação de algoritmos de inteligência de enxame para os aparelhos móveis. E não foi só eu que tive essa idéia, já existe já uma implementação de algoritmos genéticos rodando em aparelhos móveis (smartphones) solucionando problemas de otimização. O mais legal ainda criada por um brasileiro! Essa notícia deixo para um próximo post. ;D

Referências sobre o trabalho acima , ver o blog GeNeuraTeam.

Olá pessoal,

Estou desenvolvendo alguns aplicativos em Python para Symbian S60, e sempre encontro quando encontro algumas dificuldades durante o desenvolvimento, começo a catucar em fóruns, sites específicos, documentações para ajudar a dar uma direção para a solução do meu problema. Um dos problemas que enfrentei recentemente foi desenvolver um algoritmo simples que detectasse colisões entre dois objetos dentro de uma tela. Essa técnica é muito utilizada em jogos, especialmente para detectar quando queremos saber se nosso player atingiu o adversário ou atingiu um limite de um cenário, etc. Pois, após solucionado o problema, pensei: Porque não divulgar para outros, afim de ajudar o pessoal caso encontre o mesmo problema ? Seguindo esta filosofia, por sinal já fui aconselhado várias vezes pelo meu colega Felipe Andrade, de postar artigos no Wiki do Forum Nokia. Tomei finalmente, tardiamente, a decisão de escrever artigos que auxiliem na solução de problemas que enfrentei ou até que eu descobri e que possam ajudar outros.

Neste âmbito, estou aqui divulgando meu mini-artigo em inglês sobre como detectar colisões com Python para Symbian S60.

Segue o link:

Collision detection events with PyS60


Espero tornar este hábito agora bem comum!

SDN publica artigo sobre Motivos de usar o JavaFX

Para os interessados em JavaFX,

O Sun Developer Network (SDN) publicou um artigo sobre JavaFX. O tema do artigo é sobre porque razões você deveriar aplicar JavaFX Mobile em suas aplicaçãoes JavaME.

Para os intessados:

http://java.sun.com/developer/technicalArticles/javame/javafxmobile-javame/

[Artigo]: Aplicando conceitos de Inteligencia Artificial em jogos com Python S60!

Olá pessoal,

Finalmente estou de volta, quer dizer mais presente no meu blog, embora ainda com algumas atividades pendentes em questão.
Gostaria de anunciar mais um tutorial agora saindo do forno:

Como aplicar inteligência artificial em seus jogos com o teorema de jogos: o Algoritmo Minimax. Mas antes de entramos adentro sobre o que é o minimax. Você pode se perguntar o que isso tem haver com mobile ? Tudo! Vejam o porquê na introdução do artigo:

(...),

Eu estava escrevendo um pequeno tutorial de desenvolvimento de aplicativos móveis, e um dos aplicativos que utilizei como exemplo foi a c
onstrução de um simples jogo da velha, conhecido também como Tic Tac Toe. O jogo foi desenvolvido para ser jogado entre um jogador humano e um jogador controlado pelo computador. No exemplo que desenvolvi , os movimentos jogados pelo jogador controlado pelo computador são aleatórios, ou seja, não há uma lógica por trás das jogadas do PC e nem uma análise prévia das jogadas do adversário. A fim de tornar o algoritmo do jogo mais simples, tomei a decisão de fazer um algoritmo com movimentações aleatórias. Mas, pensei: "Eu poderia dificultar mais as coisas, e poderia aplicar conceitos básicos de inteligência artificial neste jogo, a fim de deixar o jogador controlado pelo computador mais desafiador!" .

E este é o foco deste artigo, irei utilizar o jogo da velha como base para aplicação de conceitos de inteligência artificial, especificamente, introduzir um dos clássicos teoremas de jogos: A
Teoria de decisão ou Minimax.


"Quanta coisa pode-se aprender com um simples jogo da velha."
(...)

O post foi publicado no meu outro blog "Artificial Inteligence in Motion" através deste link:

http://aimotion.blogspot.com/2009/01/aprenda-aplicar-inteligencia-artificial.html

Boa leitura!

[Update] : Este mesmo artigo será também postado em breve em versão inglesa/português no site do Wiki Forum Nokia! Fiquem de olho!
-

Olá pessoal,


Gostaria de divulgar um artigo por minha autoria em parceria com o site Devmedia (Famosa por publicações das revistas Java Magazine, WebMobile, etc.).
Estou participando do Primeiro festival de artigos da Devmedia, concorrendo a alguns prêmios.

Como venho trabalhado há alguns meses na plataforma Python S60, escrevi um tutorial introduzindo aos interessados em desenvolver na plataforma Symbian S60 (aparelhos smartphones da Nokia) aplicativos móveis com esta tecnologia.

Introdução à programação Python para celulares Symbian S60 - Parte 01


Este artigo está dividido em 2 partes. Esta é a primeira parte do artigo, e a segunda parte já está no forno!

Leiam, compartilhem, comentem, dêem seu feedback!

Atenciosamente,

Marcel
Artigo muito bom referenciado pelo site MobilidadeETudo.

Recomendo a leitura! (Especialmente para os desenvolvedores móveis que querem entender um pouco mais sobre o cenário de plataformas móveis para smartphones atualmente).

“A developer’s-eye view of smartphone platforms”
symbian
Para os interessados em saber mais sobre os smartphones da Nokia, especialmente para quem não conhece muito bem estes aparelhos ou para quem está em dúvidas sobre qua comprar, recomendo a leitura destes artigos escritos por Carlos E.Morimoto (Autor do famoso site Guia do Hardware.)

Recomendo! Exclarece bem as suas dúvidas em relação a esses smartphones!

O artigo foi dividido em duas partes, Capitulo 1 e Capitulo 2.

Fonte: N Possibilidades

Um estudo sobre convergência

Para os interessados sobre a história do mobile e principalmente sobre os principais marcos que mudaram a trajetória do aparelho celular (aparecimento da câmera, jogos, rádio FM, SMS, mobile-tv, ring-tone) vale a pena ler este artigo (um pouco grande), em inglês:

A Study in Digital Convergence: The Nokia Decade


Ah, o autor do artigo foca um pouco sobre os aparelhos Nokia e a evolução dos mesmos.

Boa leitura!
Se você está interessado em desenvolver aplicativos que envolvam parte de gráficos de baixo nível no Android, vale a pena dar uma olhada nessa apresentação em slides (em inglês) : ‘Filthy Rich Android Clients’. Foi elaborada por um dos desenvolvedores que trabalham na Google com o toolkit de interface gráfica do Android.

Boa leitura.

Artigos sobre JavaME

Olá a todos,

Estive um pouco ausente deste blog, mas pretendo retornar com mais afinco para atualização deste blog com informações sobre mobile, computação ubíqua e sistemas móveis.

Para iniciar, gostaria de divulgar alguns artigos interessantes publicados pelo Ricardo Ogliari no site da DevMedia sobre JavaME. Recomendo a leitura!


Qual a principal API opcional da Java ME?”
“Java DB e dispositivos móveis”

Mais informações, ver o blog do Ricardo: Mobilidade é Tudo.

Artigos Symbian Network Developer

Achei esse conjunto de artigos publicados esse mês pelo Symbian Developer Network.

1) A Arquitetura de aplicativos que combinam várias linguagens, inclusive com os pontos fracos e fortes.

2) Como integrar o Python S60 com o Flash Lite e C++ (Flyer Framework e Extensões com Symbian C++)

3) Como integrar o flash lite com o C++ ou Java (KuneriLite ou Jarpa)

4) Como extender WRT Widgets

Quero destacar os artigo 2 e 3 que teve o apoio do colega Felipe Andrade (I2 Tecnologia) que escreveu sobre o Flyer e o Jarpa!

Muito bom o material, recomendo para estudo!

Guia de práticas e padrões para desenvolvimento Mobile .NETmob

microsoftpatternsandpractices.gifPara os desenvolvedores .NET especialmente para a plataforma Windows Mobile, a Microsoft publicou um guia de 144 páginas: Mobile Application Architecture Guide. Esse guia provê uma visão geral e procedimentos para desenvolvimento de aplicativos na plataforma .NET. Embora seja focado especialmente em .NET, o seu conteúdo pode ser re-utilizado (padrões e práticas) em outros projetos mobile com outras tecnologias.

O público-alvo desse guia é desenvolvedores e arquitetos.

Os tópicos cobertos de acordo com o site, são:
  • Mobile Application Architecture
  • Design Considerations
  • Rich client vs thin Web client
  • Device types
  • UI
  • Authentication
  • Authorization
  • Caching
  • Communication
  • Configuration
  • Management
  • Data Access
  • Debugging
  • Logging
  • Porting
  • Deployment

Fonte: Mobile Development

[Artigo] : Redes Neurais - Perceptron de Uma camada

Olá a todos,

Gostaria de informar que irei escrever alguns posts em parceria com meu colega Luis Soares sobre idéias, tutoriais, artigos e notícias na área de inteligência artificial em geral. Claro que o tema mobile estará sempre envolvido, que é o foco desse blog.


Nesse primeiro artigo, estarei escrevendo sobre as Redes Neurais e algumas implementações simples desenvolvidas em Python. A minha idéia é montar um pequeno simulador que sairei portando implementações simples de conceitos relacionados à inteligência artificial para o celular Symbian S60. A escolha dessa plataforma é pelo fato de a mesma oferecer maior liberdade ao desenvolvedor com uma variade de plataformas de desenvolvimento. E também pelo fato que esse sistema operacional está presente em celulares inteligentes (smartphones), caracterizados pelo seu poder de processamento e memória acima dos celulares comuns.

Apresentando as Redes Neurais

O que são? - “São sistemas de processamento de sinais ou de informações, compostos por um grande número de processadores elementares chamados neurônios artificiais, operando de forma paralela e distribuída, de modo a resolver um determinado problema físico/computacional.”

Esquema! - (X1, X2, …, Xn) * (W1, W2, …, Wn) — F(x) — Y

Isso significa que uma Rede Neural, de um neurônio apenas, é um combinador linear que passa por uma função de ativação e dá um resultado Y, o mais interessante é que podemos programá-la para que ela dê o resultado que você deseje!

Com isso podemos fazer, dentre outras coisas, aproximadores de funções, associadores, classificação de padrões, predição futura, controle de sistemas, filtragem de sinais, compressão de dados, datamining, etc.

Redes Neurais podem ser de vários tipos, nesta parte básica vamos ver as mais simples, as Redes Neurais supervisionadas, que são treinadas (ou programadas) usando um conjunto de exemplos conhecidos, com atributos e respostas, e desta forma a Rede Neural “se acostuma” em dar os resultados desejados e passa a responder de acordo.

Programar uma Rede Neural é ajustar os valores do vetor W, de todos os neurônios, para que determinada entrada X, quando processada, resulte num valor Y desejado.

Eu irei começar com a mais simples redes neurais de todas, a Perceptron com apenas uma camada de neurônios e trabalhar sobre as diferentes arquiteturas e técnicas de aprendizado que eventualmente irão convergir para redes que podem prever tendências dos preços das ações de uma bolsa de valores, reconhecimento de padrões, processamento de linguagem natural, etc.

Todos os códigos serão escritos em python, e podem ser executados através do seu celular Symbian S60. No próximo post apresentarei a plataforma Python para celulares Symbian S60.

O Perceptron é o ancião de todas as redes neurais. Ela foi criada em 1957 nos laboratórios das forças militares por Frank Rosenblatt. O Perceptron é o mais simples tipo de rede neural diretas (Feedfoward) , conhecido como classificador linear. Isto significa que os tipos de problemas solucionados por esta rede neural devem ser linearmente separáveis. O que significa isso ? O gráfico abaixo ilustra facilmente o que ser um problema linearmente/não-linearmente separáveis em duas dimensões.

linearly separable linearly non-separable

Lineamente Separável.

Não linearmente separável.



A linha verde representa a separação entre duas classes de dados que uma rede está tentando classificar. Em três dimensões, isto seria representado por um plano, e em 4 dimensões ou mais por um hiper-plano. Há outros tipos de redes de neurais que pdoem solucionar problemas linearmente e não linearmente separáveis, que serão discutidas em futuros posts.

Para tentar resolver este problema, nós precisamos de uma rede representada pela figura abaixo.

single layer perceptron


Como vocês podem observar, cada nó de entrada (input) está diretamente conectado ao nó de saída (output). Ajustando os valores dos pesos (weight) que conectam tais nós , a rede é capaz de aprender.

Em uma simples demonstração, irei usar o conjunto de dados plotados no primeiro gráfico aqui apresentado como os dados de treinamento (conjunto de dados para treinamento). O conjunto de dados de treinamento será usado repetidamente como entrada para os nós de entrada (input) da rede neural, fazendo com que os pesos se ajustem até a rede neural atinja o desempenho e objetivo desejado, que é classificar um conjunto de dados linearmente separáveis.

Uma vez que a rede neural foi treinada, a aplicação irá acessar uma base de dados (diferente dos dados de treinamento) e irá provar que a rede neural aprendeu corretamente e tem a capacidade de generalização; ela pode encontrar respostas corretas mesmos quandos os dados de entrada estão incompletos ou quando a relação entre a entrada e a saída não é concreta.

O código abaixo mostra como isso foi realizado.

Um algoritmo simples

Este descreve apenas o funcionamento de um neurônio.



##################################################
# #
# Copyright 2008 Marcel Pinheiro Caraciolo #
# #
# #
# -- Perceptron Neural Net snippet code #
# -- Version: 0.1 - 12/12/2008 #
##################################################

#Snippet Neuron

from random import random

class Neuron:

def __init__(self,data,learningRate = 0.1):
self._learning_rate = learningRate
self._input,self._output = data
#Randomise weights.
self._weight = map(lambda x: x*random(), [1] * len(self._input))
#print self._weight
self._y = None
self._global_error = 0.0


def train(self,data):
self._input,self._output = data
#Calculate output.
self._y = self._sign(self._sum())
#Calculate error.
if self._error() != 0:
#Update weights.
self._adjustWeight()
#Convert error to absolute value.
self._global_error += abs(self._error())

def execute(self,input):
self._input = input
#Calculate output.
self._y = self._sign(self._sum())
return self._y


def _sum(self):
return sum(map(lambda x,y: x*y, self._input,self._weight))

def _sign(self,output):
if output < 0:
y = -1
else:
y = 1
return y

def _error(self):
return self._output - self._y

def _adjustWeight(self):
self._weight = map(lambda x,y: x + (y*self._learning_rate*self._error()),self._weight,self._input)

def getGlobalError(self):
return self._global_error

def resetGlobalError(self):
self._global_error = 0



E para executar o perceptron, que é o que irá apresentar os exemplos ao neurônio, temos:



##################################################
# #
# Copyright 2008 -Marcel Pinheiro Caraciolo- #
# #
# #
# -- Perceptron Neural Net snippet code #
# -- Version: 0.1 - 12/12/2008 #
##################################################


#Snippet Perceptron

from Neuron import *


class Perceptron:

def __init__(self,inputs,iterations=100):
self._inputs = inputs
self._refresh_inputs = list(inputs)
self._iterations = iterations
self._iteration = 0
self._neuron = Neuron(self._getRandInput())
self._train()


def _train(self):
while self._iteration <= self._iterations:
self._neuron.resetGlobalError()
self._refresh_inputs = list(self._inputs)
for i in range(len(self._refresh_inputs)):
self._neuron.train(self._getRandInput())
print "Iteration %d Error: %f" % (self._iteration, self._neuron.getGlobalError())
self._iteration += 1
if(self._neuron.getGlobalError() == 0.0):
break


def _getRandInput(self):
return self._refresh_inputs.pop()


def execute(self,input):
return self._neuron.execute(input)


def arange(self,start,stop=None,step=None):
if stop is None:
stop = float(start)
start = 0.0
if step is None:
step = 1.0
cur = float(start)
while cur <= stop:
yield cur
cur+=step

Execute as classes acima usando:




#main Logic

#Load sample input patterns
inputs = [ [[0.72, 0.82], -1], [[0.91, -0.69], -1],
[[0.46, 0.80], -1], [[0.03, 0.93], -1],
[[0.12, 0.25], -1], [[0.96, 0.47], -1],
[[0.8, -0.75], -1], [[0.46, 0.98], -1],
[[0.66, 0.24], -1], [[0.72, -0.15], -1],
[[0.35, 0.01], -1], [[-0.16, 0.84], -1],
[[-0.04, 0.68], -1], [[-0.11, 0.1], 1],
[[0.31, -0.96], 1], [[0.0, -0.26], 1],
[[-0.43, -0.65], 1], [[0.57, -0.97], 1],
[[-0.47, -0.03], 1], [[-0.72, -0.64], 1],
[[-0.57, 0.15], 1], [[-0.25, -0.43], 1],
[[0.47, -0.88], 1], [[-0.12, -0.9], 1],
[[-0.58, 0.62], 1], [[-0.48, 0.05], 1],
[[-0.79, -0.92], 1], [[-0.42, -0.09], 1],
[[-0.76, 0.65], 1], [[-0.77, -0.76], 1]]


perceptron = Perceptron(inputs,1000)

#Display network generalization
print ""
print "X, Y, Output"
for i in perceptron.arange(-1,1,0.5):
for j in perceptron.arange(-1,1,0.5):
#Calculate output.
result = perceptron.execute(list((i,j)))
if result == 1:
result = "Blue"
else:
result = "Red"
print "%f %f %s" % (i,j,result)


A saída da rede após o treinamento é exibida conforme abaixo, o que prova que a generalização foi atingida. Cada par de coordenadas (x,y) quando apresentadas à rede, retorna a classificação esperada, isto é, vermelho ou azul.


(...)
X, Y, Output
-1.000000 -1.000000 Blue
-1.000000 -0.500000 Blue
-1.000000 0.000000 Blue
-1.000000 0.500000 Blue
-1.000000 1.000000 Blue
-0.500000 -1.000000 Blue
-0.500000 -0.500000 Blue
-0.500000 0.000000 Blue
-0.500000 0.500000 Blue
-0.500000 1.000000 Red
0.000000 -1.000000 Blue
0.000000 -0.500000 Blue
0.000000 0.000000 Blue
0.000000 0.500000 Red
0.000000 1.000000 Red
0.500000 -1.000000 Blue
0.500000 -0.500000 Red
0.500000 0.000000 Red
0.500000 0.500000 Red
0.500000 1.000000 Red
1.000000 -1.000000 Red
1.000000 -0.500000 Red
1.000000 0.000000 Red
1.000000 0.500000 Red
1.000000 1.000000 Red


Analise o objeto criado, seus métodos e pesos, verifique que com o método “execute” você poderá testar se as respostas estão sendo dadas corretamente.


Além de problemas triviais como este de classificação de 2 dimensões , o Perceptron pode realizar uma análise mais poderosa em mais dimensões. As regras genéricas aqui apresentadas são também aplicáveis.


No próximo post, eu falarei mais sobre a Adaline, que é outro tipo de rede neural feedfoward como o Perceptron.

Download dos códigos aqui.

O que é A-GPS ? (GPS Assistido)

Gostaria de fazer uma referência a um post do blog VivaSemFio que explica o que é e como funciona o A-GPS (Assisted Global Positioning System) - GPS assistido -, recurso esse cada vez mais presente nos telefones celulares.

Recomendo a leitura!

Artigos sobre comparações de plataforma de desenvolvimento para celulares

Pessoal,

Achei essa série de artigos uma excelente fonte de pesquisa sobre experiências com desenvolvimento mobile. Através de gráficos, o autor demonstra quais plataformas são as mais fragmentadas, quais as mais solicitadas para desenvolvimento e quais as mais difíceis para iniciar o desenvolvimento.

Realmente não me surpreendi muito, já que saiu como esperava. JavaME como a plataforma que sofre de fragmentação (devido à diversidade de aparelhos e implementações próprias pelas fabricantes do KVM) e o Symbian (especificamente C++) a mais difícil para aprendizado (Vai fazer interface UI sem Carbide UI Designer , é fumo!).
E a mais procurada, geralmente o cliente não sabe! Acho até óbvio, o cliente quer o aplicativo rodando e quais são os requisitos dele. O desenvolvedor e arquiteto é que irão decidir baseado nos seus requisitos e plataforma-alvo qual melhor tecnologia se adequa para atender as demandas do projeto do aplicativo.


Recomendo a leitura!

Device Fragmentation Across Platforms

On Which Platforms are People Seeking to Develop ?

Platform Development Comparisons




Fonte: Mobile Phone Development
top