sexta-feira, 16 de outubro de 2009

How to connect a GPS phone to a Computer via bluetooth

A very quick post to show how these things work togheter. I connected a Nokia E71 GPS to my ThinkPad T61 running Ubuntu 9.04 Janty Jackalope using bluetooth connection. The initial idea was to use Google Earth as my main GPS screen while driving, but unfortunately I couldn't make it work *yet*.

Step 1) Going right to the point: First you need to be sure that you mobile phone exports the GPS service via bluetooth. And that's simple to get. First you must edit yout /etc/bluetooth/hcid.conf to look like this:

root@phoenix:/etc/bluetooth# cat hcid.conf
#
# HCI daemon configuration file.
#

# HCId options
options {
# Automatically initialize new devices
autoinit yes;

# Security Manager mode
# none - Security manager disabled
# auto - Use local PIN for incoming connections
# user - Always ask user for a PIN
#
security none;

# Pairing mode
# none - Pairing disabled
# multi - Allow pairing with already paired devices
# once - Pair once and deny successive attempts
pairing multi;

# PIN helper
#pin_helper /usr/bin/bluepin;

# D-Bus PIN helper
#dbus_pin_helper;
}

# Default settings for HCI devices
device {
# Local device name
# %d - device id
# %h - host name
name "otubotp";

# Local device class
class 0x3e0100;

# Default packet type
#pkt_type DH1,DM1,HV1;

# Inquiry and Page scan
iscan enable; pscan enable;

# Default link mode
# none - no specific policy
# accept - always accept incoming connections
# master - become master on incoming connections,
# deny role switch on outgoing connections
lm accept;

# Default link policy
# none - no specific policy
# rswitch - allow role switch
# hold - allow hold mode
# sniff - allow sniff mode
# park - allow park mode
lp rswitch,hold,sniff,park;

# Authentication and Encryption (Security Mode 3)
#auth enable;
#encrypt enable;
}


Step 2)
Restart you bluetooth daemon:

root@phoenix:~# /etc/init.d/bluetooth restart
* Stopping bluetooth [ OK ]
* Starting bluetooth [ OK ]


Step 3) Turn on the bluetooth on your phone and get ready to scan devices:

root@phoenix:~# hcitool scan
Scanning ...
00:21:FE:xx:xx:xx mycellphone


Step 4) Then, check if your phone exports GPS data via bluetooth running sdptool. In this step you need to pay attention to the Service Names and to the channel they use. We're gonna use these informations later on.

root@phoenix:~# sdptool browse 00:21:FE:F8:2F:E2
Browsing 00:21:FE:F8:2F:E2 ...
Service Name: AVRCP Target
Service Description: Audio Video Remote Control
Service Provider: Symbian Software Ltd.
Service RecHandle: 0x10000
Service Class ID List:
"AV Remote Target" (0x110c)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 23
"AVCTP" (0x0017)
uint16: 0x100
Profile Descriptor List:
"AV Remote" (0x110e)
Version: 0x0100

Service Name: Hands-Free Audio Gateway
Service RecHandle: 0x10004
Service Class ID List:
"Handsfree Audio Gateway" (0x111f)
"Generic Audio" (0x1203)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 1
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Handsfree" (0x111e)
Version: 0x0105

Service Name: Headset Audio Gateway
Service RecHandle: 0x10005
Service Class ID List:
"Headset Audio Gateway" (0x1112)
"Generic Audio" (0x1203)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 2
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Headset" (0x1108)
Version: 0x0100

Service Name: Audio Source
Service RecHandle: 0x10027
Service Class ID List:
"Audio Source" (0x110a)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 25
"AVDTP" (0x0019)
uint16: 0x100
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Advanced Audio" (0x110d)
Version: 0x0100

Service Name: AVRCP Controller
Service Description: Audio Video Remote Control
Service Provider: Symbian Software Ltd.
Service RecHandle: 0x10028
Service Class ID List:
"AV Remote" (0x110e)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 23
"AVCTP" (0x0017)
uint16: 0x100
Profile Descriptor List:
"AV Remote" (0x110e)
Version: 0x0100

Service Name: SyncMLClient
Service RecHandle: 0x10029
Service Class ID List:
UUID 128: 00000002-0000-1000-8000-0002ee000002
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 10
"OBEX" (0x0008)
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"" (0x00000002-0000-1000-8000-0002ee000002)
Version: 0x0100

Service Name: OBEX File Transfer
Service RecHandle: 0x1002a
Service Class ID List:
"OBEX File Transfer" (0x1106)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 11
"OBEX" (0x0008)
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"OBEX File Transfer" (0x1106)
Version: 0x0100

Service Name: Nokia OBEX PC Suite Services
Service RecHandle: 0x1002b
Service Class ID List:
UUID 128: 00005005-0000-1000-8000-0002ee000001
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 12
"OBEX" (0x0008)
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"" (0x00005005-0000-1000-8000-0002ee000001)
Version: 0x0100

Service Name: SyncML DM Client
Service RecHandle: 0x1002c
Service Class ID List:
UUID 128: 00000004-0000-1000-8000-0002ee000002
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 13
"OBEX" (0x0008)
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"" (0x00000004-0000-1000-8000-0002ee000002)
Version: 0x0100

Service Name: Nokia SyncML Server
Service RecHandle: 0x1002e
Service Class ID List:
UUID 128: 00005601-0000-1000-8000-0002ee000001
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 14
"OBEX" (0x0008)
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"" (0x00005601-0000-1000-8000-0002ee000001)
Version: 0x0100

Service RecHandle: 0x1002f
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 3

Service Name: Dial-Up Networking
Service RecHandle: 0x10030
Service Class ID List:
"Dialup Networking" (0x1103)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 4
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Dialup Networking" (0x1103)
Version: 0x0100

Service Name: OBEX Object Push
Service RecHandle: 0x10031
Service Class ID List:
"OBEX Object Push" (0x1105)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 9
"OBEX" (0x0008)
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"OBEX Object Push" (0x1105)
Version: 0x0100

Service Name: Imaging
Service RecHandle: 0x10032
Service Class ID List:
"Imaging Responder" (0x111b)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 15
"OBEX" (0x0008)
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Imaging" (0x111a)
Version: 0x0100

Service Name: SIM Access
Service RecHandle: 0x10033
Service Class ID List:
"SIM Access" (0x112d)
"Generic Telephony" (0x1204)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 8
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"SIM Access" (0x112d)
Version: 0x0101

All you need to check on this huge amount of data is something telling that you phone exports the GPS information. In the above example there is no such thing. If your phone DOES support this information go to step 5. Otherwise, install this strategic application for Symbian: ExtGSP. This little tricky app will do all the messy thing for you exporting all the GPS data over the bluetooth connection. Then re-run the sdptool command again to check. In the end you will find additional information about ExtGPS:

Service Name: Symarctic ExtGPS
Service Description: Share phone's built-in GPS module via Bluetooth
Service Provider: Symarctic Solutions
Service RecHandle: 0x10034
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 5
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100


Step 5) Then, edit your /etc/bluetooth/rfcomm.conf and make it look like this:

root@phoenix:~# cat /etc/bluetooth/rfcomm.conf
rfcomm4 {
bind yes;
device 00:21:FE:F8:2F:E2;
channel 5;
comment "Serial Port";
}


Step 6) Once configured (and ExtGPS running on your phone) you will now open a communication channel and bind it to a local device like this:

root@phoenix:~# rfcomm connect 4
Connected /dev/rfcomm4 to 00:21:FE:F8:2F:E2 on channel 5
Press CTRL-C for hangup


Step 7) Now there's a bunch of GPS information being written on /dev/rfcomm4. In order to make a good use of it, we should grad all these information, and parse it with gpsd:

root@phoenix:~# gpsd -N /dev/rfcomm4
(-N means not to daemonize it, to see all the debug info.)



What's next? Now we have all the setup ready: Cellphone with GPS up and running, exporting information via bluetooth (using ExtGPS), connected and writing information on a local device, and a daemon grabing and parsing all the information. Good! We just need a client program to enjoy the show:

Step 8) You can use a bunch of client programs, I've tested two of them: Xgps and GpsDrive.
Xpgs is a very simple program just to make sure things are working fine. It shows the position of satelites, the current position and so on. Here is a print screen:


GPSDrive is more Google-Earth-like, you may track you path during a travel, check the map and so on:


Well, that's it. Hope you enjoy :)

segunda-feira, 12 de outubro de 2009

[SPOILER] Review de District 9

META: A um tempo já que não post assuntos não-técnicos. Bem, vou aproveitar o ensejo para matar dois coelhos: (1) Anunciar um projeto em parceria com minha namorada, o Cinema a dois. Não somos críticos de cinema mas adoramos alugar pilhas de filmes pro final de semana, aproveitamos e damos alguns pitacos por lá :) e (2) Falar de um filme que está dando o que falar: District 9. Se não viu ainda, corra. Aqui clipo o post na íntegra, boa leitura. :-)

--

"AVISO: Este post contém várias referências ao enredo, I mean, spoilers. Se você já assistiu, então ok, vá ao segundo parágrafo. Caso contrário mark as unread no seu Google Reader e volte aqui depois. O que você deve saber é que é um bom filme não-clichê e merece ser visto :)

District 9

District 9 é um filme que vai contra várias clichês que filmes de ficção científica normalmente abordam. Chamo a atenção para este ponto por que justamente isso já torna o filme bastante interessante. Não tem alienígenas maus invadindo a Terra com nenhum tipo de propósito esdrúxulo (nem tocando musiquinha, nem exterminando, nem dando lição de moral). Eles estão perdidos, desnutridos e indefesos. Não vieram falar com o "nosso líder" em NYC ou Chicago ou LA, eles caíram aleatoriamente em Joanesburgo e lá ficaram.

A realidade: O que o filme retrata é, no fundo no fundo, o que acabaria acontecendo com um possível contato desses. Os alienígenas perdidos foram alocados bem embaixo de onde sua nave estacionou. Anos se passaram e, como toda "raça segregada", aquilo acabou virando uma favela com todos aqueles problemas típicos que tem: Tráfico de armas e comida, sub-moradias, guerrilhas locais e gangues. E esse é o ponto chave do filme que ironicamente foi exatamente onde houve o apartheid.

Formato: O formato tornou o filme ainda mais verossímil. Fez-se um documentário resumindo tudo o que houve desde a chegada dos ETs até o ocorrido no filme. Depoimentos, tomadas ainda não editadas e câmera em mãos acompanhando as operações. Ponto positivo.

Atuação: Aqui preciso revelar mais um pouco do enredo. Wikus, um funcionário default da MNU (Multi National United) é encarregado de despejar todos os alienígenas daquela favela com o propósito de colocá-los em um acampamento melhor - que na real, mais lembra um campo de concentração. No decorrer da operação, Wikus se contamina e aos poucos vai agregando o DNA alienígena ao seu, se tornando cada vez mais parecido com um deles. Sentiu na pele toda a segregação e desprezo de sua própria espécie. Sua atuação - combinada com o enredo, é excepcional. Wikus contraria completamente o comportamento heroico esperado, defende a sua pele e de mais ninguém. Impagável.

O interessante é como criamos empatia com os alienígenas, mesmo eles sendo estranhos, com antenas e parecendo baratas. O filme é muito bem construído em fatos e comportamentos humanos comparados a cituações semelhantes na história de nossa história. Fica a dica. :)

sábado, 10 de outubro de 2009

Googe Wave, a (r)evolução da comunicação

Pois bem, eu mal ganhei convite de usuário pro Google Wave e já estou me metendo a dissertar sobre o tema. Aliás, agradecimentos ao Duda Nogueira pela cortesia :-)

Antes de sair lendo o post, devo avisar que não será nada técnico. Mas como? Simples, são apenas algumas divagações que fiz a respeito do que pode acontecer com a forma com que trocamos informações. Já aviso que para entender melhor o que vou falar, assista a palestra de lançamento da early-release-developer-preview versão alfa no Google IO. Para facilitar a vida, posto dito ai em baixo:



Depois de ver o vídeo, surgiram alguns pensamentos aleatórios:

1) Convergência: Tudo-numa-coisa-só-conectado-ao-mesmo-tempo-agora. O conceito de email acabou, o conceito de IM acabou e o conceito de micro blogging também acabou. Agora TUDO o que circula por aí é uma wave. No fundo no fundo Google Wave serve como um proxy transparente para qualquer outro aplicativo que você queria usar. O aplicativo abstrai todos esses conceitos e mostra ao usuário o que realmente importa: A informação. Não importa se é em tempo real ou se é assíncrono, a informação está lá pra quando o usuário quiser/puder interagir.

Até aí no big deal.

2) Mobilidade: Pegue tudo isso e junte à idéia de objeto compartilhado - o que nos leva imediatamente à edição colaborativa. Agora coloque tudo isso dentro de um celular device interessante... (pensamento viciado) ...Como por exemplo o N900. Em qualquer lugar você vai poder discutir assuntos tão facilmente quanto se estivesse em uma mesa de bar, vai poder compartilhar e mostrar suas fotos em tempo real tão fácil quanto se estivesse na sala de casa conversando com seus pais, vai poder debater o projeto da firma de forma tão simples quanto em um brainstorm, vai poder... (e por ai vai)

3) Hackers of the world, unite! Agora vem a coisa legal, a API é aberta. Vamos poder brincar de desenvolver gadgets, widgets e qualquer-coisa-dgets que quisermos pra esse brinquedo novo. Widgets que faça um parser das datas escritas no texto e diga a previsão do tempo, um bot que fale com redes IRC, um widget faça café e misto-quente-fatiado quando eu acordar, ah seila.

Pode até ser exagero meu, ok. Mas eu só cheguei nessas conclusões por dois motivos: (1) Observei a tremenda revolução que o sistema de microblog fez nos meios de comunicação e (2) assisti Wall-E umas 3 vezes. Não, nenhum entorpecente envolvido.

A conclusão (por que todo texto longo deve ter uma conclusão) é que só esperando pra ver e sacar qualé. E isso me remete a um pensamento que tive na época que trabalhava no Pukas: Quando a gente desenha uma ferramenta, esperamos que os usuários usem assim, o que não impede que os usuários a usem assado ou cozido. Que eu me recorde, blogs e microblogs aconteceu exatamente assim. Logo, só esperando pra sacar qualé mesmo.

terça-feira, 6 de outubro de 2009

Primeiro Festival de Software Livre de Belo Horizonte

Impressionante, quase mais de uma semana depois e cá estou eu mineirando[1] um tempo livre pra conseguir escrever algumas linhas sobre o assunto.

o primeiro de muitos
(cartaz do evento)

Organização e Infra:
A organização foi bastante competente, não houve nenhum gap - ou pelo menos nenhum que eu tenha percebido. Wifi funcionando em quase 100% do evento e horários de palestras ok - exceto por uns palestrantes furões. Falando em palestrantes...

Palestras:
Ok, confesso que acordei tarde e que cheguei quase na hora do almoço no evento. Ok, *na hora do almoço*. Gastei boa parte da tarde revisando e corrigindo a minha própria palestra.

Mas uma palestra em especial merece algumas linhas a mais: Deixo aqui os parabéns ao Lamarque pela sua palestra-história-de-vida. Passou quase uma hora e meia falando de suas experiências pessoais em escrever driver de kernel, postar na LKML, ser tratorado, resolver bugs postar patches e por ai vai. Gostei disso por dois motivos claros: 1) Isso representa fortemente o espírito de nerd && computeiro - fazer a coisa funcionar por que *pode* e não por que quer provar alguma coisa ou por que alguém mandou. Pelo simples fato de estar interessado e querer resolver. 2) O conteúdo técnico pouco importava, a idéia era que "contribuir com SL não é um bixo de 9 cabeças". Vai lá, leia a documentação, fale com a galera no canal, poste e por ai vai. No fear.

(minha palestra do vimbook - crédito: Djavan)

Falando em palestras, a minha sobre vimbook foi bem divertida. O público era bastante interessado, os exemplos funcionaram na hora e o mais importante: As minhas piadas sem graça mantiveram as pessoas acordadas mesmo depois do devastador almoço de comida mineira. Great! Piadas a parte, o que gostei mesmo foi que as pessoas ficaram interessadas no vimbook, muitos anotaram a URL, perguntaram sobre o projeto e tal. Mission accomplished feelings.



E uma coisa que eu não canso de repetir: Em eventos desse tipo, a coisa que menos importa é ficar na sala prestando atenção na palestra. O networking no boteco pós evento é sempre mais importante. Conhecer pessoas novas, em que trabalham, trocar idéias, links, conexões em redes sociais e por ai vai :-)

o baile todo
(pessoas de belzônte, porto alegre-tchê e bahia, networking é isso aí ó)

Parabéns a todos da orgzanização, palestrantes e amigos. E que venha o próximo! :-)
Algumas fotos do evento no meu flickr, no flickr do Tuliom e no picasa do Djavan.

[update] os slides da minha palestra estão aqui:


[1] - Ahn?! Ahn?! Entendeu?!