Histórico de múltiplas instâncias do bash

Isto pode ser útil para quem trabalha com várias janelas de terminal.

O comando history do bash (também o CTRL+R) guarda apenas o histórico da última sessão aberta, o que é um problema para quem usa mais de um terminal (eu uso o conjunto Xterm + screen).

Para corrigir isto, adicione em seu .bashrc

#Firulas de historico com o bash
export PROMPT_COMMAND=”history -a”
export HISTFILESIZE=2000
shopt -s histappend

Trabalhe com quantos terminais quiser, e guarde o histórico de todos!

[UPDATE 07/08/2008]: Tinha um erro na última linha. Obrigado André Matos e Sérgio Silva

SU-8W com acentos no N800

Estive me perguntando porque os acentos não funcionam corretamente no SU 8W com o N800. Decidi investigar.

Quando eu estava tentando sincronizar o teclado com o N800 pude perceber que o SU 8W é um teclado pré-configurado, e com um pouco de paciência encontrei o arquivo de configuração do mesmo:

/usr/share/X11/xkb/symbols/nokia_vndr/su-8w

Após 5 minutos estudando a sintaxe, em 10 minutos é possível perceber que falta alguma coisa: Não há, pelo menos, as configurações para português, espanhol e italiano. Agora eu entendo porque a configuração de layout português não funciona.

Já que não existe uma configuração para o idioma definido, utiliza-se o us_intl, certo? Mas a primeira linha da definição do us-intl tem um comentário preocupante: “I can’t belive! It’s not intl”. Parece que a tafera não será assim tão simples.

Para propósito de teste, não criei um novo mapa de teclado para pt_BR e sim editei o us_intl. O resultado ficou aceitável, e finalmente é possível ter um teclado funcional em português. O resultado você pode entrar aqui.(Não esqueça de fazer backup antes de sobrescrever)

Nos próximos dias ponho aqui a solução definitiva.

Resltado final:
SU 8W funcionando com acentos

Pychord 2 saindo do forno

Certa vez um colega de trabalho de uma das empresas por onde passei comentou:

“Não basta colocar um filho no mundo, é preciso alimenta-lo, educa-lo e fazer o possível para vê-lo crescido!”

Pois bem, depois de certo tempo resolvi voltar a mexer no abandonado código do pychord e adicionar algumas funcionalidades que eu precisava.

Após duas tentativas frustradas (0.4.5 e 0.5) percebi que era necessário re-escrever a biblioteca gráfica. Assim foi feito. Adicionei o conceito de janela, conteiner de widgets, melhorei a herança entre classes, etc. A interface não mudou muita coisa, pygame é meio chato para isso.

Ainda estou usando o padrão .chr criado para a primeira versão, mas pretendo adicionar o formato XML opensong em breve.

A parte legal, e a novidade mais visível, é que criei uma heurística para decidir quais linhas são acordes e quais não são. Esta heurística pretendo ir melhorando a medida que for encontrando casos em que ela não funcione.

Para resumir: ao nível de usuário, as modificações foram:

  1. Heurística para reconhecer/diferenciar acordes de letra de músicas
  2. Mudança de tom
  3. Listas clicáveis e móveis
  4. Suporte ao Maemo OS2008
  5. Controle da luminosidade durante a apesentação das cifras ( o display não apaga durante a mostragem mais )

A parte nerd

A idéia era que o código da interface pudesse ser reutilizada em outros projetos, logo trabalhei para ter uma GUI mais conscistente do que a anterior. Utilizando melhor o conceito de herança foi possível simplificar a utilização da lib, deixando as coisas com menos cara de gambiarra.

Através do conceito de slots ficou bem simples implementar mais de uma action para um mesmo evento.

Screenshots

Pychord-screenshot

Tela de busca, não mudou muito de como era anteriormente.

Pychord-screenshot2

Visualização da cifra

Pychord-Screenshot3

Mudaça de tom.

Como sempre, o arquivo de instalação pode ser pego aqui. Ainda não criei um repositório pois o aplicativo está em fase de testes. Mas pretendo fazer isto em breve.

[UPDATE 03/03/2008] Por problemas de codificação dentro do módulo sqlite3, os textos devem estar em formato UTF-8…

Extra, extra… Nokia adquire TrollTech

A Nokia divulga suas intenções de adquirir a trolltech.

Com estas informações tenho duas perguntas:

Será a Nokia capaz de manter a qualidade da biblioteca QT?

Será que veremos uma licença LGPL para a libQT? Se isto acontecer, será o fim da libGTK?

GoogleMaps errado não é mais problema! Patch para maemo-mapper aqui!

Como descrevi aqui a alguns dias atrás, o GoogleStreeMaps tem problema em posicionar geograficamente as ruas de algumas cidades do Brasil ( principalmente do interior ). Para quem o utiliza apenas para ver rotas não tem problema algum, mas para quem utiliza-o como motor para GPS a coisa muda de figura. O que acontecia era mais ou menos isto:

Error on GoogleStreetMaps

(A linha vermelha indica o que o carro estava fazendo, a linha verde indica o que o GoogleStreetMaps indicava fazer)

Como não quero passar aperto em Sampa semana que vem, e sei que Sorocaba e Itu estão na lista das cidades que o GoogleMaps erra, resolvi escrever um pequeno patch para o Maemo-Mapper, que adiciona a seguinte feature: “Calibrar o Mapa”.

Funciona mais ou menos assim: Ao identificar um erro de deslocamento, o usuário vai no menu Mapas e depois em “Calibrar Mapa”. Logo após clica-se em algum lugar da tela onde ele crê que realmente está.

O ideal mesmo seria parar o carro em uma esquina, identificar a rua onde está e a rua que irá cruzar, e clicar bem em cima.

O algoritmo faz duas coisas muito simples: Calcula a diferença da Latitude e Longitude do clique e da posição real indicada pelo cursor. Em mãos desta diferença, ela será sempre adiciona à Latitude e Longitude na leitura do GPS.

Desta forma conseguiremos andar sempre em cima da rota. O resultado final será algo como:

GoogleMapsError Fixed by Maemo-Mapper Calibrate Feature

(Há! bem melhor agora!)

Bom, se o patch mostrar-se útil para mais alguém posso envia-lo à equipe do maemo-mapper… Para mim com certeza o será.

O patch pode ser encontrado aqui, e o pacote para instalar aqui.

É isso, bom fim de semana a todos!

[]’s

Danilo Cesar

[UPDATE: 15/02/2008] Quase um mês depois…

O mapeamento de Sorocaba é melhor do que eu pensava. Usei o calibrador apenas em um momento, quando entrei na cidade. Excelente trabalho do nosso co-piloto!

Depois, com o calibrador desligado, percebi que o erro era imperceptível em vários pontos, inclusive na chegada do kartódromo de Itu! Por falar em Kartódromo, o Schinchariol é uma exelente opção para os paulistas amantes da velocidade.

N810 - Vale a pena?

N810

Andei lendo os reviews do N810 na internet por aí: O que achei?

Interessante: a bateria dura muito mais, tem teclado e GPS embutido, 2Gb de disco ( sem memory-flash ) e processador de 400MHz.

Ponto fraco: de longe, o preço. Quase 500 dolêtas e sem GSM ( tá tá, não é o foco do device, mas bem que poderia ter ).

O Cesar comentou, não sei da veracidade, mas o chinook do N810 será portado pro N800 também. Sendo assim, como hoje é possível encontrar o N800 por U$ 255.99, acho que a diferença de preço não vale as novidades. A não ser que a Nokia lance novamente aquele programa para baixar o custo do aparelho na mão dos desenvolvedores.

Agora é esperar a Bia fazer os comentários dela!

UPDATE:

O Cesar chegou primeiro, e confirmei as informações na lista do maemo.

  • O Chinook será portado para o N800 quando o N810 começar a ser vendido.
  • O programa para desenvolvedores vai rolar.
  • O N810 tem transmissor FM para ouvir música no carro.
  • Continuo não pagando 500 doletas por ele.

UPDATE 2:

Com o ASUS EeePC top de linha por U$ 400, vamos ver por quanto tempo o preço do N810 se sustenta.

Pychord: minha primeira contribuição ao Maemo.

Estou dando vida à minha primeira contribuição opensource ao projeto Maemo.

É o Pychord.

PyChord é uma aplicação que ajudará músicos durante ensaios mostrando cifras das músicas. A vantagem é que ele possui função de auto-scroll da tela, além de ter botões relativamente grandes.

Bastará ao usuário procurar pelo nome da música e o sistema mostrará a cifra. Como passei muito tempo brincando com a interface dele (fazer widgets no pygame parecia impossível antes, além do scroll sensível e com impulso), acabou não dando tempo de desenvolver a interface de busca por cifras. Mas estou pensando em usar o SQLite mesmo. De qualquer forma, além da search engine tem algumas features que pretendo desenvolver pra ele:

  1. Troca de tom das músicas (muito útil pra caras como eu que custam para lembrar que a diferença entre B e C é de meio tom)
  2. Rotação da tela.

De qualquer forma, tenho que agradecer ao Tony Maro que desenvolveu o teclado virtual e ao Marcelo ao dizer que não é bonito scroll-bars aonde não precisa. =)

O código não está aquela beleza, mas vai ter feriado por aí e eu vou ter bastante tempo livre para arrumar e terminar a aplicação.

Meu inglês não é lá essas coisas, mas fiz um vídeo de demonstração da aplicação que pode ser visto abaixo.

Com isto estou criando uma versão do meu blog na língua da rainha: http://labs.danilocesar.com.

E para quem quiser ver o código do PyChord:

svn co http://labs.danilocesar.com/pychord/trunk

Aceito sugestões!

[]’s a todos e bom feriado!

Permissões em partições SSHFS

Há muito tempo atrás fiz um POST aqui explicando sobre como montar uma partição por SSH. Depois deste tempo, descobri algumas coisas a mais. A minha motivação foi que ao tentar montar a partição / do meu N800, eu conseguia ler/escrever em arquivos sem problema, mas dentro do GEDIT isto não era possível, visto que dava sempre um erro de permissão.

Pois bem, dei um ls -la na pasta, e vi que os arquivos não pertenciam a mim, e sim ao root do N800. Então é óbvio que eu não conseguiria salvar. A solução foi passar um uid para o sshfs; o meu, é óbvio =)

sshfs root@192.168.0.15:/ N800 -o idmap=user -o uid=`id -u`

E resolvido o problema! Agora o GEDIT irá editar e salvar os arquivos numa boa.

Uma solução também seria usar o umask=000, mas esta não me agrada muito.

BossaConference: Como foi

Depois de um longo chá de aeroporto em Curitiba e Guarulhos, finalmente cheguei em Recife.
Como o vôo acabou chegando mais cedo, tive que ficar esperar o transfer por mais de uma hora no Aeroporto Internacional de Guararapes (Recife - Pe)

Por sinal, no aeroporto, conheci um funcionário do INdT (Rodrigo?), que me apresentou para a galera nas festas por lá.
Gostei bastante do povo que conheci.

Quanto às palestras, achei algumas muito interessantes, e outras nem tanto. Mas vamos por partes:

As que eu gostei foram

1 - PyS60
Participei da palestra do Jukka sobre o PyS60, mas infelizmente não pude ficar para o Hand’s On.
Conversando com o Jukka Laurila, percebi que o PyS60 está em pleno vapor.
Mas o que eu achei mais legal foi o que ele me contou no ônibus: A Nokia está pagando funcionários para desenvolver exclusivamente SoftwareLivre (no caso do Jukka com o Python).
E agora eu entendi e aceitei os motivos pelos quais eles abandonaram os Symbian 1st Edition.
2 - PyPy
Sempre achei idiota/inútil a idéia de manter um interpretador python escrito em python.
Mas o Santagada me convenceu que não é bem assim. Além de otimizar a linguagem, ele comentou que seria possível, com PyPy, escrever um interpretador javascript em python, e até converter (forçando um pouco a barra) código python em javascript. Isto sim é útil.
Durante a festa da terça-feira, quando já estávamos “altos”, comentamos em fazer a mesma coisa com o projeto BrainFuck, em BrainFuck. Mas alguém já pensou nisto! =).
3 - GStreammer
O Wim mandou muito bem em sua palestra do Gstreammer. Deu pra ter uma noção geral do FrameWork e a que ponto anda o desenvolvimento. Gostei bastante.

Como nem tudo são flores…

OpenC
Fiquei decepcionado com a palestra e com o OpenC em si.
Fiquei decepcionado com a API pois esta só irá rodar nos Symbian 3th Edition.
É uma limitação muito forte. O OpenC no Brasil não terá efeito nenhum, pois o número de celulares assim no Brasil tende a zero.
Mas de qualquer forma a idéia é boa e não tiro o mérito dela! Ter uma API POSIX para celulares é uma coisa muito boa.
Wireless
Como disse o Osvaldo, realmente o Wireless falhou em vários momentos. Foi uma pena. Aqueles que levaram seus notebook’s sentiram-se frustrados em alguns momentos.
Comigo mesmo
Fiz um “fuzuê” danado pra conseguir levar minha camera para Recife, mas apenas no aeroporto de São Paulo, chengando em casa, foi que percebi que não tinha tirado uma única foto… =(

Além das palestras, o evento contou com muita gente bacana. Além dos que eu citei no post anterior, finalmente conheci o Marcelo e o Lauro. Também conversei bastante com o Ulisses do BB Brasília sobre a Mandriva Conectiva. Ele contou-me “causos” muito interessantes sobre ela.

Também vi o tal do OLPC. A idéia é muito boa! A criança que souber aproveitar poderá crescer bastante. Mas infelizmente vivemos em uma realidade aonde nem livro didático sobrevive por muito tempo. Logo eu tenho meus receios.
O Marcelo citou uma frase muito interessante sobre o assunto: “Antes de inclusão Digital, precisamos de inclusão Social!”.

Bom, estão ai meus comentários atrasados sobre o Bossa. O Evento foi muito bom, em um lugar excelente. Fomos muito bem cuidados pelo INdT. Se houver próximas edições, recomendo ir.

BossaConference, ai vou eu!

Finalmente tudo certo para a minha participação no BossaConference.

Para quem não sabe, BossaConference é um evento que está sendo promovido pelo Instituto Nokia de Tecnologia, e tratará sobre mobilidade, multimedia e opensource.

Estarão presentes grandes nomes, falando sobre vários assuntos relacionados a mobilidade. Destaque pra Mika Rytkonen do Open C, Jurgen Scheible e Jukka Laurila com Python S60, Marcel Holtmann do Bluez, sem contar a presença de nomes nacionais como Marcelo Eduardo e Osvaldo Santana do Pythonologia.

É isso ae, agora é só esperar dia 12 de março.

Mas e ae? Alguém mais vai?

ps.: O evento será em Porto de Galinhas - PE

Smartphones: aonde podemos parar?

Tive o prazer de ter em minhas mãos um Nokia 6681 a alguns dias atrás, e tive uma idéia:

Imagine uma touchscreen. Agora imagine uma touchscreen sem uma touch-screen =).
Imagine poder “simular” uma touchscreen no ar usando apenas a camera do seu celular.

Pode ser um brinquedo muito interessante não?

Pensando nisso fiz um pequeno aplicativo em Python (pyS60) que localiza um objeto e segue-o. Como se fosse um mouse pointer seguindo uma caneta.

Este aplicativo na verdade é apenas uma prova de conceito demonstrando que pode ser feito. Quando tivermos celulares melhores, algo como 1GHz (O 6681 possui um processador de 220Mhz), e cameras próprias para este tipo de aplicação, talvez tenhamos softwares e smartphones com este conceito em funcionamento.
Seria muito bacana ver soluções assim aplicadas em desktops 3D.

Segue um vídeo de demonstração do aplicativo. Como disse, é apenas uma prova de conceito. Python ainda não é uma linguagem muito rápida quando estamos em celulares. Mas é muito mais fácil programar e testar do que se fosse feito em native symbian, e ainda por cima posso programar em linux =).

Leitores de RSS podem ver o vídeo aqui

Código fonte

  1. ##############################################
  2. # Produzido por Danilo Cesar [http://www.danilocesar.com]
  3. # Inspirado por:  http://www.bigbold.com/snippets/posts/show/636
  4. # Agradecimento a Enrico Batista
  5. ##############################################
  6. from appuifw import *
  7. from graphics import Image
  8. import camera, e32
  9. #import miso    # don’t dim the light
  10.  
  11. app.body = c = Canvas()
  12.  
  13. running = 1
  14. def quit():
  15.     global running
  16.     running = 0
  17.  
  18. app.exit_key_handler=quit
  19. app.title = u“O controle”
  20. app.screen = ‘full’   # or ‘normal’, ‘large’
  21.  
  22. def getdata(im, bpp=24):
  23.     import struct, zlib
  24.     im.save(‘D:\\pixels.png’, bpp=bpp, compression=‘no’)
  25.     f = open(‘D:\\pixels.png’, ‘rb’)
  26.     f.seek(8 +8+13+4)
  27.     chunk = []
  28.     while 1:
  29.         n = struct.unpack(‘>L’, f.read(4))[0]
  30.         if n==0: break  # ‘IEND’ chunk
  31.         f.read(4) # ‘IDAT’
  32.         chunk.append(f.read(n))
  33.         f.read(4)   # CRC
  34.     f.close()
  35.     return zlib.decompress(.join(chunk))  # ‘\x00′ prefix each line
  36.  
  37.  
  38. X = 80
  39. Y = 60
  40. while running:
  41.     if X < 0: X = 0
  42.     if Y< 0: Y = 0
  43.     if X > 160 - 30: X = 160 - 30
  44.     if Y > 120 - 30: Y = 120-30
  45.     im = camera.take_photo(‘RGB’, (160,120))
  46.     im.rectangle([(X,Y),(X+30,Y+30)], 0xff0000)   # red outline
  47.     # check hot spot whether active
  48.     box = Image.new((30,30), ‘L’)  # gray scale
  49.     box.blit(im, (X,Y,X+30,Y+30))
  50.     data = getdata(box, 8)
  51.  
  52.     # check black
  53.     for i in range(len(data)):
  54.         if ord(data[i]) < 30 and ord(data[i]) > 0:
  55.             X += i%31 - 15
  56.             Y += int(i/31) - 15
  57.             break
  58.         # Posso passar de 3 em 3 pixels. O código fica mais rápido e a perda
  59.         # de precisão é insignificante
  60.         i = i + 2
  61.  
  62.     c.blit(im, (0,0), (8,12))   # show camera
  63.  
  64.     #miso.reset_inactivity_time()
  65.  

Facilidade para aplicações gráficas com J2ME

Como já tinha comentado em alguns posts antigos meus, desenvolver aplicações JAVA para dispositivos móveis pode ser uma brincadeira muito bacana. Mas, se alguém tentou faze-lo, também deve ter percebido que desenvolver aplicativos gráficos com várias telas é uma tarefa extremamente chata.Neste post vou comentar o que achei do Netbeans e do add-on Netbeans Mobility Pack.

Não sou nenhum especialista em JAVA, e não entro em discuções Eclipse x Netbeans, mas me agradou muito a facilidade com que se é possível criar aplicações gráficas J2ME com o mobility pack.

Instalação
Primeiramente deve-se ter o Netbeans instalado. O Download pode ser feito aqui.
Após isto deve-se obter o mobility pack, que pode ser pego aqui

Com um sistema muito simples, é possível ligar telas entre si, programar botões… Basta clicar e arrastar!
Vale a pena para quem quer programar em JAVA para dispositivos móveis.

Segue algumas screen shots.

Criação para GUI's

Criação de GUI’s

Ligações de várias telas

Modelando telas

Tela do Programa

Interface do projeto

Novo Projeto
Opções para novo projeto

GPRS e Bluetooth: Linux em qualquer lugar

Olá pessoal…

Bom, depois de muito tempo sem postar aqui, estou voltando à ativa.
Irei falar hoje sobre como configurar seu GPRS via Bluetooth no Linux…

Instalando pacotes necessários

Executei estas operações com a instalação simples do Debian Etch, um celular 6600 da TIM, e um dongle bluetooth simples, creio que ninguém terá problema em reproduzi-lo.

Vamos por a mão na massa
(more…)

Python for S60… Programar celulares nunca foi tão fácil!

A alguns dias atrás estava procurando outros métodos de programação para celulares…

Eu já conhecia o famoso J2ME (JAVA micro edition), também já conhecia o Native Symbian C++. Mas procurava algo mais dinâmico… Mais prático….

Numa viagem que fiz pra londrina, brincando com meu celular (Nokia 6600) começei a pensar em como seria útil uma linguagem rodando por script, pra realizar tarefas simples, como por exemplo o BASH no linux….. Foi ai que eu conheci o Python for S60.

Pra começar: Porque Python?
Pythonis a simple, consistent and effective programming language. [Manual Getting Started With Pyton]

(more…)