Almir 'm3nd3s'

Ruby, Rails, Arduino, GNU/Linux, Software livre...

Meu Projeto De Conclusão De Curso, Usando Arduino

A ideia

Finalmente finalizei meu Trabalho de Conclusão de Curso (TCC), defendi/apresentei no dia 16 de novembro na FAESA, faculdade em que estou cursando graduação em Ciência da Computação.

O trabalho foi feito em parceria meu grande amigo Renato Tecchio. O título dado ao nosso trabalho foi “Aplicação embarcada para monitoramento de temperatura em câmaras climatizadas”. O objetivo principal do trabalho era implementar um sistema embarcado para medir, registrar e monitorar câmaras climatizadas.

Baseado nas exigências da Agência Nacional de Vigilância Sanitária (ANVISA), mais especificamente nas portarias que regem o controle de temperatura de câmaras para armazenamento de alimentos, a nossa missão era, em resumo, implementar um sistema embarcado que pudesse medir e registrar as temperaturas câmaras climatizadas, e além disso que o sistema pudesse informar e notificar ao responsável quando a temperatura estivesse fora dos níveis aceitáveis.

"Foto do protótipo - Módulo Registrador (Arduino)"

Ao final o trabalho foi implementado em dois sistemas, um módulo registrador (usando Arduino) e um outro sistema (chamamos de Servidor de Dados e Monitoramento), implementado em Ruby on Rails, que era responsável por consumir os dados registrados pelo(s) Arduino(s) e com isso fornecer relatórios e gráficos. Também era responsabilidade do Servido de Dados e Monitoramento notificar, via SMS e/ou e-mail, o usuário sobre qualquer discrepância detectada entre as capturas de temperatura (realizadas pelo Módulo Registrador).

Ambos os sistemas foram implementados com interface web. Agora imagina o trabalho para implementar um simples formulário HTML que enviasse os dados via POST e posteriormente gravasse os dados em um arquivo. Pois é, nós fizemos isso :).

O começo

Inicialmente pensamos em implementar tanto o hardware quanto o software, mas vimos que isso nos tomaria muito tempo, mais do que o que poderíamos dispor no momento.

Começamos então uma procura de um hardware que atendesse ao nosso projeto. O nosso orientador, o professor Marcelo Brunoro, indicou alguns hardwares existentes no mercado, mas o preço nos assustou um pouco. Partimos então para o “Saint Google” em busca de algum hardware que nos atendesse.

Entretanto, foi em uma conversa com outro amigo, outro Renato, o Renato Cunha que me fez a indicação do Arduino, e foi como que paixão a primeira vista. Fiquei impressionado com a quantidade de projetos já implementados com Arduino e a capacidade dessa plaquinha, não tive dúvidas e compartilhei a descoberta com o Renato Tecchio que também aprovou. Decidimos então então utilizar o Arduino em nosso projeto.

"Arduino Duemilanove"

Pesquisamos por quem revendia o Arduino aqui no Brasil, localizamos um revendedor e compramos as placas Arduino e Ethernet shields. Depois disso compramos um monte de “quinquilharias” para plugar ao Arduino, diga-se de passagem a maioria dessas “quinquilharias” foram adquiridas no Solda Fria, que eu recomendo.

Mãos a obra

Comentar sobre a parte de documentação (referências) é um pouco chato, caso tenha interesse em saber quais foram as referências que usamos para o trabalho peço que entre em contato, vou comentar aqui sobre o que utilizamos para o trabalho.

Utilizamos para nosso trabalho basicamente 4 componentes/dispositivos:

Na época em que compramos nossas placas Arduino ainda não tinham chegado aqui ao Brasil a Arduino Uno, que era versão mais nova das placas do Projeto Arduino.

Obviamente precisávamos de um sensor de temperatura, afinal o objetivo do nosso trabalho dependia da leitura de temperaturas. A escolha do sensor DS18S20 foi simplesmente pela facilidade de já existirem drivers/bibliotecas para sua utilização com o Arduino.

Por fim o DS1302, um relógio de tempo real (Real Time Clock - RTC). Talvez você não saiba, mas o Arduino não possui um relógio. Em nosso trabalho nós precisávamos de, além de registrar a temperatura, registrar junto a temperatura o momento em que a leitura foi realizada, por isso o uso de um RTC no projeto. A escolha do modelo DS1302 também foi por já existirem bibliotecas prontas para a comunicação do dispositivo com o Arduino.

Depois de tudo adquirido foi só juntar tudo e programar, e foi aí que o bicho pegou!

Aprendizado

Sem sombra de dúvidas foi uma experiência muito proveitosa!

Entendemos, por experiência própria, o que significa a expressão “Enxugar bits”. A Arduino Duemilanove possui 32K de memória flash, dos quais 30K são utilizada para armazenar o sistema embarcado. Possui também 2K de memória SDRAM, esta por sua vez é utilizada para rodar o programa embarcado.

Como puderam perceber o nosso projeto considerava o uso do RTC e o sensor de temperatura, isso implica em carregar as bibliotecas de cada um desses dispositivos. Além disso trabalho contemplava a implementação de um sistema web que permitisse ao usuário configurar o próprio dispositivo (descrição, temperaturas críticas, endereço mac, endereço IP, máscara, relógio, etc). Tudo isso e ainda todo processamento backend.

Resumindo, tivemos que enxugar muitas partes de nosso código para que isso tudo coubesse dentro de 30K, foi uma tarefa difícil, mas que conseguimos vencer.

Outra coisa aprendida é que saber C++ ajuda muito. O Projeto Arduino usa como linguagem para desenvolvimento dos sketchs (nome dado aos programas criados para arduino) uma linguagem baseada em C++. Nem eu e nem o Renato tínhamos conhecimentos sobre a linguagem C++, nós fomos aprendendo enquanto o trabalho se desenrolava.

Vimos também o poder dessa plaquinha. O Projeto Arduino tem o objetivo de fornecer uma placa de prototipagem, que pudemos comprovar, sem sombra de dúvidas, que cumpre com louvor seu objetivo de prototipar sistemas. Antes mesmo de terminar o nosso trabalho eu já estava com uma lista de projetos para brincar quando terminasse, e é exatamente o que farei daqui para frente.

E agora?

Agora é só diversão. Como comentei acima eu tenho uma lista de projetos para brincar, alguns muito simples, outros mais audaciosos (que pretendo fazer em parceria com o mano @tagliati e @amenderdesign). Para essa troca de experiências nós (@tagliati, @amendesdesign e eu) criamos uma lista para discussão, chamada OpenMadLab, onde algumas pessoas já estão trocando ideias. Já estamos inclusive gerindo para 2012 um evento, que está agarrado desde o início do ano devido minha ocupação com o TCC, mas agora com o seu término nada nos impede.

Ainda publicarei uma série de outros artigos sobre Arduino, contando com detalhes (e códigos) o que pude aprender nesse 1 ano de TCC/Arduino.

Esse post foi apenas para dar um ponto de partida em uma série e posts sobre Arduino e conta um pouco minha experiência com essa plaquinha, por isso não tem código ou coisas do tipo, mas o próximo com certeza terá. Estou pensando em partir de algo básico e com o tempo vamos incrementando e aumentando as funcionalidades ;).

Obrigado e até mais.

Que Venha O Rock’n Rails

Já tem um bom tempo que estou brincando/trabalhando com Ruby on Rails e é chegada a hora de compartilhar esse conhecimento com a comunidade, quem sabe instigar os colegas desenvolvedores a migrar de linguagem+framework, conhecer algo novo e ágil.

"Giran - Soluções e E-commerce"

Nós da @giran_br estamos organizando um evento único no nosso Espírito Santo, um evento totalmente voltado à linguagem Ruby, mais especificamente ao framework Ruby on Rails.

O Rock and Rails é um evento dedicado ao desenvolvimento em Ruby e a framework Ruby on Rails. Diga-se de passagem a aceitação e adoção nas empresas de todo o Brasil, e do mundo, está em franco crescimento. O evento é inédito no estado e tem como objetivos principais disseminar o conhecimento da linguagem/framework e dar uma ideia da quantidade de interessados/profissionais/entusiastas não apenas da linguagem mas do desenvolvimento para internet.

"Rock and Rails"

Os recursos obtidos junto aos parceiros, patrocinadores e incrições será revertido completamente para cobertura do evento e compra de brindes para sorteio ao final do evento.

Então meu amigo, com um valor simbólico de apenas R$ 20,00 você poderá, em um único dia, ter uma visão geral dos recursos e a agilidade que esse framework para desenvolvimento web pode lhe proporcionar e ainda fazer um ótimo networking com a galera presente.

Já temos confirmação de várias caravanas, até mesmo de outros estados \o/.

Se interssou? Então não perca tempo, o evento já está para acontecer, será no dia 01 de outubro de 2011, 011011 (binário!). Faça já sua inscrição.

Siga-nos no twitter (@rockandrails) e mande o seu “Eu vou ao @rockandrails!”. Ou mesmo pelo Facebook, qualquer ajuda na divulgação será muito bem vinda!

Na página oficial do Rock and Rails, você pode ver todos os detalhes do evento, a grade, os palestrantes, o local, “TUTO” sobre o Rock and Rails.

Eventos 2011/2

Para que você gosta de acompanhar os eventos de informática aqui da Grande Vitória - Espírito Santo:

1º Fórum Capixaba de Informatica - FOCAI

Em setembro o SENAI será a sede do Fórum Capixaba de Informática, FOCAI 2011. São esperadas cerca de 800 pessoas entre estudantes, profissionais e especialistas da área. O evento será realizado nos dias 02 e 03 de setembro no SENAI - Beira Mar.

O FOCAI é um evento que abrirá espaço para discussões e reflexões sobre o mercado capixaba, novas tecnologias, além de promover a integração e valorização dos profissionais e empresas do estado do Espírito Santo.

Constam na programação do evento: palestras, mesa-redonda e minicursos sobre temas ligados às tecnologias da informação e comunicação, segurança, infra-estrutura, sistemas livres e proprietários, etc.

Mais detalhes sobre a localização, programação do evento e inscrições podem ser obtidas no site do evento: http://www.focai.com.br.

Eu terei o privilégio de apresentar duas palestras: Do PHP ao Rails e outra sobre Arduino. Agente se vê por lá.

Liberdade Interativa

Evento organizado pela comunidade Tux-ES. Como o próprio nome diz, esse evento foi criado para manter a Interatividade entre a comunidade de Software Livre do Espírito Santo, onde todos poderão trocar idéias, compartilhar conhecimentos e, por que não, fazer um Networking.

Baseado nos eventos “Day”, o Liberdade Interativa acontece em um sábado a cada dois meses, contando, atualmente, com dois Workshops (ou Palestras) por dia.

O próximo LI será realizado no dia 24 de setembro, ainda sem local definido mas muito provavelmente será realizado na Faculdade Salesiana. Abaixo os tópicos que serão abordados nesta próxima edição:

  • Desenvolvimento Mobile com Ruby - Rodrigo Martins
  • SEO - Daniel Marcos
  • Hands On do Gentoo - Claudio / Spidey

Fique ligado no site da comunidade Tux-ES para obter mais informações

Rock’n Rails

O Rock and Rails será um evento dedicado ao desenvolvimento em linguagem Ruby e a framework Ruby on Rails, cuja aceitação e adoção nas empresas está em franco crescimento.

Este evento é inédito no estado do Espírito Santo e tem como objetivos principais disseminar o conhecimento da linguagem/framework e obter uma ideia da quantidade de interessados/profissionais/entusiastas não apenas da linguagem mas do desenvolvimento para internet.

O evento está sendo organizado pela equipe da Giran Ecommerce Solutions e não terá fins lucrativos: todos os recursos obtidos junto aos parceiros, patrocinadores e incrições será revertido para cobertura do evento e compra de brindes para sorteio ao final do evento.

A grade ainda está em planejamento, entretanto já temos dia, local e horário: 01 de outubro de 2011 (sábado) de 8:00h até 17:00h no Anfiteatro da UVV, Vila Velha.

Fique de olho no website do evento, que será liberado ainda está semana, clique aqui para obter mais informações bem como sua inscrição.

Deploy De Aplicações Rails Com Capistrano

Me lembro do tempo que eu perdia fazendo subir minhas aplicações PHP para servidor de produção (deploy): tinha que criar o banco de dados, fazer um dump do banco de dados de desenvolvimento para carregar o banco de dados de produção, checar as permissões dos paths utilizados para upload, etc.

Quanto tinha atualização para fazer era uma preocupação danada, eu precisava checar quais arquivos foram atualizados para só subir estes e assim não correr o risco de sobrescrever alguma configuração própria do ambiente de produção.

Há algum tempo eu parei de desenvolver aplicações em PHP para trabalhar com o framework Ruby on Rails, aproveitando a deixa, tenho uma palestra onde conto um pouco como está sendo essa migração e o que ganhei com isso. Dentre as facilidades que ganhei ao migrar para o framework Rails está o deploy - que significa implantação em inglês - de aplicações via ferramenta chamada Capistrano.

O Capistrano é uma ferramenta (gem) para deploy de aplicações web. Inicialmente utilizada para deploy de aplicações Ruby on Rails ela também pode ser personalizada para fazer deploy de aplicações não Rails. O Capistrano é tipicamente instalado em uma estação de trabalho e usado para implantar o código fonte de sua aplicação, via um gerenciador de código fonte (SCM), em um ou mais servidores previamente configurados.

Para utilizar o Capistrano tenha em mente que:

  • É necessário acesso SSH ao servidor de produção, onde será realizado o deploy de sua aplicação. O Capistrano não suporta FTP ou telnet;
  • O servidor de produção precisa ter um shell compatível com o padrão POSIX, ou seja, precisa ter um: bash, sh, etc. Resumidamente não é aconselhável para servidores MS Windows, mas acredito que seja possível se você tiver força de vontade e instalar um pacote POSIX em seu servidor MS Windows;
  • Trabalhe com chaves SSH, é muito mais prático e fácil, permitindo que o processo fique mais automátizado.

O Capistrano possui um arquivo chamado Capfile. Este arquivo é responsável por incluir as bibliotecas necessárias, bem como os helpers utilizados para configurar o deploy de sua aplicação.

Instalação

Por se tratar de uma gem a instalação é muito simples e segue o padrão já conhecido:

Liquid error: ClassNotFound: no lexer for alias ‘shell’ found

Ou se preferir adicione-o ao seu projeto Rails por meio do arquivo Gemfile:

Configuração via Gemfile.
1
  gem 'capistrano'

Capificação

O primeiro passo após instalar o Capistrano é “capificar” sua aplicação. Este processo consiste em transformar sua aplicação gerenciável pelo Capistrano. O processo é simples, rode o comando abaixo na raiz de sua aplicação:

Tornando o projeto gerenciável pelo Capistrano
1
2
$ cd my_app/
$ capify .

Este comando criará dois arquivos em sua aplicação, o primeiro é o já citado Capfile, este é o arquivo responsável por carregar as bibliotecas necessárias ao Capistrano.

O segundo arquivo é gerado o config/deploy.rb, e este é o arquivo que iremos utilizar para configurar nosso deploy. Em geral este será o único arquivo que precisaremos alterar para configurar nosso deploy.

Configuração

Conforme já mencionado, a configuração é feita através do arquivo config/deploy.rb, o formato é muito semelhante ao Rakefile. O primeiro passo é informar o nome de nossa aplicação, fique a vontade para escolher um nome:

Definição de nome da aplicação
1
set :application, "almirmendes_blog"

Agora precisamos informar ao Capistrano onde reside o código fonte de nossa aplicação, para este exemplo estou considerando que minha aplicação está hospedada no Github.

Definição do repositório e versionamento
1
2
set :repository, "git@github.com:m3nd3s/almirmendes_blog.git"
set :scm, "git"

Agora vamos configurar o caminho onde a aplicação será implantada/instalada:

Diretório onde a aplicação será hospedada no servidor
1
set :deploy_to, "/var/www/almirmendes"

Além do path/caminho nós precisamos informar ao Capistrano o(s) endereço(s) de nosso servidor de produção, segue um exemplo:

Hosts dos servidores que utilizaremos para deploy
1
2
3
role :app, "almirmendes.com"
role :web, "almirmendes.com"
role :db, "almirmendes.com", :primary => true

Nesse ponto pode surgir uma dúvida: “Porque preciso informar três vezes o endereço?”. Eu também fiquei com essa dúvida pela primeira vez, mas a explicação é muito boa e traz consigo outro recurso do Capistrano.

Perceba que o atributo é diferente para cada um deles, isto porque em alguns casos sua aplicação está distribuída em servidores diferentes - no meu caso estou usando o mesmo servidor para a aplicação, o banco de dados e servidor web - e possivelmente você queira definir tarefas para serem executadas apenas em um ou outro servidor. Resumidamente, o Capistrano lhe fornece a opção de definir comandos/tarefas para serem executados em um servidor específico, e não em todos.

Como em nosso exemplo estamos usando o mesmo servidor para tudo, existe uma configuração rápida para substituir as linhas citadas acima, assim a configuração mais clara e simples. Substitua as três linhas acima, caso queria, pela linha abaixo:

O mesmo apresentado acima, entretanto em uma linha só
1
server "almirmendes.com", :app, :web, :db, :primary => true

Precisamos informar também o usuário que será utilizado durante o processo de deploy. É importante que este usuário tenha permissão de escrita na pasta onde a aplicação será instalada:

Usuário que será utilizado para o acesso SSH ao servidor
1
2
set :user, "almir"
set :use_sudo, false

Por padrão o Capistrano tentará executar certos comandos com o [cci]sudo[/cci]. Se você estiver fazendo deploy de sua aplicação em um servidor compartilhado é muito provável que você não tenha acesso de superusuário e tão pouco o [cci]sudo[/cci] configurado, portanto vamos configurar o Capistrano para não utilizar o [cci]sudo[/cci] - conforme visto acima.

Neste ponto já temos o que é suficiente para um deploy “saudável”, entretanto gostaria de passar mais algumas opções que podem ajudar:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Necessário para integração entre Capistrano e RVM
$:.unshift(File.expand_path('./lib', ENV['rvm_path'])) # Add RVM's lib directory to the load path.
require "rvm/capistrano"                  # Load RVM's capistrano plugin.
set :rvm_ruby_string, '1.9.2'

# A primeira, permite definir o número de releases que serão armazenados no servidor. 
# Essa configuração permite que você possa manter versões anteriores de sua aplicação 
# no servidor e com isso posssa realizar rollback caso seja necessário 
set :keep_releases, 5

# A última linha é importântissima pois permite que o Capistrano utilize do recurso de 
# forward agent do SSH, esse recurso permite que o SSH carregue sua chave, previamente 
# configurada e carregada em sua estação de trabalho, para o servidor. Permitindo assim 
# que de lá o Capistrano consiga acessar o repositório no Github.
ssh_options[:forward_agent] = true

Deploy

Chegou a hora de fazer o deploy de nossa aplicação, esse processo é feito em duas etapas: setup e o deploy propriamente dito. Antes, vamos checar se todas as dependências foram cumpridas:

1
cap deploy:check

Se tudo correr bem, rode o comando setup para preparar o ambiente para o deploy:

1
cap deploy:setup

O setup é necessário para criar a estrutura base que será utilizada para gerenciar os deploys, abaixo um exemplo da estrutura que é criada no setup:

Estrutura base do path utilizado para deploy
1
2
3
4
5
6
7
8
9
[deploy_to]
[deploy_to]/releases
[deploy_to]/releases/20080819001122
[deploy_to]/releases/...
[deploy_to]/shared
[deploy_to]/shared/log
[deploy_to]/shared/pids
[deploy_to]/shared/system
[deploy_to]/current -> [deploy_to]/releases/20100819001122

Basicamente são duas pastas e um link simbólico. releases/ é a pasta que manterá os releases dos deploys já realizados. A cada deploy criado uma pasta será criada nesse diretório. A pasta shared/, como o nome já descreve, é utilizada para compartilhar configurações, logs e arquivos que devem ser mantidos mesmo após um deploy. Dentre eles temos os logs, pids e uploads.

Antes de fazer o deploy nós precisamos criar o banco de dados e seus respectivos acessos e permissões. Esse processo deve ser feito manualmente e imagino que você saiba como fazer isto.

Após criar o banco de dados nós precisamos configurar o database.yml que será utilizado no servidor. Uma vez configurado envio para a pasta shared/ no servidor de produção e adicione a seguinte task ao seu arquivo config/deploy.rb:

Personalizando o deploy
1
2
3
4
5
6
after :deploy, 'deploy:database'
namespace :deploy do
    task :database, :roles => :app do
        run "cp #{deploy_to}/shared/database.yml #{current_path}/config/"
    end
end

Essa task será executada assim que a task denominada :deploy for finalizada e copiará o arquivo database.yml para o path config/. Hora de fazer o deploy. Para fazer o deploy rode o comando:

Fazendo o deploy
1
 $ cap deploy

Uma série de comandos será executado, ao final, se nenhum erro ocorrer, sua aplicação terá uma estrutura semelhante à exibida acima e o deploy terá sido executado com sucesso.

Entretanto, acredito que ainda há mais um passo a ser feito, uma vez realizado o deploy, o Capistrano precisa reinicializar a aplicação e normalmente ele faz isso reiniciando o servidor web. Mas sabemos que não é necessário reinicializar o servidor web para isso, bastaria atualizar a data de alteração do arquivo [cci]tmp/restart.txt[/cci] existente na sua aplicação. Vamos sobrescrever a tarefa responsável por isso (repare que o código está dentro do namespace :deploy):

Substituindo o restart da aplicação
1
2
3
4
5
namespace :deploy do
    task :restart, :roles => :app, :except => { :no_release => true } do
        run "cd #{current_path} && touch tmp/restart.txt"
    end
end

Caso necessário rode novamente o comando para deploy: cap deploy. Pronto, aplicação implantada. Quando um deploy é realizado um link simbólico é criado dentro do caminho configurado para deploy, via diretiva deploy_to, de nome current. O current aponta para o último release criado.

O artigo ficou grande, mas espero que tenha informações úteis para lhe ajudar. Obrigado e até mais.

Review: Ciclo De Palestras Do CEET Vasco Coutinho

Graças a iniciativa do Centro Estadual de Educação Técnica (CEET) Vasco Coutinho em criar o Ciclo de Palestras, um evento do Projeto Enriquecimento Curricular (PEC), e de um camarada que, ao que me pareceu, foi fundamental para a realização do evento (o Marcelo Victor), e o apoio da Giran, eu e meu amigo André Tagliati tivemos a honra de palestrar sobre os temas: Do PHP ao Rails e Arduino Project.

[caption id=”” align=”aligncenter” width=”250” caption=”Trecho da palestra: Do PHP ao Rails”][/caption]

Eu já estive no CEET VC há um bom tempo, se não me falha a memória foi em um ENCASOFT (Encontro Capixaba de Software Livre) que realizamos lá, e retornar lá foi muito legal.

Talvez poucos saibam, mas se tem uma coisa que eu faço e GOSTO MUITO é repassar conhecimento, não sei exatamente de onde tirei isto, talvez pelo fato de tudo que eu aprendi foi com pessoas que gostavam de fazer isto também, talvez porque eu me sinta responsável por ajudar as pessoas, talvez seja porque eu desejo que as pessoas aprendam mais e sejam pessoas melhores, enfim, essa oportunidade de palestrar no CEET VC foi mais que especial: um público de jovens que um dia sonham em ser profissionais de tecnologia e ganhar dinheiro fazendo o que gostam.

Na palestra sobre Rails, essa eu fiz alone mas contei com o apoio no mano Leo Hackin, tentei repassar minha experiência como (ex)programador PHP e quais foram os motivos que me levaram a migrar para o Rails. Como de costume a palestra foi conduzida com um leve tom de descontração e leves brincadeiras. Foi durante esta palestra que eu pude falar sobre algo que me incomoda ver acontecer com as pessoas: esperar o dia perfeito para começar algo.

Sendo breve, muitas pessoas adiam as coisas que gostariam de fazer, esperam o dia em que elas tiverem tempo suficiente para fazer ou simplesmente adiam sem motivo algum, talvez por falta de interesse ou mesmo stress mental. Vendo todos aqueles alunos eu falei da necessidade de começar algo.

  • Se você tem vontade de aprender uma nova linguagem: COMECE!
  • Se você quer aprender inglês: COMECE!
  • Seu interesse é em se tornar um profissional melhor: COMECE!
  • Comece!

Pense alguns instantes todas as vezes que você deixou de fazer algo porque não tinha tempo suficiente para fazê-lo naquele momento. Pensou? Agora some tudo e pense que se você tivesse começado naquele dia, ao menos um pouco do que você queria fazer, e perceba o tempo perdido, o quanto poderia já ter feito se tivesse começado e feito ao menos um pouco.

Quer aprender uma linguagem nova? Comece! Leia ao menos um parágrafo por dia, mas leia e continue, dia após dia você verá que as coisas irão fluir. É disto que falo, comece e vá aos poucos, mantenha o ritmo e aos poucos as coisas irão acontecer.

Agora voltando ao assunto, a palestra de Rails foi linda! Até a secretária de educação assistiu minha palestra (e me viu falar a palavra “merda” durante a palestra). Os que ficaram antenados tiveram a oportunidade de ganhar uma lindíssima camisa da Giran que seria dada ao primeiro aluno que fizesse pergunta.

Após o almoço eu e o amigo André Tagliati palestramos sobre o Arduino Project, este foi o momento mais alto do dia, pelo menos para nós. Graças a uma ideia do Tagliati em utilizamos o Arduino para passar os slides utilizando o controle remoto da televisão (minha esposa não gostou muito disso, ela teve que passar os canais na própria TV). Em um segundo momento eu falo sobre esta experiência, mas posso garantir que foi uma experiência muito proveitosa e instigante para todos, especialmente os alunos que, finalizada a palestra, vieram em massa conhecer a plaquinha e como nós estávamos fazendo para passar os slides com controle de TV.

Assim como foi feito na primeira palestra, nós demos uma camisa da Giran para o primeiro aluno a fazer pergunta. Ao final da palestra o Leo Hackin falou rapidamente sobre mercado de trabalho e o futuro que eles tem bastando para isso correrem atrás pois o momento é muito favorável, afinal quando foi a última vez que se viu tantos eventos, a maioria gratuitos, e pessoas interessadas em repassar conhecimento e trocar ideias?

Aos que não puderam ir, mesmo diante de tantos convites, só lamento. Aos que foram e também aos que comentaram no blog interessados no Arduino Hack Day, aguardem boas novas, é provável que aconteça antes do imaginado.

Para finalizar deixo meus calorosos agradecimentos ao Marcelo Victor que nos (Giran) contactou e convidou para palestrar, a coordenadora do curso Zirlene e a todos que participaram do evento.

Arduino Hack Day - vE.S

Então galera! Esse é um post rápido com a intenção de identificar os interessados em participar de um evento sobre Arduino. aqui em Vitória - Epírito Santo.

Arduino

Eu e meu amigo @tagliati estamos organizando um evento para falar/codar/brincar/hackear/.*  Arduino, e na medida do possível criar alguns monstrinhos. A ideia principal é seguir o formato do Arduino Hack Day, um Hack Day, onde uma galera interessada no assunto se reúne para bater um papo, trocar algumas ideias e criar coisas bacanas!

Se você gosta de eletrônica, adora programar, acha irado a galera que cria algo bacana como Super Mario Bros on an 8x8 LED matrix mas não tem conhecimento algum sobre eletrônica, não sabe o que é um resistor e mesmo assim gostaria de brincar de Dr. Frankenstein, então levante a mão mouse e comente o post para que possamos nos comunicar e marcar algo.

Não somos experts no assunto mas temos interesse em aprender.

Ah! Você não tem uma Arduino? Não se preocupe, eu e @tagliati temos e acho que já é o suficiente para brincarmos com alguma coisa. Se você se interessar em comprar uma nós podemos indicar onde conseguir ;).

Vlw!

O Meu Jeito De Ler Livros

O título pode parecer estranho a primeira vista, afinal as pessoas costumam ler livros lendo! Arruma-se um lugar tranquilo, com o mínimo de perturbação da força possível, senta-se e inicia-se a leitura.

Entretanto, eu, assim como a maioria das pessoas que fazem faculdade ocupam quase todo seu tempo livre para estudar e conseguir finalizar a faculdade.

Pois é! Eu ainda estou agarrado na faculdade mas se Deus permitir este ano de 2011 será o meu último ano da faculdade.

O tempo “livre” que eu tento eu aproveito para resolver minhas pendências da faculdade: fazendo exercícios (que normalmente valem nota), estudando para provas, fazendo trabalhos, escrevendo meu TCC, etc. Isso acaba por consumir boa parte do meu tempo à leitura direcionada a assuntos acadêmicos, portanto assuntos como TDD, BDD, outras linguagens de programação, desenvolver e melhorar técnicas de programação, gerência de projetos com XP + Scrum e outras coisas mais que não sejam assuntos técnicos acabam ficando em segundo plano.

Maaaasss! Não posso parar, meu trabalho depende disso, mesmo que não dependesse eu gosto muito de ler sobre assuntos não técnicos também. Ainda não tenho meio de transporte próprio, portanto utilizo o coletivo para qualquer movimentação casa->trabalho->faculdade->casa->?. Então a primeira coisa que você provavelmente irá pensar é que eu leio livros no ônibus, errado!

Eu tenho problema que eu sequer consigo parar por um minuto e olhar para meu celular ou para ler algumas frases de jornais alheios (também aproveito minhas viagens nos coletivos para ler jornal dos demais passageiros, mas apenas os títulos maiores e as figurinhas.. rsrsrs). Bastam alguns segundos com o olhar fixo em alguma leitura e eu começo a ficar tonto, e se eu persistir a dor de cabeça é certa.

Hoje minha rotina é: casa -> trabalho -> faculdade, nesse percurso de casa para o trabalho existe um trecho que faço a pé e é justamente nesse ponto que eu inicio minha leitura. Sim! Eu leio andando nas ruas. :P

Por mais estranho que pareça, eu não consigo ler em ônibus mas consigo ler andando nas ruas. Assim que desço do coletivo eu abro minha mochila e pego o livro da vez (desta vez estou lendo o livro “Oportunidades disfarçadas” de Carlos Domingos) e inicio minha leitura. Atravesso ruas e ruas lendo, as vezes penso que alguém poderia me achar doido, mas após alguns segundos eu desconsidero.. heh.

Quando preciso atravessar as ruas eu passo sempre nas faixas e enquanto inicio a travessia eu paro a leitura, depois volto novamente.

Pois é, é assim que leio meus livros, um pouco diferente a forma, mas foi deste jeito que eu consegui ler alguns bons livros aqui da Giran.

Meu Ambiente De Trabalho Em 7 Itens

Inspirado pelo post do Jeveaux, que por sua vez foi inspirado pelo post da Loiane, eu resolvi postar sobre meu “ambiente” de trabalho. Na verdade é uma seleção de ferramentas que fazem parte do meu dia-a-dia como desenvolvedor. Tanto em casa (programando por hobby ou freela) como no trabalho (Giran) o set de ferramentas é praticamente o mesmo.

1. MacOS e GNU/Linux

Há mais de 10 anos que utilizo o sistema operacional GNU/Linux. No dia 27/05/2010 eu passei a fazer parte da equipe de desenvolvedores da Giran, onde conheci outro SO bacana (ainda assim prefiro o GNU/Linux), o MacOS X. Sendo unix based foi fácil me localizar, o único problema foi acostumar com o teclado uma vez que já que estava acostumado a utilizar o padrão ABNT.

[caption id=”” align=”alignleft” width=”200” caption=”Caneca Linux”]http://www.flickr.com/photos/duhhquagliato/4478349112/[/caption]

Eventualmente costumo fazer palestras sobre software livre e sempre que falo de minha experiência como Linuxer a primeira coisa que falo é: “Eu uso GNU/Linux porque gosto e pronto!”. Me acostumei com o poder das ferramentas e de personalização que tenho em SOs Linux, hoje já não me vejo utilizando o Microsoft Windows para trabalhar.

Já utilizei as distros: Red Hat, Conectiva, Slackware, Debian, Archlinux e hoje estou utilizando Ubuntu em meu notebook. Todas são ótimas, cada uma com sua filosofia e portanto não acho “adequado” dizer que uma é melhor e outra é pior, apenas que cada um tem sua filosofia e seu público.

2. Mozilla Firefox

Gosto muito do Mozilla Firefox por seu grande conjunto de addons. Concordo que é um navegador um tanto quanto pesado, mas mesmo assim ainda acho ele o melhor para navegar e utilizar para desenvolvimento de aplicações Web. “Plugado” ao meu Mozilla Firefox tenho os plugins:

  • Desenvolvimento: FireBug (fantástico), ScreenGrab, Webdeveloper e HTML Validator;
  • Outros: Smart Bookmarks Bar e gTranslate;

3. (Mac|G)?Vim

[caption id=”” align=”alignright” width=”240” caption=”Vim”]Vim[/caption]

Imbatível! Trabalho com desenvolvimento Web nas linguagens PHP e Ruby on Rails, eventualmente na linguagem Python. Algumas pessoas torcem o nariz quando se fala de usar o Vim (ou suas variantes) para desenvolvimento alegando que usar um editor como este é perder produtividade. Essas pessoas dizem isso porque não conhecem ou não sabem utilizar o Vim, portanto acham que ele é primitivo e ultrapassado.

Não digo que é a melhor IDE do mundo, mas PRA MIM é a melhor IDE de desenvolvimento. Repare, eu disse PRA MIM! Com algumas configurações no .vimrc e mais alguns plugins você terá uma IDE poderosíssima com: auto-complete, syntax highlight, snippets (para N linguagens), abas, navegação em árvore, multiplas janelas e uma penca de recursos de dar inveja a qualquer outra IDE.

4. Git

Conheci o Git na mesma época em que conheci o MacOS X, ou seja, quando entrei para Giran. Hoje conheço pouco dessa ferramenta para controle de versão, mas o suficiente para saber que desenvolver sem ela, ou outra ferramenta de controle de versão, é viver perigosamente :-D.

Na Giran utilizamos a dupla Git+GitHub, mas em casa, para meus projetos particulares, eu utilizo o Git configurado em meu webserver (webbynode) como repositório central e acesso via ssh. Para compensar a falta de uma interface como a do GitHub eu configuro o Redmine para ler o repositório e me mostrar os detalhes do projeto. Não é como um GitHub, mas quebra um galhão.

5. Bash (Terminal)

Sou fã dessa “tela preta”! na verdade o bash é um dos vários interpretadores que os sistemas unix based podem ter. Mas como ele é o mais comum e costuma ser o default dos sistemas operacionais as pessoas acabam confundindo. Trabalhei durante alguns anos como analista de sistemas linux e por vários e vários meses essa tela preta foi minha ferramenta principal de trabalho. Cheguei a ter, em meu monitor de 21” Widescreen, mais de 9 terminais abertos. Falando em bash/terminal gostaria de citar também alguns comandos úteis que vale a pena conhecer: synergy (Synergy plus), ssh, sed, vim, screen, awk.

6. Gmail

O Gmail quando utilizado de forma organizada, especialmente usando uma técnica como o GTD, é sinônimo de produtividade, enquanto o Gmail sem qualquer mecanismo de organização é sinal de estresse, dor de cabeça e improdutividade. Há alguns meses resolvi tentar o GTD (Getting Things Done).

Confesso não utilizar toda a metodologia na íntegra, mas consegui abstrair algumas ações que me ajudam muito no dia-a-dia. A principal delas é manter minha inbox (de todas as minhas contas) zerada. Uso meu Gmail de forma a organizar TODAS as mensagens em tags (labels) e com a ajuda dos filtros eu mantenho tudo organizado e a mão sempre que preciso pesquisar algo.

Também faço algo no meu Gmail que muitas pessoas passaram a esquecer quando conseguiram sua conta no Gmail: deletar mensagens que não servem para mais nada. Seguindo um dos princípios do GTD, se algo não será necessário agora e nem no futuro, nem mesmo para referência: delete-a!

7. Rails, Python e PHP

[caption id=”” align=”alignleft” width=”240” caption=”Python e Ruby”]Python e Ruby[/caption]

Durante anos trabalhei PHP, uma linguagem poderosíssima. Entretanto senti uma certa deficiência em alguns aspectos que me fizeram repensar o desenvolvimento e aplicações em PHP. Há alguns meses tive oportunidade de trabalhar em projetos em Ruby on Rails e em Python (Django e Flask) e vi que essas linguagens tinham uma produtividade muito superior ao que eu estava habituado a fazer em PHP. Resumindo, passei a utilizar Rails e nos próximos meses pretendo lançar um projeto pessoal em Django (graças ao chato do Francisco Souza que não pára de falar em Django).

Essas são as 7 ferramentas que fazem parte do meu dia-a-dia e que compõem 90% do meu ambiente de trabalho. Ainda existem outras coisas que utilizo mas não são diretamente ligadas ao desenvolvimento: OpenOffice (até mesmo no MacOS), Pidgin/Adium, Twitter, Xbox + SF4 + Ganhar do Leo Hackin (meu arqui-rival em Street Fighter IV).

Pois bem, agora deixo a bola (ui!) com:

“Retrô” Liberdade Interativa 2010

Cobrado incessantemente pelo @franciscosouza , diga-se de passagem um camaradinha muito gente boa, finalmente resolvi parar alguns minutos para criar este post.

Para quem não conhece o Liberdade Interativa é um evento que tem como objetivo o compartilhamento de informação e conhecimento através de pequenos eventos, com palestras relativamente rápidas, de 30 a 40 minutos, realizadas por pessoas da própria comunidade aqui do Espírito Santo.

Por várias vezes me peguei pensando sobre as pessoas da comunidade e suas capacidades, via pessoas com conhecimentos sólidos sobre servidores e serviços linux, por exemplo, via profissionais que tinham conhecimento e vontade de participar.

Paralelo a isso eu via inúmeras pessoas que corriam atrás de aprendizado, comentavam que fuçavam a internet atrás de tutoriais, artigos, livros e tudo que lhes pudessem agregar conhecimento para aprender uma determinada linguagem de programação, para aprender como configurar um determinado serviço e outros até com necessidades simples, algo como o que fazer para tocar suas músicas favoritas em MP3 no SO Linux.

Então conversei com alguns amigos e juntos resolvemos criar um evento em que todos estariam convidados tanto a palestrar como a participar. Por ser um evento simples só precisaríamos de um local com datashow, algo que podemos encontrar facilmente nas salas de aula das faculdades locais. Foi assim que surgiu o Liberdade Interativa, chamado de LI.

No dia 12 de junho - dia dos namorados e dia do jogo da Argentina pela copa do mundo - realizamos o I LI tendo @franciscosouza e @ale_borba como palestrantes, os assuntos eram Python e Linux Desktop, um bom start para o evento, infelizmente poucas pessoas compareceram ao evento mas tinhamos que “dar um desconto”, afinal era um sábado de manhã e ainda dia dos namorados e dia de jogo da Argentina. Mesmo assim gostei de ver os meninos falando sobre algo que gostam para pessoas interessadas em aprender.

Alguns meses depois, em 19 de Agosto, foi a vez de @ra_pha , @franciscosouza e @m3nd3s falar sobre Bacula, Django e Iptables (firewall) no II LI, nesta segunda edição do evento contamos com a ajuda e apoio do professor Gilberto Sudré que trouxe suas turmas das disciplinas que ministra na FAESA para participar do evento. Tivemos também muita gente da comunidade presente, realmente uma ótima edição, dessa vez realizada numa quinta-feira a noite.

Novembro, dia 11, essa foi a data de realização do III LI, edição mais que bacana e contou com a presença dos palestrantes @jeveaux , @bt1 e @m3nd3s . Nesta edição os assuntos eram: Scrum, Desenvolvimento web com Rails e Expressões Regulares. Essa edição foi emocionante, às vésperas do evento, o @leohackin precisou agendar um exame e não tinha certeza se seria marcado para o mesmo dia do evento, só tivemos a certeza disso um dia antes da realização do evento. Um dia antes da data agendada para ocorrer o III LI o médico do @leohackin conseguiu agendar o exame para exatamente o mesmo dia do evento. Com isso o @leohackin não poderia palestrar e então iniciamos uma procura desesperada por alguém para palestrar em seu lugar. Imagine achar um palestrante para criar uma palestra em 24 horas.

Nem comentei, mas a grade inicial do evento era: Scrum, TDD e Expressões Regulares, como não achamos alguém para falar sobre XP, palestra que seria ministrada pelo @leohackin , em tempo hábil o jeito foi procurar outro assunto e outro palestrante.

Algum tempo antes do III LI ser realizado a gelara da @giran_br , onde trabalho, participou do Rails Rumble (irado!) e conhecemos o @bt1 , um camarada que nos deu um mini-micro-nano curso de Rails para conseguirmos participar do Rails Rumble. O @franciscosouza comentou porque não chamamos o @bt1 para falar sobre Rails no lugar da palestra de TDD? Propomos então o desafio a ele: Já que conseguiu criar uma aplicação em 24 horas, fazer uma palestra no mesmo tempo “é sussa”!

E foi nesse clima que o evento foi realizado, um sucesso! Dessa vez a professora Renata Laranja levou sua turma a pedido do @ale_borba , que não queria perder o evento mas teria aula desta professora.

Por fim já estávamos saciados, afinal tinhamos realizado 3 edições do evento em um período de 6 meses, e com a chegada do fim do ano, com isso as provas finais de faculdade, pensamos em realizar o próximo LI apenas em março de 2011, massss…. O @franciscosouza soube que o @henriquebastos viria ao ES para ministrar um curso de Django, isso duas semanas antes da vinda dele ao ES, e queria conhecer o pessoal daqui e quem sabe realizar um #horaextra. Mais uma vez vamos nós, na correria, achar um local para realizar um evento, e para dar mais emoção tinhamos apenas duas semanas para: montar a grade, convidar palestrantes, conseguir a reserva do auditório e avisar o @henriquebastos . Queríamos muito realizar o evento no próprio IFES/Vitória, contamos para isso com a ajuda do João Fernando (Revista Espírito Livre) e Pedro Garcia, mas infelizmente não conseguimos, de qualquer forma muito obrigado pela força João e Pedro.

Procuramos então outro local para realizar IV LI e finalmente conseguimos na FAESA Campus I - @faesa_avvitoria , que diga-se de passagem é a faculdade que nos tem apoiado desde o primeiro LI, nosso muito obrigado a FAESA por toda ajuda dada.

Nasceu então o IV LI com palestras de @franciscosouza , @henriquebastos e @jeveaux que falaram sobre: BDD, como criar comunidades de sucesso e Git. Infelizmente não tivemos muitas pessoas presentes devido a chegada das férias. De qualquer forma foi um ótimo evento e tenho certeza que se perguntar aos que estavam presente você ficará com inveja do que perdeu.

Vendo essas quatro edições do LI e fazendo um levantamento dos objetivos do evento e o que foi realizado, percebo que o LI tem cumprido sua missão de trazer pessoas interessadas em falar sobre o que gostam para pessoas que querem e desejam ouvir e aprender sobre aquilo que gostam.

Juntando tudo que foi discutido nessas quatro edições do LI teremos os assuntos:

  • Quem é Python e por que eu deveria me importar?
  • Utilizando Linux em Desktops
  • Bacula – Servidor de backups centralizado
  • Django – Framework web para perceccionistas com prazos
  • Iptables – Entendendo como fazer um firewall pessoal
  • Desenvolvimento ágil com Scrum
  • Desenvolvimento Web com Rails
  • Expressões Regulares
  • Desenvolvimento guiado por comportamento (BDD)
  • Empreendendo uma comunidade de sucesso
  • Controle de versão sem dor de cabeça com Git

Tudo isso de graça, era só comparecer ao evento e participar. É ou não é um conteúdo ótimo, assuntos que não vemos por aí sendo “cedidos” ao público em geral por profissionais da área, pessoas que entendem, trabalham e ganham dinheiro com isso. Pessoas que sabem do que estão falando e gostam do que fazem e que estarão disponíveis para responder a perguntas e o melhor de tudo, não apenas no dia do evento mas a qualquer hora que quiser via: twitter, msn. Gtalk, e-mail, etc.

Enfim, se você não foi eu só lamento, eu estava lá! :P Fiz amigos, conheci pessoas e absorvi ainda mais conhecimento. Que venham as próximas edições do LI, eu com certeza estarei lá! ;)

Se quiser saber mais sobre o Liberdade Interativa, ver os slides das palestras e fotos acesse o site: http://www.tux-es.org/liberdadeinterativa/

III Liberdade Interativa

O Liberdade Interativa surgiu como uma oportunidade para manter a Interatividade entre membros da comunidade de Software Livre do Espírito Santo, o principal objetivo é trocar idéias, compartilhar conhecimento, fortalecer e ampliar o Networking.

III Liberdade Interativa

Se estiver afim de participar basta comparecer no auditório da FAESA no dia 11 de novembro de 2010 (Quinta-feira), não é necessário realizar inscrição, elas serão  realizadas no dia do evento. Nesta edição teremos três palestras, sendo duas voltadas ao desenvolvimento ágil e uma sobre expressões regulares:
  • TDD -> Test Driven Development (TDD) ou em português Desenvolvimento dirigido por testes é uma técnica de desenvolvimento de software (Wikipédia). Palestra será ministrada pelo amigo Leonardo ‘hackin’
  • Scrum -> O Scrum é um processo de desenvolvimento iterativo e incremental para gerenciamento de projetos e desenvolvimento ágil de software. (Wikipédia). Esta o Jeveaux deve estar cansado de ministrar. (heheh)
  • Expressões Regulares -> Em ciência da computação, uma expressão regular (ou o estrangeirismo regex, abreviação do inglês regular expression) provê uma forma concisa e flexível de identificar cadeias de caracteres de interesse, como caracteres particulares, palavras ou padrões de caracteres. Essa eu vou ministrar, denovo :)

Maiores informações em: http://www.tux-es.org