Archive for the 'Projetos' Category

Robô Shrek

Na última quarta-feira aconteceu a Feira de Informática Aplicada, ligada à Semana de Computação da UFSCar. Eu e Alphalpha resolvemos participar para testar o Arduino que eu tinha comprado no começo do ano. O tempo era curto, mas mesmo assim fomos em frente e juntamos algumas peças que sobraram do robô do GEDAI, um N800, um Arduino Duemilanove e montamos nosso próprio robô, chamado de Shrek.

Por que Shrek? Porque Shrek é um ogro, ogros são como cebolas (fedem são feitos de camadas), e nosso robô é feito de várias camadas simples que, juntas, fazem algo complexo.

Como funciona? O Arduino controla os motores, e recebe dados pelo USB (como uma porta serial) vindos do N800. O N800 está conectado em uma rede wifi, e recebe comandos via socket. Além disso, também envia vídeo e áudio para a aplicação (que no momento roda em um PC), e a aplicação envia os comandos e exibe o vídeo e o áudio.

Devido ao pouco tempo, apenas 3 comandos simples foram implementados (frente, giro à esquerda, giro à direita), mas nosso objetivo estava cumprido: a comunicação entre as partes estava funcionando direitinho, e agora podemos partir para incrementá-lo.

Todo o código está disponível no Google Code, e queremos levá-lo para o FISL (depois de arranjarmos motores melhores).

OMG Kitties!

Ontem foi o dia da toalha. Uma imagem vale mais que mil palavras.
Dia da Toalha 2009
À esquerda, minha querida toalha. Ao fundo, World of Warcraft (sim, cometi esse erro. Seja o que Deus quiser). E na frente, em primeiro plano, Ada.
Quem é Ada? Semana passada minha namorada veio perguntar se eu já tinha ouvido falar de Ada Byron, condessa de Lovelace (não confundir com Linda Lovelace, condessa de… clique no link e veja). Eu disse “claro, a primeira programadora”, e começamos a conversar sobre isso. Ela reclamou da falta de reconhecimento da importância dela, e acabamos concluindo que Ada é um nome legal.
Na sexta, fomos até a Arca de São Franscisco, uma entidade de proteção aos animais em São Carlos. E lá achamos essa gatinha, que deveria ter ficado em outro lugar, mas por incompatibilidade de gênios foi rejeitada e acabou ficando no apartamento mesmo. E resolvemos batizar ela como Ada. Diga-se que é a primeira vez que tenho um gato, o único animal de estimação que tive foi uma coelha, quando eu tinha uns 6 anos. Mas tô curtindo por enquanto =]
E acabei descobrindo que essa tirinha do XKCD realmente é verdade:

Randall Munroe, mestre.

Alguém aí tem dicas?

Hand

Ontem, enquanto gravava um DVD, comecei a generalizar os scripts que geram os feeds do post anterior. E disso surgiu o Hand, um gerador de feeds RSS.

Como funciona?

O meu objetivo inicial era gerar feeds para sites que não os disponibilizavam, recorrendo ao bom e velho screen scraping. Comecei fazendo o feed dos quadrinhos da Folha, o mais complicado, pois era necessário fazer autenticação de usuário e percorrer várias páginas para extrair links. Ao fazer o dos Malvados, segui a mesma estrutura de funções, e comecei a perceber que dava para generalizar bastante o processo.

Eis que surge Hand. No fundo é uma classe que implementa alguns métodos (build_date, generate_description, build_feed, process), e exige que você derive a classe e implemente o método generate_data. generate_data é um método que retorna uma lista de dicionários, com cada dicionário contendo os campos title, page_link, description, pubDate e guid correspondentes a um item do feed. Simples assim.

E funciona?

Yep. Mantenho quatro feeds no momento:

Onde posso ver esta maravilha?

O código está disponível no Google Code, mas ainda está bem cru, preciso empacotá-lo direito.

Quais os próximos passos?

O feed da Folha demora para ser gerado, porque toda vez que o script é rodado ele precisa consultar todas as páginas. Portanto penso em adicionar persistência, mas bem simples, um sqlite é mais que suficiente.

Além disso, quero descrever a configuração do feed (onde gerá-lo, qual template usar) num arquivo, e fazer a classe base ler essas opções. Assim fica ainda mais fácil fazer um novo feed.

Que nominho, hein?

Para quem não entendeu o nome: qual um bom para um gerador de feeds? Enquanto pensava, lembrei de uma música do NIN chamada ‘The Hand That Feeds’. E, além disso, ele também te dá uma mão para gerar feeds, certo? *TU-DUM-TISH*!

#iphonedev-br

Buenas. Estava eu no #python-br quando o Elyézer perguntou algo sobre Python e Objective-C. Indiquei o PyObjC, e ele perguntou se ele estava disponível no iPhone. Hmm, não está.

Mas achei mais alguém desenvolvendo pra iPhone!

Antes que ficasse off-topic demais pra #python-br, fomos para o canal #iphonedev-br no Freenode. E agora precisamos popularizá-lo!

Então, se você procura por um lugar em português para discutir as agruras do Objective C (que, na minha opinião, é beeeem melhor que C++ …), apareça no #iphonedev-br @ irc.freenode.org .

UPDATE: Se você não tem um cliente IRC instalado, o mibbit pode te salvar. Dica do Frank!

Um fim de semana produtivo

Um screenshot vale mais que mil palavras:

Ignorem os vales, valorizem os picos!

Brinde: com preguiça de escrever aquele monte de macros e boilerplate pra declarar um GObject? Use o gob! Aparentemente ele tá sem desenvolvimento ativo a algum tempo, mas funciona bem. Mas é claro que você vai escrever o código direitinho quando tiver tempo, certo? ;-D

Outro software interessantíssimo: G-Inspector. Esse faz mais tempo ainda que tá sem desenvolvimento, mas também funciona muito bem. Permite que você analise interfaces gráficas construídas com GTK+. Basta passar o mouse em cima e ele indica nome, posição na memória, e se você olhar direitinho, mais um monte de propriedades.

Happy Hacking!

P.S: Esperem sentados pela segunda parte do relato do FISL.

BugBrother

BugBrother é o protótipo (ou melhor, versão de desenvolvimento) do programa que eu estou desenvolvendo na Embrapa, o SACAM, que significa Sistema de Análise Comportamental de Animais em Movimento. Sua função, agora que a sigla é conhecida, é um tanto óbvia: Consiste em capturar imagens de uma entrada de vídeo e aplicar algoritmos de detecção de movimento, a fim de guardar uma trilha do movimento realizado pelo animal. A partir dessa trilha e após definir áreas numa imagem de referência é possível reportar estatísticas úteis para estudos, realizados geralmente por entomólogos. O experimento básico feito por eles é realizado com o auxílio de um olfatômetro em forma de Y, onde o inseto é liberado no pé do Y e nas outras duas extremidades são liberados feromônios ou outras substâncias. As estatísticas geradas são úteis no estudo de novas armadilhas químicas para insetos, muito menos danosas do que agrotóxicos.O funcionamento básico do programa passa por essas etapas:
- Capturar a imagem de uma entrada de vídeo (atualmente qualquer dispositivo compatível com Video4Linux)
- Aplicar um algoritmo de detecção de movimento e guardar as coordenadas (X,Y) geradas pelo movimento detectado.
- A partir dessas coordenadas calcular parâmetros como tortuosidade, desvio angular e velocidade do inseto analisado.
- Gerar relatórios.
Atualmente os dois primeiros itens estão funcionais, o terceiro está próximo de ser terminado e o último começará a ser desenvolvido na próxima semana.

Um ponto que possa ter causado interesse: digo que é o protótipo pois no momento ele está sendo desenvolvido usando Python + PyGTK + GStreamer. Devido a problemas de desempenho (principalmente em relação ao algoritmo de detecção) ele será implementado novamente, em C + GTK+ + GStreamer, após a conclusão e avaliação do protótipo. O que é uma pena, pois do ponto de vista de clareza de código e reaproveitamento será um retrocesso. Mas a vida não é sempre o que a gente quer =D