02
jul 11

Robótica e Computação nas Nuvens

Aí estão os arquivos da palestra que eu fiz no FISL 12 e no TDC 2011 sobre Arduino, Robótica e Computação nas Nuvens.

Update: também apresentei no CEFET Summer of Code em 29/07 😉

Abaixo da apresentação estão os fontes dos projetos que eu criei para demonstrar o uso do Google App Engine e o Arduino.

Vídeo do braço robô em ação

http://www.youtube.com/watch?v=3xjVs3T-rpk

Projeto web

Criado com criado com Google App Engine
Projeto Eclipse: Clouduino.zip
Usa o plugin do Google App Engine para eclipse.

Programa local

Programa que roda localmente e lê as informações da aplicação web..
Projeto Netbeans: ClouduinoLocal.zip
Usa a lib Jettison 1.2 para ajudar no parse do JSON.

Programa Arduino

Lê a porta serial e executa o comando enviado.

#include

Servo myservo1;
Servo myservo2;
Servo myservo3;

int pinServo1 = 10;
int pinServo2 = 11;
int pinServo3 = 9;
int velocidade = 5;
int pos;
int entrada;

void setup()
{
  myservo1.attach(pinServo1);
  myservo2.attach(pinServo2);
  myservo3.attach(pinServo3);

  myservo1.write(180);
  myservo2.write(0);
  myservo3.write(90);

  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0) {
    while (Serial.available()>0) {
      entrada = Serial.read();
      Serial.print(entrada);
      delay(1);
    }
      if (entrada == '1'){
  	sobe();
      } else if (entrada == '2'){
  	desce();
      } else if (entrada == '3'){
  	esquerda();
      } else if (entrada == '4'){
  	direita();
      } else if (entrada == '5'){
  	abre();
      } else if (entrada == '6'){
          fecha();
      } else {

      }
  }
}
void desce(){
   for(pos = 0; pos < 180; pos += velocidade) {                                          	       myservo1.write(pos);         	       delay(10);                                }    }    void sobe(){          for(pos = 180; pos>=1; pos-= velocidade) {
     myservo1.write(pos);
     delay(10);
  }
}
void esquerda(){
  for(pos = 0; pos < 180; pos += velocidade) {                                          	     myservo2.write(pos);         	     delay(10);                               }    }    void direita(){       for(pos = 180; pos>=1; pos-= velocidade) {
    myservo2.write(pos);
    delay(10);
  }
}
void abre(){
  for(pos = 0; pos < 90; pos += velocidade) {                                          	      myservo3.write(pos);         	      delay(10);                               }    }    void fecha(){           for(pos = 90; pos>=1; pos-= velocidade) {
       myservo3.write(pos);
       delay(10);
  }
}



07
jan 11

“I Hack’n Rio” vem aí! Será histórico!

O “I Hack’n Rio” vem aí! Você precisa ir. Será histórico!!!

O Hack’n Rio é um evento organizado pelo grupo SL-RJ em conjunto com várias comunidades amigas, como: ArduInRio, Android In Rio, DojoRio, PHP Rio, PythOnRio, Rio.pm, RioJUG, RubyOnRio e Ubuntu-RJ.

A ideia de se fazer este evento veio das próprias comunidades do Rio de Janeiro, que são bastante ativas e frequentemente organizam eventos e encontros técnicos.

Serão apresentadas palestras técnicas, painéis e oficinas sobre tecnologias livres (software e hardware 😉 ). Será uma ótima oportunidade para as comunidades unirem forças e apresentarem suas iniciativas num só lugar.

A expectativa inicial é contarmos com a presença de 1.000 pessoas. Bom né?

Este que vos escreve e o Alvaro “Turicas” Justen (comunidade ArduInRio) somos responsáveis pelo conteúdo e atividades relacionadas ao Arduino e eletrônica em geral. Teremos um espaço especial nos dois dias do evento só para hacks com nossa plaquinha favorita, e muitas outras atividades. Quem quiser, pode nos enviar sugestões de atividades para enriquecermos o espaço.

Se você faz parte de uma das comunidades de software livre do estado, então você também é parte do Hack’n Rio! Ajude a tornar o evento um sucesso procurando por patrocinadores, buscando por conteúdo relevante e chamando pessoas que fazem as coisas acontecerem – seja construindo coisas novas, seja contribuindo com projetos já existentes. Algumas sugestões:

  • Patrocinadores: empresas que usam software livre e querem contribuir para sua evolução; empresas prestadoras de serviço ou desenvolvedoras de softwares livres que querem encontrar talentos para contratarem (as empresas podem até mesmo fazer uma espécie de “O Aprendiz” e oferecer vagas de empregos, se desejarem) e divulgar seu nome e serviços.
  • Conteúdo: não pense só em palestras e mini-cursos, pois isso temos em qualquer evento. Pense em encontros técnicos para correções de bugs ou desenvolvimento de novas aplicações ou novas funcionalidades para aplicações já existentes.

Data:
08 a 09 de abril.

Local:
Cidade Universitária da UFRJ. (informações aqui).

Em tempo:

Apesar da palavra “hacker” atualmente estar associada a uma pessoa que explora falhas de segurança em computadores e tenta prejudicar outras pessoas, no sentido original da palavra ela designa alguém que sabe muito bem algum assunto. Por isso, o Hack’n Rionão é um encontro de usuários malignos de computador, mas sim de pessoas que conhecem muito bem computação, mais especificamente software livre, ou pessoas que estão buscando isto.

Nos vemos lá 😉

Abs.


08
ago 10

Comunicação Serial com Ruby e Program-ME (Arduino) no Ubuntu

Nesse post eu vou demonstrar como usar Ruby para fazer a comunicação entre um Arduino e um computador através da porta serial. No meu caso eu vou usar um Program-ME, que é o Arduino-Like da Globalcode. Mais detalhes do Program-ME podem ser vistos aqui, aqui, aqui, aqui e aqui. Tá bom, né? :p

Vou partir da premissa que você já tem o Ruby instalado e atualizado. Com as gems (RubyGems) e tudo, ok? O objetivo desse post não é ensinar a instalar e configurar o Ruby, e sim usá-lo com a porta serial do seu computador. Mais informações sobre como instalar o Ruby podem ser obtidas aqui, e as ruby gems aqui. Caso tenha tenha alguma dúvida ou problema nessa parte pode me enviar sua dúvida que vou tentar ajudá-lo.

Instalar SerialPort

Ruby-SerialPort é uma biblioteca que fornece facilidades para utilização das portas seriais do computador (padrão RS-232) usando Ruby.

Existem outras formas de acessar as portas seriais como JARs para aplicações Java, DLL para Windows, e várias outras maneiras. Mas para aplicações Ruby essa biblioteca é a mais usada e a que possuí melhor documentação, então fiquemos com ela.

Abra o terminal (Crt+Alt+T) e execute o comando abaixo para atualizar as gems:

sudo gem update

Para instalar a biblioteca SerialPort execute o seguinte comando.

 sudo gem install serialport

Vamos testar a instalação da biblioteca fazendo o seguinte:

Execute o irb.

Agora execute os comandos abaixo no console do “irb”. Se a resposta for “true”, então a biblioteca foi instalada corretamente.

require 'rubygems'
requile 'serialport'

Comunicação com o Program-ME / Arduino

Com a biblioteca instalada e testada vamos ver seu funcionamento com o Program-ME.
Vou fazer um teste usando os LEDs do Program-ME que estão nas portas digitais 7 e 8.
Um programa bem simples que irá tratar as informações recebidas através da porta serial. Irá acender os LEDs 7 e 8, se a porta serial receber ‘A’ ou ‘B’, respectivamente e apagar se a porta receber ‘a’ ou ‘b’.
int led_A = 7;
int led_B = 8;

void setup() {
  Serial.begin(9600);
  // define as portas como saida
  pinMode(led_A, OUTPUT);
  pinMode(led_B, OUTPUT);

}
void loop() {
  // testa se a porta serial está disponível
  if (Serial.available() > 0) {
    // le os dados da porta serial armazena na variavel 'entrada'
    int entrada = Serial.read();
    switch (entrada) {
    case 'A':
      digitalWrite(led_A, HIGH); //acende led_A
      break;
    case 'B':
      digitalWrite(led_B, HIGH); //acende led_B
      break;
    case 'a':
      digitalWrite(led_A, LOW); // apaga led_A
      break;
    case 'b':
      digitalWrite(led_B, LOW); // apaga led_B
      break;
    }
  }
}

Agora vamos ao programa Ruby.

require 'rubygems'
require 'serialport'

sp = SerialPort.new "/dev/ttyUSB0"

# use "while true do" se quiser executar sem parar
for i in 1..10 do
	sp.write "A"
	sp.write "b"
	sleep 1
	sp.write "a"
	sp.write "B"
	sleep 1
end

Para executar o programa execute a seguinte na linha de comando: ruby <nome_do_arquivo>.rb. No meu caso ficou assim.

ruby envia_dados_serial.rb

O programa vai apagar e acender alternadamente os dois LEDs por 10 vezes. Tudo muito simples, mas vamos a algumas explicações.

Na linha “4” a classe “SerialPort” irá criar o objeto responsável pela comunicação serial e passamos o endereço da porta serial como parâmetro. No meu caso é a “/dev/ttyUSB0”, mas poderia ser “/dev/ttyS1” ou até mesmo “COM7” no caso do Windows (Sim. Funciona no Win). Nessa linha também podemos definir a taxa de dados (rate)  por segundo para transmissão de dados serial. Por padrão o “SerialPort” utiliza “9600”, por isso não precisamos declarar explicitamente, mas poderia fazer algo assim: sp = SerialPort.new “/dev/ttyUSB0”, 9600. Mas deve ser a mesma que o programa do Program-ME/Arduino está configurada.

Já o comando “write” envia o texto para a porta serial configurada.

Você pode dizer: Pô! Mas porque testar com dois leds? O Arduino só tem um.

Bom! Por dois motivos: Primeiro. Eu achei o efeito com os dois LEDs mais legal. Mas é claro que você pode usar somente o LED na porta 13 do Arduino apagando as linhas desnecessárias, ou até mesmo usar duas portas digitais e fazer igual. Fica à seu critério. Segundo. Para mostrar, de novo, como esse Program-ME é bacana e facilita muito esse tipo de teste.  (Fight! Program-ME Wins) rsrsrsrsrs

Esse mesmo teste pode ser feito usando o “irb” diretamente. Como exemplificado abaixo.

Pretendo fazer um vídeo para demonstrar esse programa. Aguardem…

Conclusão

Tudo muito fácil. Bem a cara do Ruby, né?

Fiz o mesmo teste usando Java, e deu um “pouco” mais de trabalho. ;). Eu também pretendo fazer um post parecido mostrando como fazer a configuração da porta serial e a comunicação, só que usando Java. Mas vai ficar pra um mais tarde.

Espero que o post tenha sido útil

Abs.


01
ago 10

FISL 11. Impressões finais.

Eu já tinha falado um pouco do meu primeiro dia de FISL, terceiro do evento. Faltava falar do último dia. Eu estava muito pegado no trabalho e com problemas domésticos, mas finalmente sobrou um tempinho para eu poder registrar esse último dia.

#AkitaOnRails

Para começar bem o dia eu assisti a palestra do Fábio Akita, que falou sobre o “Ecossistema Ruby on Rails”. Pô! De novo? Ele que ele fez a mesma apresentação no Dev in Rio 2009. Mais ou menos. Basicamente foi a mesma apresentação, mas como ele mesmo disse: essa estava completa. No Dev in Rio ele teve que reduzir a apresentação para caber em uma hora. No FISL ele teve mais tempo e apresentou todo o material. Ele falou da filosofia por trás da arquitetura do Ruby (“Tornar as coisas simples fáceis, e as coisas complexas possíveis”).

Simplicidade. É uma das coisas que mais gosto no Ruby, particularmente no Ruby on Rails. Como ela incentiva o uso de boas práticas com a simplificação do trabalho manual. Você não perde tempo com configurações e coisa e tal, e fica com mais tempo para depurar e testar o seu código. Se sabemos que precisaremos de MVC, CSS, javascript, uma estrutura padronizada, então porque perder tempo fazendo tudo de novo a cada projeto. O Ruby on Rails faz tipo assim: Vamos combinar uma coisa. Deixa que eu me preocupo em fazer o trabalho manual, e você se  preocupa em fazer o trabalho criativo. Claro que temos que aprender como o RoR faz esse trabalho, mas não temos que aprender vários frameworks mesmo. Então porque não aprendemos um bem útil e produtivo?

Claro que ele falou da parte técnica, também.  Falou de tudo que é usado num ambiente de desenvolvimento Ruby profissional, como repositórios, integração, monitoramento, teste, servidores, frameworks, bancos de dados, etc..  E enriqueceu muito a apresentação mostrando as referências de sites com conteúdo para aprendizado do Ruby e Rails como o rubylearning.org, guides.rubyonrails.org, railscasts.com, e cursos presenciais e on-line aqui no Brasil.

Uma das coisas mais legais nessa apresentação foi que ele quis deixar claro que nenhuma linguagem/plataforma é “simplesmente” melhor que outra. Isso vindo dele, que é uma referência, é sempre legal. Temos que se acabar com essa discussão sem fim sobre o que é melhor o que. Um lugar para cada coisa e cada coisa em seu lugar, Correto?
Foi uma ótima apresentação.

Mais detalhes na apresentação do Akita aqui: (Fisl 11 – Ecossistema Ruby on Rails)

#AkitaOnRails 2

A segunda palestra que eu vi também foi com o Akita, mas com um enfoque diferente. E essa, em minha opinião, foi uma das melhores palestras que eu assisti no evento. Título: Dicas de Desenvolvimento Web com Ruby.

Ele apresentou dicas de como melhorar o desempenho de aplicações web. Os exemplos de implementação dados por ele foram todos para o mundo Ruby, mas as dicas podem muito bem ser usadas para qualquer aplicação web, independente de plataforma.

Por exemplo: redução do número de requisições e minificação de CSS e javascript, uso do javascript embaixo da página (perto do </body>) para agilizar o carregamento do conteúdo deixando os scripts para o final, utilização de asset hosts para aumentar o número de conexões simultâneas por domíno na hora de carregar conteúdo,  uso de CDN (Content Delivery Network), agendamento de tarefas e outras. Na verdade são mais de 30 técnicas e boas prática para desenvolvimento para web, mas ele apresentou apenas 6, e só essas já fariam milagres para 80% dos sites que eu conheço. :p

Algumas técnicas apresentadas utilizaram soluções RoR, mas podem muito bem ser implementadas com Java, .Net, PHP, e por aí vai. Algumas são tão simples que basta copiar e colar (ou coisa parecida), como as técnicas de diminuir as requisições e de colocar o javascript embaixo da página.

Mais que uma palestra com dicas, foi uma aula de como podemos fazer sempre o melhor, nos preocupando não somente em entregar, mas buscando otimizar ao máximo os produtos que criamos. Parabéns Akita!

Mais detalhes na apresentação do Akita aqui: (Fisl 11 – Dicas de Desenvolvimento Web com Ruby)

Funny Inveja Maker

Merece registro também a apresentação “Nokia N900 – Inveja Maker” com o Anahuac de Paula Gil. Ele mostrou os principais recursos do seu poderoso N900 (multitarefa, processador, memória, câmera, S.O. linux, etc, etc, etc.), e comparou com outros smartphones “menos providos” de tanta tecnologia. Foi muito engraçado, pois ele além de já ser um cara muito divertido, não perdeu tempo em sacanear todo mundo que não tinha um N900, principalmente os que tinham iPhones.

Ah. Ele fez a apresentação direto do N900 😉

#HoraExtra

Destaque especial para a galera do #HoraExtra aqui do Rio. Eles estavam super inspirados e criaram nada menos que seis aplicações nos quatro dias de FISL. Tá bom ou quer mais? Quer mais? Bem. Além disso organizaram  sessões de Dojo, que foram um sucesso total. Muita gente não conhecia o conseito do Dojo, e foi uma ótima oportunidade para divulgar. Mais? A galera teve diversas palestras aprovadas e no dia 23-07 Sylvestre Mergulhão e Henrique Crang arrebentaram com a mais falada apresentação do FISL: “Por que eu sou fanático por testes e você é um bundão”. Muito show.

Mas para mim o destaque da galera foi do desenvolvimento das aplicações. Todas simples e muito criativas (feitas com Rails e uma com Python). E era essa a idéia. Criar aplicações funcionais usando boas práticas de desenvolvimento, claro, e com todo mundo se divertindo. Inicialmente elas eram publicadas no Heroku, mas algumas já tem seu próprio domínio como a deRessaca e a Desoroscopo, a que eu mais gostei.

Confira aqui as aplicações:

E aqui a lista dos repositórios no Github:

http://github.com/horaextra/desoroscopo
http://github.com/horaextra/banheiro
http://github.com/horaextra/deressaca
http://github.com/horaextra/bullshitometro
http://github.com/horaextra/dojomap
http://github.com/horaextra/descertificador

Foi uma ótima participação de toda a galera. Parabéns a todos. E vamos aguardar o que será feito no próxmo FISL, a galera não vai se contentar com menos. rsrs

Conclusão

Adorei o FISL, e já estou pensando no próximo. Pude trocar idéias com pessoas de outros estados e que trabalham com tecnologias muito diversas. Isso enriquesse muito. A convivência com a diversidade amplia muito seus horizontes, tão acostumados ao dia a dia.

Conheci pessoalmente muita gente legal que só houvia falar ou só conhecia através da internet. Isso foi sensacional.

Outra coisa legal do evento foi estar em contato com profissionais que estão preocupados não em entregar o produto, mas sim em fazê-lo funcionar da melhor forma possível e entregando produtos de qualidade.  Isso é inspirador, e contagiante. É uma das coisas que mais gosto quando vou nesses eventos. Eu sempre volto revigorado e cheio de idéias novas.

Agora é aguardar o evento do ano que vem. FISL 12, eu vou 😉

Abs.


24
ago 09

Dev in Rio 2009: Eu vou, e você?

Dev in Rio 2009
Dia 14 de setembro acontecerá a Dev in Rio 2009. Organizado pelo Guilherme Chapiewski e pelo Henrique Bastos, dois caras muito conhecidos e atuantes na comunidade desenvolvedora nacional.

O legal do evento é que não será voltado à essa ou aquela tecnologia. A programação conta com palestrantes nacionais e internacionais que irão falar sobre Java, Ruby on Rails, Django, Open Source e desenvolvimento ágil.

Mais detalhes em:

Dev in Rio 2009

Guilherme Chapiewski

Henrique Bastos