Faça você mesmo: Controle sua casa pela internet – Parte 2 – Desenvolvimento

No post passado falei de todo o trabalho que tivemos para montar o planejamento do projeto. Depois de planejar, conseguimos visualizar todos os pontos necessários para o desenvolvimento, parte que particularmente eu já tinha tudo esquematizado na cabeça :) .

Como uma das premissas era utilizar soluções opensource, comecei a pesquisar o que realmente era importante:

  • Sistemas operacionais para desenvolvimento e execução do projeto;
  • Bibliotecas C++ Ansi;
  • Frameworks para portar aplicações;
  • Servidor web leve e portátil;
  • Servidor de streaming para vídeo;

Depois desse levantamento, escolhi os itens. Vale ressaltar que caso você queira montar o projeto, o que vale é seguir as bibliotecas que utilizamos. Desde que o sistema operacional seja *NIX, use o que você achar melhor. Itens eleitos:

  • Mandriva Linux para desenvolvimento do software. Possui muitas bibliotecas empacotadas, economizou bom tempo no desenvolvimento;
  • Slax para rodar a aplicação. O Slax é um Slackware Linux customizado que roda através de CDROM ou pendrive direto;
  • Boost – Biblioteca C++ bem conhecida no mundo dos programadores da linguagem e que dá suporte a diversas funcionalidades, principalmente no quesito de gerenciamento de memória. Utilizamos o boost_regex também para validar dados com expressões regulares;
  • CGICC – Biblioteca do projeto GNU para trabalhar com requisições CGI. Trabalha com request, response, cookies e utiliza todo conceito da STL;
  • Servidor web Apache com mod_cgi ativo no ambiente de desenvolvimento, para testar a aplicação. Em ambiente de produção utilizei uma versão do Miniserv que é bem pequeno e funcional;
  • Para streaming de vídeo, utilizei o Motion (há um post sobre ele no blog). Esse servidor é para você assistir imagens de câmeras através do browser;

Com as ferramentas em mãos, fiz setup de todo ambiente e utilizei o Kdevelop para codificar. Já havia trabalhado com essa IDE e não tinha muito tempo para ficar gastando e aprendendo outras ferramentas. Há a possibilidade de usar o Eclipse com o plugin CDT ativo, vai da preferência do programador!

Outro ponto que não mencionei acima, mas faz parte das boas práticas é o uso de um controlador de versões. Utilizamos o Subversion para controlar os fontes do projeto, bem como as documentações produzidas. Para aqueles que nunca ouviram falar desse tipo de ferramenta é bom ir atrás. Imagine que legal você precisar resgatar um fonte com alterações que vocês fez há dias, semanas ou meses ? O controle de versões permite que você faça isso em poucos cliques, além de facilitar possíveis merges, ou mesclas de código.

Não vou entrar no mérito de como fazer o setup de todo ambiente nesse post, afinal, você precisa aprender alguma coisa também, certo ? Caso tenha alguma dúvida, é só fazer um comentário por aqui.

Para finalizar… Aqueles que duvidam que dá pra rodar C++ como aplicação WEB, façam o seguinte teste:

– Início teste.cpp

#include<iostream>

using namespace std;

int main(int argc, char **argv){

   cout << “Content-type: text/html\r\n\r\n” << endl;
   cout << “<html><body><h1>Hello World!</h1></body></html>” << endl;

   return 0;

}

– Fim teste.cpp

Compile esse código utilizando o g++ ( *nix ) ou o mingw (windows):

shel:> g++ teste.cpp -o teste.cgi

O comando gerará um arquivo executável chamado teste.cgi, idêntico ao .exe . Faça um teste digitando ./teste.cgi e o resultado será igual ao abaixo:

shel:> Content-type: text/html

<html><body><h1>Hello World!</h1></body></html>

Se você conhece um pouco de programação, sabe que imprimimos um HTML simples. O protocolo HTTP define que o que separa o cabeçalho do conteúdo são duas quebras de linhas consecutivas, no caso o cabeçalho é Content-type: text/html\r\n\r\n e o resto é o HTML que o browser vai processar.

Feito isso, basta garantir com que o seu servidor WEB permita executar um cgi e retornar só o conteúdo processado. Isso explica o motivo pelo qual estou usando o mod_cgi para o Apache :) .

[Testando no apache]

  • Copie o arquivo teste.cgi para o diretório cgi-bin do apache (que é criado por padrão na instalação). Na maioria dos casos fica no diretório /var/www/cgi-bin;
  • Dê permissão de execução para o script ao usuário do apache. Normalmente eu seto o owner do arquivo para o usuário apache e depois mudo os privilégios através de um chmod 755 /var/www/cgi-bin/teste.cgi;
  • Chame o aplicativo pelo browser, ex: http://localhost/cgi-bin/teste.cgi . O resultado deve ser um Hello World bem grande na tela!

[Testando no IIS]

  • Copie o arquivo teste.cgi para algum diretório dentro de c:\inetpub\wwwroot e dê permissão de execução de script através do console do IIS;
  • Execute via browser: http://localhost/pasta/teste.cgi

Fácil, né ? :D

[Links descritos no post - úteis]

Apache Server
http://httpd.apache.org

Biblioteca CGICC
http://www.gnu.org/software/cgicc/

Biblioteca Boost para C++
http://www.boost.org/

Motion
http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome

Slax
http://www.slax.org/

Mandriva linux
http://www.mandriva.com/

Começaremos a falar da implementação no próximo post. Até lá !

Bookmarksbookmark bookmark bookmark bookmark bookmark bookmark

Popularity: 4%

No Comment

Vale Presente