PobreBand drum kit

Quando chegou o RockBand no trabalho criou-se uma necessidade que eu nunca tinha tido: Uma bateria.

Óbviamente eu não queria pagar uma grana altíssima numa bateria profissional ou no kit completo do rockband. A Solução? ProbreBand!!!

Na verdade é apenas o início da implementação do Ardrumo, que usa um Arduino e alguns piezos para gerar um sinal  que é enviado para o sequenciador MIDI do mac (Futuramente do Linux? talvez…). Segue abaixo o vídeo.


* Minha irmã sempre disse que eu não tinha ritmo =)

Fiquei meio preocupado com o tempo de resposta e sensibilidade. Mas o tempo de resposta é muito bom (no vídeo parece que tá atrasado, mas só parece), e a sensibilidade fica perfeita quando você prende os piezos em alguma superfície.

Enfim, voltar a brincar com embarcados tem sido divertido, ainda mais aprendendo eletrônica. Breve comento sobre outros brinquedos que estou fazendo (com motor de passo, e um servo que está pra chegar).

Agradecimentos a Jesus (não esse Jesus), que me incentivou a comprar o Arduino, e ao Alex, Thulio, Jeez e Larry que estão me dando dicas de eletrônica. E claro, ao cara do Ardrumo que me fez economizar uma grana. =)

[update: 29/03/2009] A idéia é montar uma estrutura maior de borracha para os sensores, e uma estrutura em PVC para a bateria. Se um dia eu conseguir ponho aqui. A idéia é algo parecido com isso:

Bateria Eletronica

QT mudando para LGPL

Fonte: http://arstechnica.com/news.ars/post/20090114-nokia-qt-lgpl-switch-huge-win-for-cross-platform-development.html

Eu já sabia

Ao menos uma das previsões de 2008 saiu =)

[UPDATE 14/01 09:40]

Konsole resize fix

Quem usa placa nvidia e KDE4 deve estar tendo problemas para redimencionar a janela do konsole.

Navegando pelo techbase encontrei uma solução:

nvidia-settings -a InitialPixmapPlacement=2 -a GlyphCache=1

Fica aí a dica!

[]’s

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

WTF???

Agora pouco digitei um endereço errado e tive acesso à uma infeliz página:

WTF???

Outro teste:

OK, já passou da hora usar OpenDNS!

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

PiTracker – tracker de imagem em QT4.

Seguindo a linha do “Liberando trabalhos da UFPR“, estou liberando o código do PiTracker.

Projeto da matéria de Processamento de Imagens, o objetivo era fazer um tracker de pessoas em um determinado vídeo.

Na especificação havia:

  • O vídeo será uma sequência de imagens PPM nomeada da forma <nome>_<seq>.ppm. Ou seja, se a sequência se chamar tracker, o primeiro arquivo será o tracker_00.ppm.
  • O vídeo será testado em dois casos: No primeiro haverá uma pessoa, no segundo duas.
  • As pessoas devem ser marcadas com cores diferentes, e a mesma cor para cada uma das pessoas.
  • Em nenhum momento as pessoas se cruzam.

Assim fica fácil! =)

Segue algumas screen shots:

Primeira pessoa aparecendo na imagem

Segunda pessoa aparecendo na imagem

Duas pessoas marcadas lado-a-lado

Como de costume, o código está no SVN em:

http://danilocesar.com/svn/pitracker/


E as imagens podem ser encontradas no site da matéria.

Liberando trabalhos da UFPR

Estou prestes a me formar, e lembrando-me de um convite do Arthur Furlan, decidi que estava na hora de liberar alguns trabalinhos legais que escrevi na faculdade.

Servidor/Cliente FTP usando raw socket.

Acho que este é o que será mais útil, principalmente aos meus colegas de Universidade.
Trabalho de redes1, a missão era implementar um cliente/servidor FTP baseado no Kermit utilizando raw sockets. Algumas pessoas fizeram utilizando UDP, mas ae fica sem graça né?! =)

Para controle de fluxo, foi implementado o pára-e-espera. Toda mensagem deve retornar um ack/nack. Obviamente, não há TCP nem IP, a “conexão” é feita sem endereçamento pelo cabo de rede. Os cabos devem ser ponto-a-ponto (até pode ser utilizado um hub, mas provavelmente ele mate todos os pacotes por serem inválidos).

Para detectar erros utilizo paridade-par (sux), e caso o cabo de rede seja removido e colocado depois de pouco tempo, o sistema deve continuar de onde parou. O arquivo final precisa ser consistente. Isto é muito complicado usando apenas paridade par, logo nas mensagens de fim de arquivo envio como dado o MD5, para garantir consistência.

O tamanho de cada arquivo nos pacotes está incorreto. Esta informação está sendo ignorada.

O resto está descrito no arquivo: Mensagens de atá 255 bytes, etc etc.

Como estava aprendendo GTK+ na época, fiz umas modificações para incluir uma interface gráfica. Ficou meio estranho pois incluí isto depois que o trabalho já estava pronto. De qualquer forma, para compilar esta versão, utilize o comando “make gui

No Unix, o pacote deve ser puxado com o comando:

svn co http://danilocesar.com/svn/redes1


Outro dia publico outros códigos.
[]‘ s

Danilo Cesar

Auto-completar no python do Mac OsX

Certa vez o Ademar comentou que o python tinha auto-completar por padrão. Pessoalmente nunca tinha percebido isto, e conversando com o Ramiro percebi o porquê: Mac OS X e Windows não inicializam os módulos readline e o rlcompleter sozinhos.

Procurando um pouco vi que habilitá-los é fácil.

Primeiro edite o arquivo ~/.pythonrc

#Enable syntax completion
try:
    import readline
except ImportError:
    print "Module readline not available."
else:
    import rlcompleter
    readline.parse_and_bind("tab: complete")

Após isto, em seu ~/.bashrc adicione:

export PYTHONSTARTUP=~/.pythonrc

Agora inicie o python e faça o teste.

Hello world para Native-Symbian

Certa vez eu quis explicar a um amigo porque escrever código em python para celular era mais legal que escrever código em C (native-symbian e não OpenC). Acho que hoje talvez eu consiga.

Segue os exemplos:

Python

print "Hello World"

C++-Epoc


// Hello World in C++, Epoc style (for Symbian OS)
#include < eikapp.h >
#include < eikdoc.h >
#include < eikappui.h >

class CHelloWorldAppUi;
class CEikApplication;
class CHelloWorldAppView;

class CHelloWorldApplication : public CEikApplication
{
public:
TUid AppDllUid() const;
protected:
CApaDocument* CreateDocumentL();
};

class CHelloWorldDocument : public CEikDocument
{
public:
static CHelloWorldDocument* NewL(CEikApplication& aApp);
static CHelloWorldDocument* NewLC(CEikApplication& aApp);
~CHelloWorldDocument(){};
public:
CEikAppUi* CreateAppUiL();
private:
void ConstructL() {};
CHelloWorldDocument(CEikApplication& aApp){};
};

class CHelloWorldAppUi : public CEikAppUi
{
public:
void ConstructL();
CHelloWorldAppUi(){};
~CHelloWorldAppUi(){};
};

static const TUid KUidHelloWorldApp = {0x10005B91};

GLDEF_C TInt E32Dll(TDllReason )
{
return KErrNone;
}

EXPORT_C CApaApplication* NewApplication()
{
return (new CHelloWorldApplication);
}

CApaDocument* CHelloWorldApplication::CreateDocumentL()
{
CApaDocument* document = CHelloWorldDocument::NewL(*this);
return document;
}

TUid CHelloWorldApplication::AppDllUid() const
{
return KUidHelloWorldApp;
}

CHelloWorldDocument* CHelloWorldDocument::NewL(CEikApplication& aApp)
{
CHelloWorldDocument* self = NewLC(aApp);
CleanupStack::Pop(self);
return self;
}

CHelloWorldDocument* CHelloWorldDocument::NewLC(CEikApplication& aApp)
{
CHelloWorldDocument* self = new (ELeave) CHelloWorldDocument(aApp);
CleanupStack::PushL(self);
self->ConstructL();
return self;
}

CEikAppUi* CHelloWorldDocument::CreateAppUiL()
{
CEikAppUi* appUi = new (ELeave) CHelloWorldAppUi;
return appUi;
}

void CHelloWorldAppUi::ConstructL()
{
BaseConstructL();

_LIT(message,"Hello!");
CAknInformationNote* informationNote = new (ELeave) CAknInformationNote;
informationNote->ExecuteLD(message);
}

fonte: http://www.roesler-ac.de/wolfram/hello.htm

Dá um real ae, dá um real ae!

O que não se faz por uns trocados?

Sugestões para outro fim de semana em Curitiba..

Relexões de um desocupado: Breve relato sobre peças de teatro:

PEQUENAS CAQUINHAS É MUITO BOM! MESMO!

Dentro de alguns minutos irei assistir a peça ‘Laranja Mecânica‘, adaptação do livro de mesmo nome. Atualizarei este post com a minha opinião quando voltar.

E que venha Tangos e Tragédias!

[Update 31/03/2008]: Laranja Mecânica é meio trash…

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?

Cursos e Palestras na Semana da Computação da UFPR

Sei que já está sendo bem divulgado, mas não custa nada divulgar aqui também.

Nos dias 22 a 26 de Outubro de 2007, o CEI, Centro de Estudos de Informática da UFPR, e o CATEI, Centro Acadêmico de Tecnologia da Informação da UFPR, estão realizando a a Semana da Computação. Nesta, será ofertado vários mini-cursos e palestras, dentre eles posso citar:

Palestras:

  • Construindo e Construindo pacotes Debian
    Será oferecida pelo Faw, do Debian-PR. Interessante para quem quer manter pacotes pro Debian, Ubuntu ou até mesmo pro Maemo
  • Overlays no OpenLDAP: facilitando a vida do administrador
    Ofertada pelo Andreas, da Mandriva Conectiva.
  • IA vs Programação convencional

Cursos:

  • PHPArthur Furlan – Trabalhei com o cara, ele é fera na parada.
  • Python – Luiz Carlos Geron – Já fiz este curso, uma execelente forma de iniciar-se na linguagem.
  • Programação em QtGustavo Boiko – O Cara do Qt4 da Mandriva.

Faça sua inscrição, escolha o que quer fazer, e nos vemos lá!

ps.: Brincadeiras à parte, o Boiko prometeu-me provar durante o curso que QT é muito mais que um toolkit gráfico. Essa eu quero ver! =)

PHP e Null Bytes issues

if (file_exists(realpath($_GET['teste'] . ".php"))){
echo 'OK';
}
else{
echo 'Fail';
}

Aparentemente esta verificação é bastante segura né?

Infelizmente não. O PHP usa o padrão de strings usado em C (aquelas terminadas com ‘\0′), o que gera um problema bastante conhecido chamado de Null Byte issue [1].

O que acontece se seu $_GET['teste'], aparentemente seguro, tiver um ‘\0′?
Sua função realpath vai verificar apenas o $_GET['teste'] e nem vai saber que existe um “.php”

Faça o teste:

http://localhost/labs/teste.php?teste=/etc/passwd%00

(%00 é o código hexadecimal aceito pelos browsers para o \0)

E o resultado:

OK

[1] http://en.wikipedia.org/wiki/Null_character