CRBluetooth: Projeto Open-Source de controle do PC via Bluetooth

Gostaria de divulgar um projeto muito interessante desenvolvido pelo colega Elio Eduardo chamado de CRBluetooth. O projeto consiste na construção de um aplicativo para dispositivos móveis que permita o controle de um computador através da conexão sem fio bluetooth.

Os aplicativos foram desenvolvidos em JavaME (aplicação cliente mobile) e JavaSE (Aplicação servidor desktop). O projeto foi desenvolvido como projeto de conclusão de curso do Élio e ele me pediu para que eu pudesse divulgar no blog esse projeto que é open-source e disponível para donwnload, tanto os executáveis como o código-fonte.

A idéia do Élio é permitir que outros desenvolvedores contribuam com o projeto dando sugestões, adicionando novas funcionalidades e até como fonte de estudos para outros que estão querendo desenvolver aplicativos com conexão sem fio bluetooth.

Sumarizando o que o aplicativo pode fazer, seria:

"O celular permite a execução de eventos de teclado e mouse, que são enviados para o servidor através de uma conexão SPP. Estes eventos são enviados para o Sistema Operacional através de um objeto da classe awt.Robot.

O aplicativo também permite a configuração da velocidade de deslocamento do mouse e dos eventos de teclado associados as 4 teclas de ação da Game API. As preferências do usuário são armazenadas através da Preferences API."

Um comentário adicional é que o aplicativo para fazer a conexão remota com o servidor, utiliza a biblioteca open-source bluecove que funciona como intermediário de comunicação entre o adaptador bluetooth e sua aplicação. Desenvolvida em Java! Para download ou mais informações, ver o site oficial do projeto bluecove.

O Aplicativo servidor funciona tanto no linux como no windows. Cool! =]


Segue o link do projeto.


Os fontes já estão la e nos downloads estão os arquivos de distribuição.


Quaisquer informações, procurar o Elio.

E meus parabéns, pelo bom trabalho realizado!


PyS60 1.9 foi lançado com novas features e suporte ao Python 2.5!


Fiquei surpreso com o presente que o ForumNokia lançou para os desenvolvedores Python! Já está disponível para download o PyS60 versão 1.9.0.

Este post sumariza algumas novas funcionalidades do PyS60 1.9.0. (Baseado no post do blog Croozeus ).


  • Talvez a principal novidade é que o pyS60 está baseado no novo core do Python 2.5.1. Isso inclui grande parte dos módulos existentes na biblioteca padrão, como o parser Expat XML, ftplib,smtplib,urllib2,xmlrpclib, HttpServer, cPickle, asyncore e maior compatibilidade com sockets. Garbage Collection está também incluso, então não há mais necessidades de desfazer manualmente as referências.
  • Gerar aplicativos executáveis (.SIS) agora está muito mais fácil (Tinha uma idéia engatilhada sobre isso). A ferramenta Ensymble com uma nova interface de usuário é agora a ferramenta oficial para geração dos arquivos .SIS.
  • Os aplicativos .SIS estão agora mais robustos. Se o runtime do Python está ausente e você tenta executar o aplicativo, uma mensagem de erro mais amigável é exibida em vez de um erro fatal incompreensível como era antes.
  • Se o aplicativo lançar uma exceção no ínicio de sua execução, a pilha de execução (logs de chamadas de onde a exceção foi lançada) é impressa na tela em vez de o aplicativo sair subitamente sem nenhuma informação.
  • Os aplicativos tem um console de texto padrão do mesmo jeito que tem no ambiente de desenvolvimento de scripts. Isso significa que usar os comandos print funcionam do mesmo jeito em aplicativos SIS empacotados quanto em modo script (.py).
  • Em dispositivos S60 3rd FP2, o acesso ao GPS funciona de imediato sem a necessidade de assinar o aplicativo (signing). Desde a versão Symbian S60 FP2 que a funcionalidade de localização já é ativada por padrão, agilizando o processo de testes.
  • A compatibilidade com o Python 1.4.x ainda continua. Então quase todas as bibliotecas APIs ainda continuam na versão 1.9. O resto vai sendo adicionado durante o lançamento de novas versões.
  • A inicialização do intepretador é mais lenta em comparação com as versões anteriores. Ainda está em fase de otimização.
  • O tamanho do arquivo de instalação do interpretador desta nova versão está muito maior que as versões anteriores. Isso faz sentido visto ao aumento de funcionalidades e bibliotecad dispostas na versão 2.5. Porém, há um trabalho intenstivo pela comunidade dos desenvolvedores do PyS60 para obter o arquivo de instalação com tamanho menos de 1 MB.
  • Há uma dependência maior em relação às bibliotecas OpenC, que devem ser intaladas para que o intepretador PyS60 funcione.
  • Os aparelhos S60 2 Ed. não são mais suportados a partir desta nova versão em diante. Isso se deve pelo fato que as bibliotecas OpenC (o qual o interpretador é fortemente dependente) não estão disponíveis no S60 2 Ed.
  • Esta versão inicial é voltada para os desenvolvimento de scripts e não há suporte ainda para desenvolvimento de extensões, já que o plugin para o C++ SDK não está incluso. Em breve estará disponível.
  • Compatibilidade entre as versões 1.9.x não são garantidas até a versão 2.0. É uma versão oficial porém acho que mais uma release para testes para a comunidade python.

Resumindo, pode-se concluir que:

Pros:

  • Suporte ao Python 2.5.1. Mais módulos disponíeis aos desenvolvedores. Isso significa mais estabilidade e mais funcionalidades ao alcance dos desenvolvedores.
  • Empacotamento de arquivos SIS. Pode-se considerar como a principal feature desta nova versão. A ferramenta Ensymble foi melhorada com a incrementação de uma nova interface GUI para facilitar o uso.
  • Tratamento de erros melhorado . Se o aplicativo lançar uma exceção no ínicio de sua execução, uma mensagem de erro é impressa na tela com informações de onde foi lançado a exceção.

Contras:

  • Instalação e inicialização mais demorada. Realmente a instalação e a inicialização foi muito mais lenta em comparação às versões anteriores. Isso já está sendo corrigido.
  • Sem suporte ao Symbian S60 2 End.. Devido à forte dependência do interpretador ao Open C, esta versão e as próximas não terão mais suporte ao aparelhos Symbian S60 2 End.

Notas:

  • Esta nova versão já funciona no S60 5th Edition, embora não tenha nada comentado à respeito a suporte de eventos touchscreen.
  • Aparentemente o PyS60 mudou seu site de hospedagem para: https://garage.maemo.org/projects/pys60/
  • A documentação agora não vem mais como um arquivo PDF (pelo menos nessa versão). Agora vem em formato HTML separados em vários documentos.

Embora esta versão não seja ainda completamente estável, acreido que seja uma prévia das várias versões 1.9 para o lançamento do PyS60 2.0!

Seria mais legal ainda, se um dia o PyS60 pudesse vir previamente instalado nos aparelhos Symbian. Será que isso será com o PyS60 2.0 ?

Recomendo o download!


To-do-list em Python S60

Achei esse programa bem legal desenvolvido em Python para celulares Symbian S60. Ele se chama IdeaList. Ele é um To-Do-list que permite você organizar suas tarefas e compromissos direto pelo celular.
Vejam o vídeo de demonstração:



IdeaList - feature demo from ranza on Vimeo.



Sim, o programa é open-source pela licença GPL v3.

Para acessar o site do projeto, clique aqui.

Fonte: Croozeus

Apresentação: Mobile Developer's Dilemma - What Should I build ?

Achei essa apresentação no blog Mobile Phone com o seguinte tópico: 'Mobile Developer's Dilemma- What Should i Build ?'

Essa apresentação foi realizada por Paul Golding (um dos especialistas da área de mobile) e traz diversas informações como:

  • A experiência do usuário
  • Contexto em ação
  • Negócios
  • Parcerias
  • Oportunidades atuais
  • Tendências em 2009


pgoldingbusiness.gif

Gostei das dicas, especialmente pelas novas tendências: Application Stores, Aplicativos envolvendo redes sociais e aplicativos web.

Recomendo a leitura!

Fonte: Mobile Phone Development
Olá pessoal,


Achei uma coletânea de posts com várias dicas para melhorar suas apresentações e palestras em público. Dicas que abrangem desde o comportamento até a estrutura da sua apresentação no powerpoint. Agradecimentos ao blog ciberg nético (colega Anderson Berg) pelas dicas apresentadas.

Post 1: Dicas - Prepare-se e organize-se para suas palestras

Post 2: Dicas - Faça sucesso com suas apresentações no powerpoint

Post 3: Dicas - Acabe com os marcadores (Comunicação eficaz)





Ps: Nada mais justo do que colocar a foto de um maiores apresentadores e palestrantes: Steve Jobs. O cara que quando vai apresentar nos principais eventos da Apple, faz as ações da Apple subirem antes da apresentação.
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!

Vídeo sobre costumes dos japoneses em relação aos celulares

Vocês sempre quiseram saber os hábitos e costumes dos japoneses em relação ao uso dos celulares? E que tecnologias já estão por lá no Japão e que ainda aqui no Brasil está ainda longe de acontecer?

Vejam essa reportagem veiculada pelo Jornal Globo sobre os costumes dos japoneses em relação ao celular.

Veja o vídeo aqui.


Fonte: MobilePedia
Para os interessados em metodologias ágeis e que aplicam o SCRUM em seus projetos. Recomendo a leitura do livro: Scrum e XP direto das trincheiras escrito pelo autor Henrik Kniberg.

De acordo com o site INFOQ em parceria autor,

O livro oferece um ponto de início, através de um conto detalhado sobre como uma empresa sueca implementou Scrum e XP com um time de aproximadamente 40 pessoas e como ele continuamente melhoraram seu processo ao longo de 1 ano.

Este livro inclui:

  • Dicas práticas e truques para a maioria das práticas de Scrum e XP
  • Armadilhas típicas e como eleas devem ser trabalhadas
  • Diagramas e fotos ilustrando o dia-a-dia
  • Testes e test-driven development
  • Escalar e coordenar multiplos times
  • Lidar com resistência de dentro ou de fora do time
  • Técnicas de planejamento e estimativa
  • Prefácios por Jeff Sutherland e Mike Cohn

Scrum e XP nas Trincheiras


O mais legal é que o livro é gratuito e está disponível para download no site do InfoQ mediante um simples cadastro.
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

Descobri pelo blog do Rodrigo Toledo que uma empresa chamada Ei Movil desenvolveu um pequeno programa que permitirá que os funcionários possam controlar seus pontos remotamente através do aparelho celular. O aplicativo foi desenvolvida em JavaME, e o controle do ponto para a empresa é enviada por meio de um SMS.

Eu me pergunto se esse programa realmente funciona ou se ajudaria os funcionários dormirem mais um pouco para iniciar a trabalhar... hehe =D


Mas é uma bela idéia, é!

Fonte: RodrigoSToledo.com

Um vídeo interessante que eu encontrei no blog Portabilidade BR falando sobre o MobileSocket. Simplesmente um programa no seu celular que permite você controlar o seu PC remotamente.

Vejam o vídeo do aplicativo em execução!



Mobile2Socket :: Teaser from Colmeia on Vimeo.
Seu sonho sempre foi querer que seu celular que pudesse controlar o seu carro de controle-remoto ? Pois é, isso é possível e com o seu Iphone!

Com o NerdKit é possível construir em um fim de semana todo o aparato necessário para controlar seu carro de controle remoto pelo celular. A idéia é que o mesmo sirva como um elo entre o PC e o carro. Além de ser um ótimo exemplo de entendimento e como os micro-controladores e sistemas complexos trabalham em conjunto, podendo ser desenvolvido em apenas um fim de semana em casa.
O kit que pode ser obtido no próprio site, por 79 dólares com desconto para estudantes. Achei bem legal todo o kit disponível e pela aparência do site as instruções não são tão difíceis de se realizar.

Recomendo a visita.

Vejam o vídeo-demonstração do carro controlado remotamente pelo celular:

[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!

Computação Móvel e Computação Inteligente : Juntos!

Uma tendência na área de computação que vem crescendo nas últimas décadas é sem dúvidas, o surgimento de dispositivos cada vez mais menores e pessoais. Sistemas monolíticos, os famosos mainframes utilizados por diversos usuários estão quase que extintos dando lugar aos poderosos computadores pessoais, considerados como os primeiros marcos dessa evolução. Mas nós sabemos que os PC's não são o fim dessa linha.

Os computadores pessoais estão ficando mais portáveis e menores. Exemplos como notebooks e os famosos palmtops (PDAs) ficaram extremamente populares. Mas esse não é o fim deste processo. O próximo passo são os computadores "vestíveis" que podem ser carregados como roupas e novas interfaces que ligadas ao cerébro do ser humano, ampliam a visão da realidade pelo usuário. Isso nos faz ter uma previsão preliminar de que todo esse desenvolvimento faz conceber de que os computadores não serão apenas dispositivos encapsulados em gabinetes, mainframes ou mini-gadgets, mas tomarão forma de um ambiente computacional inserido no contidiano do usuário, seja embutido em roupas, carros, setup-boxes, microondas, ou até em garrafas de leite.

De acordo com a visão futurista dessa nova infra-estrutura computacional por muitos estudiosos desse novo campo de pesquisa, também denominado de computação ubíqua, por exemplo, seria a possibilidade de um dia as pessoas poderem ser lembradas de comprar leite quando elas estiverem no supermercado, através de uma mensagem enviada até o seu relógio, celular, ou até seu óculos pela sua geladeira que monitora automaticamente todo o seu estoque interno. Existem, é claro, outros cenários que os usuários podem receber mensagens personalizadas de acordo com a situação e contexto que o usuário estiver inserido.

Embora, a idéia de uma garrafa de leite computadorizada seja apenas uma pequena idéia de pesquisa, está mais visível que a informação de hoje está rapidamente se movendo para pequenos dispositivos hi-tech eletrônicos saíndo de rascunhos e protótipós de laboratório até as prateleiras de lojas e no nosso dia -a - dia. Celulares, PDAs, laptops, parecem convergir para uma nova geração de dispositivos inteligentes com comunicação sem fio e razoável poder computacional para uso diário. Novos protocolos de comunicação e padrões inseridos em redes sem fio de banda larga permitem o acesso à informação em quaisquer lugares. Combinado com o posicionamento através de satélites (GPS) ou através dos sinais das antenas das operadoras telefônicas utilizadas pelos aparelhos móveis, os novos serviços disponibilizarão a capacidade de localização do usuário.
Mas não só apenas um hardware poderoso com acesso a uma rede sem fio garante a usabilidade desses sistemas móveis. Alguns softwares e serviços tradicionais podem ser usados nesses dispositivos, mas outros simplesmente não serão utilizáveis ("viáveis") quando não se tiver acesso a um teclado ou até pela resolução ou tamanho da tela ser reduzido. Logo, o grande desafio para o sucesso e popularização dos sistemas móveis é o design de interfaces e softwares inteligentes que permitem o fácil acesso a informações pessoais e flexibilidade suficiente para o tratamento de mudanças de contexto de usuário ou disponibilidade de recursos.

Existem inúmeros problemas que devem ser solucionados a fim e tornar essa nova infra-estrutura viável e útil para os usuários móveis. Entre os diversos problemas , podemos destacar:

- Informações relacionadas à contexto/situação
- Informações relacionadas à localização
- Interação e usabilidade em dispositivos móveis
- Interfaces de usuário inteligentes
- Adaptação a recursos limitados
- Tolerância a falhas
- Descoberta de novos serviços, busca de informações, etc sobre contexto.
- Sistemas baseados em investigação do comportamento do usuário, etc.

Algumas aplicações de pesquisa no campo de Inteligência artificial tem investigado os problemas de desenvolver interfaces inteligentes e cooperativas por vários anos e tem explorado fortemente com a questão de disponibilidade de recursos, que em dispositivos móveis são limitados.

Portanto, técnicas inteligentes podem prover um conjunto de soluções para esses problemas. Como também ferramentas bem promissoras para desenvolvimento de sistemas móveis que utilizam recursos de localização e contexto para dar suporte ao usuários de uma forma não intrusiva.
Não só apenas técnicas de I.A. podem ser utilizadas na construção de sistemas móveis assistentes, um outro grupo bem diferente de técnicas podem ser também integradas a fim de atingir um objetivo satisfatoriamente. Por exemplo, o aprendizado, é um fator crucial para serviços adaptáveis baseados no uso do usuário. Técnicas como aprendizado simbólico de I.A até redes neurais podem prover a flexibilidade necessária para um sistema que se adapta às preferências do usuário em diversos contextos. Há questões também relacionadas à sistemas baseados em localização. Com estes métodos, eles podem ser usados em serviços adaptáveis para localização inteligente do usuário, como por exemplo tomada de decisões em sistemas de navegação ou busca contextual de informações de acordo com a localização.

É com essas idéias em minha mente que venho nesse blog também a partir das próximas semanas apresentar conceitos relacionados à inteligência articial aplicada em sistemas móveis, com discussões de tópicos introdutórios e avançados para o estudo de I.A trabalhando em conjunto com o desenvolvimento de aplicativos e serviços móveis.

Para finalizar, acho que une as duas coisas que mais me motivam a continuar mais estudando e explorando o mundo da computação: Computação Móvel e Inteligente. Porque então não unir os 2 campos ?

Este blog é o portal das oportunidades! Estejam antenados.
Olá pessoal,

Gostaria de compartilhar com vocês um achado bem interessante que o usuário "nitaibezerra" comentou no meu blog sobre aquela idéia de desenvolver um sistema de buscas de transportes coletivos. Fiquei surpreso ao ver que já tem um sistema desse em desenvolvimento e já disponível para o público (versão beta) : Omnibus. Um sistema web que permite que o usuário enconre informações sobre rotas de transporte públioco na região metropolitana do Recife.
Decidi, testar o sistema e na sua página inicial, já nos informa as suas funcionalidades:
  • Obtenha a descrição da rota com explicações passo a passo.
  • Encontre paradas de ônibus por bairro.
  • Visualize a rota de ônibus na sua região.
  • Realize buscas por pontos de referência.


C0loquei o Endereço de minha residência como ponto de origem e o do meu trabalho como ponto de chegada. Com uma interface intuitiva (lembrando ao google maps) ele exibiu todo o percusso necessário que eu necessitava fazer para chegar até o local desde a saída da minha residência até o local desejado. Informou as linhas, as paradas de ônibus, o tempo de viagem... resumindo grande parte das minhas idéias foram atendidas por esse sistema. Descobri também que o sistema é colaborativo, logo os usuários cadastrados podem cadastrar novos pontos de parada a fim de melhorar a precisão da busca do sistema. Realmente, gostei muito do aplicativo e gostaria de saber quais algoritmos de roteamento por trás estão por trás de calcular todas essas rotas. Parabéns à Inove tecnologia pelo trabalho e sem dúvidas ficou um programa fácil de usar e bem intuitivo.

Clique na figura abaixo para ampliar.



Ah! E só para não esquecer, eles também disponibilizaram uma versão mobile da página (com conteúdo todo em texto sem disponibilidade de visualização de mapa, acho que até paa reduzir os custos no trafégo de dados) . Realmente, leram todo o post do meu blog!! =D

Recomendo a visita!

Ferramenta Carbide.C++ 2.0 agora é Free!

Free Carbide


Bela Notícia aos desenvolvedores Symbian!!!

A ferramenta Carbide.C++ 2.0 foi lançada hoje e com grandes surpresas inclusive. Uma delas foi a agradável notícia que todas as versões do Carbide.c++ agora são gratuitas (sem custos)!.

Logo a versão Express não existirá mais a partir esta versão. Isso inclui ferramentas como o Carbide.UI que permite a construção de interfaces para UIQ e S60 através de componentes (drag-drop) e a depuração on device (On device debugging). Ótima notícia!

Recomendo o download!! Isso significa mais desenvolvedores desenvolvendo para Symbian e consequentemente mais aplicativos disponíveis. A Nokia e o Symbian perceberam que o mundo do "open-source" é o caminho! hehe. =]

Mais informações na pagina oficial da ferramenta.
O futuro:

"Aponte a câmera do seu celular para um objeto, e ele automaticamente te fornece informações relacionadas àquele objeto reconhecido." "Point and Find!"

Seria muito legal ter todas informações diretamente no seu celular sem a necessidade de ter quer fornecer inúmeras entradas a partir do teclado do aparelho. Já pensou, você apontar a camêra do seu celular para um poster de um filme em cartaz no cinema e o aparelho fornecer informações como o cinema mais próximo com o filme em exibição (via GPS) , críticas do filme, resenhas, sinopse, etc. Vejam o vídeo abaixo, para vocês terem uma idéia das inúmeras oportunidades que esse tipo de serviço pode oferecer.



Fonte: Symbian Blog

Monitore ambientes com o seu celular.

Interessante notícia que eu encontrei no blog Mobilidade é tudo, sobre o novo produto da motorola chamado de Motovision. Esse gadge permite monitorar ambientes pelo celular, isto é, permite enviar vídeos e imagens para até 5 celulares. Um possível uso desse sistema seria a transmissão de imagens de uma residência para o dono quando ele estivesse viajando.

Vejam o vídeo do Olhar Digital, para entender mais sobre essa plataforma.
ZonaAzulAcabei de ver uma notícia interessante no blog MobilizadoBlog, a respeito de uma nova tecnologia que está sendo implantada em São Paulo: O Zona Azul eletrônico. A CET (Companhia de trânsito) irá testar os novos modelos de cobrança de estacionamento para a zona azul. Para isso, o sistema vai contar com a ajuda dos celulares dos motoristas. Para que o usuário possa usufruir do sistema, primeiramente ele deve se cadastrar, ligando para um número específico e fornecer o CPF e o número de cartão de crédito. Logo, quando o motorista precisar estacionar é só telefonar e digitar o número da vaga indicado na placa da rua. Na hora de ir embora basta ligar de novo e desativar o serviço.

Bem interessante, esse serviço que inclusive o próprio governo com o auxílio do FINEP está financiando projetos com zona azul eletrônico. A Qualitá Informática foi uma das contempladas e seu projeto desenvolvido permitirá que o usuário estacione seu veículo numa área de Zona Azul e pague a tarifa com seu aparelho celular. O sistema calcula o valor do estacionamento e o transmite ao motorista, que pode pagá-lo na conta de telefone no final do mês ou incluir créditos exclusivos para o fim.

Há até uma reportagem do SPTV falando mais sobre o projeto do zona azul eletrônico em São Paulo. Vejam aqui o procedimento com detalhes.



Fonte: Mobilizado Blog


top