Introdução ao Desenvolvimento de Jogos para Facebook
Transcrição
Introdução ao Desenvolvimento de Jogos para Facebook
Ficha Catalográfica elaborada pela Bibliotecária Christiane Maria Montenegro Sá Lins CRB/3 - 952 E56a ENCONTRO UNIFICADO DE COMPUTAÇÃO EM PARNAÍBA. (5: 2012: Parnaíba, PI). Anais do V ENUCOMP 2012, Parnaíba, PI, 12 a 14 de novembro de 2012: [recurso eletrônico]/ Organização [de] Thiago C. de Sousa e Rodrigo Augusto R. S. Baluz. Parnaíba: FUESPI, 2012. 194 p.: Il. ISBN: 978-85-61946-80-7 1. Ciência da Computação. 2. Congressos. I. Sousa, Thiago C. de (org.) II. Baluz, Rodrigo Augusto R. S. (org.) III. Título. CDD 001.642 ii PREFÁCIO Em 2008, as instituições parnaibanas que atuam no ensino superior, técnico e profissional de informática sentiram a necessidade de criar um evento de computação maior e mais completo para a cidade. Assim, surgiu o projeto ENUCOMP (Encontro Unificado de Computação em Parnaíba), criado numa parceria do CEEP, FAP, IFPI e UESPI, cujas propostas foram pautadas na contribuição para a troca de experiências, buscando a união dos acadêmicos; no fortalecimento da parceria no desenvolvimento da educação e da informática; e no incentivo à produção de trabalhos científicos ligados à tecnologia. Mantendo estes mesmos ideais, o evento vem alcançando um crescimento consistente ano após ano e ganhando envergadura. Em sua quinta edição, com cerca de 300 participantes vindos de diversos Estados brasileiros, o ENUCOMP já é uma referência regional no Norte-Nordeste do Brasil na área de computação. A edição deste ano, que ocorre nos dias 12, 13 e 14 de novembro, inclui cinco palestras, com temas sobre inovação, acessibilidade, métodos ágeis, computação ubíqua e educação à distância, bem como seis mini-cursos com assuntos relativos à criação jogos 2D e para Facebook, simulação e segurança de redes, desenvolvimento web e sistemas embarcados. Além disso, a programação do ENUCOMP 2012 também fortaleceu a sua vertente científica ao montar um excelente Comitê de Programa, composto por quase quarenta pesquisadores e professores de renomadas universidades e empresas de todas as cinco regiões brasileiras, para realizar a arbitragem de artigos por pares. Como consequência, foram recebidos trabalhos provenientes de 1/3 dos Estados da Federação, sendo selecionados apenas nove para apresentação no evento, o que significou um taxa de aceitação de 26%, nível dos melhores congressos nacionais da área. Os artigos versam sobre três grandes áreas da computação: Inteligência Artificial, com trabalhos sobre agentes inteligentes, testes de agentes e algoritmos genéticos para estimação de sistemas de potência; Sistemas Distribuídos, com temas relacionados à transmissão de imagens em redes sem fio, sistemas colaborativos para gerenciamento de download; e Visão Computacional, com assuntos referentes à aplicação de realidade aumentada, análise de imagens via séries temporais e conversão de dados em RDF. Assim, este volume dos Anais Eletrônicos do ENUCOMP 2012 é composto por 12 capítulos: 6 relacionados aos mini-cursos trabalhados durante o encontro, e outros 6 formados pelos artigos científicos selecionados pelo Comitê de Programa para apresentação mas não premiados. Por último, gostaríamos de agradecer enormemente aos palestrantes, aos ministrantes de minicursos e aos membros da equipe de apoio e do comitê de programa, por acreditarem em nosso evento. O trabalho voluntário realizado por vocês de foi fundamental importância para o sucesso do ENUCOMP. Desejamos que o evento possa trazer frutos para o trabalho de todos. Até a próxima! Thiago Carvalho de Sousa Coordenação Geral ENUCOMP 2012 iii COMISSÃO ORGANIZADORA Coordenação Geral: Athânio de S. Silveira, Instituto Federal do Piauí (IFPI) Francisco das Chagas C. do Nascimento, Centro Estadual de Educação Profissional (CEEP) Rodrigo Augusto R. S. Baluz, Faculdade Piauiense (FAP) Thiago C. de Sousa, Universidade Estadual do Piauí (UESPI) Equipe de Apoio: Antônio S. de Sousa, Instituto Federal do Piauí (IFPI) Átila R. Lopes, Universidade Estadual do Piauí (UESPI) Francisco das Chagas Rocha, Universidade Estadual do Piauí (UESPI) José Flávio G. Barros, Faculdade Piauiense (FAP) Mayllon V. da Silva, Faculdade Piauiense (FAP) Nécio de L. Veras, Instituto Federal do Ceará (IFCE) Régis P. Magalhães, Instituto Federal do Piauí (IFPI) Comitê de Programa: André Fujita, Universidade de São Paulo (USP) Aryldo Russo Júnior, Grupo AeS Atila Lopes, Universidade Estadual do Piauí (UESPI) Carlos Giovanni Nunes, Universidade Estadual do Piauí (UESPI) Celina Takemura, Embrapa Christian Paz-Trillo, Centro Universitário SENAC-SP Claudia Melo, Thought Works David Pereira, Banco Central do Brasil (BCB) Eduardo Guerra, Universidade Federal do Pará (UFPA) Eduardo Ueda, Petrobras Esdras Bispo Júnior, Universidade Federal de Goiás (UFG) Eyder Rios, Universidade Estadual do Piauí (UESPI) Fábio Kepler, Universidade Federal do Pampa (UNIPAMPA) Fábio Siqueira, Programa de Educação Continuada da Escola Politécnica da USP (PECE) Flávio Coutinho, Universidade de São Paulo (USP) Harilton Araújo, Centro de Ensino Unificado de Teresina (CEUT) José Flávio Barros, Faculdade Piauiense (FAP) Francisco das Chagas Rocha, Universidade Estadual do Piauí (UESPI) Haniel Barbosa, Universidade Federal do Rio Grande do Norte (UFRN) Jaclason Machado, Universidade Federal do Piauí (UFPI) Jesus Mena, Universidade Federal do ABC (UFABC) José Bringel Filho, Universidade Estadual do Piauí (UESPI) Karina Valdivia, Universidade de São Paulo (USP) Márcio Monteiro, IBM do Brasil Marcos Couto, Oracle do Brasil Mayllon Silva, Faculdade Piauiense (FAP) iv Comitê de Programa (cont.): Mehran Misaghi, Sociedade Educacional de Santa Catarina (SOCIESC) Nécio Lima, Instituto Federal do Ceará (IFCE) Pedro Alcântara Neto, Universidade Federal do Piauí (UFPI) Raphael Cobé, Instituto Federal do Rio Grande do Norte (IFRN) Régis Magalhães, Instituto Federal do Piauí (IFPI) Raimundo Barreto, Universidade Federal do Amazonas (UFAM) Ricardo Lira, Universidade Estadual do Piauí (UESPI) Ricardo Sekeff, Centro Internacional de Pesquisas A.C. Camargo Rodrigo Baluz, Faculdade Piauiense (FAP) Rodrigo Veras, Universidade Federal do Piauí (UFPI) Sérgio Barros, Universidade Estadual do Piauí (UESPI) Thiago Carvalho, Universidade Estadual do Piauí (UESPI) Vladimir Rocha, Infomobile v SUMÁRIO 1. Introdução ao Desenvolvimento de Jogos para Facebook......................... 1 2. Criação de jogos 2D com técnicas 3D utilizando Python/C...................... 13 3. Fundamentos em Segurança e Hardening em Servidores Linux baseado na Norma ISO 27002..................................................................... 27 4. Desenvolvimento Web com Framework Primefaces................................. 67 5. Introdução à simulação de redes de computadores com o NS-2 (Network Simulator) - Teoria e Prática.......................................................... 78 6. Desenvolvimento de Aplicações para Plataforma Google Android......... 103 7. Desenvolvimento de um Museu Virtual 3D Utilizando Agentes Inteligentes.................................................................................................. 130 8. Transmission of Images Captured in Real Time through Wireless Network using the Python Language: A possible way of Wireless Transmission............................................................................................... 140 9. Project OurDown: Collaborative System for Download Management in Overlay....................................................................................................... 144 10. SenseRDF: Uma Ferramenta para Conversão de Dados em RDF seguindo os Princípios Linked Data........................................................... 152 11. Utilização de Realidade Aumentada e Dispositivos Móveis para Auxiliar na Manutenção de Instrumentos de Medição de Barragens......... 159 12. QoSTVApp:Uma Aplicação Semântica para o SBTVD........................ 165 vi ANAIS ELETRÔNICOS V ENUCOMP Introdução ao Desenvolvimento de Jogos para Facebook Erick Baptista Passos Resumo Nesse capítulo, mostramos um pouco da história dos jogos eletrônicos, conceitos de game design, e um tutorial inicial sobre a criação de jogos para Facebook usando ferramentas simples, tais como HTML dinâmico e Javascript. 1.1 - Introdução Jogos eletrônicos são uma das áreas de trabalho mais interessantes da atualidade. Os motivos são diversos, desde a atração que as pessoas tem pelo produto desse trabalho, até o fato de ser uma produção com base em criatividade, competência, sendo uma mistura de arte e ciência. Nesse capítulo, apresentaremos um breve histórico dos jogos eletrônicos, faremos uma apresentação sobre game design, o principal conceito por trás de jogos, sejam eles eletrônicos ou não, e discutiremos sobre algumas ferramentas para o desenvolvimento de jogos simples para a rede social Facebook. Nas seções principais do texto, serão mostrados todos os passos para a criação de um jogo web simples para Facebook. 1.2 - Histórico Os primeiros jogos eletrônicos de que se tem notícia, Tennis for Two e Spacewar, foram desenvolvidos como um experimento pessoal, e como uma demonstração do poder gráfico de um novo modelo de computador do MIT, respectivamente. Na Figura 1.1 podemos ver o jogo Tennis for Two, que consiste de um osciloscópio onde você move a onda de um lado para o outro como se fosse uma bola de tenis. 1 ANAIS ELETRÔNICOS V ENUCOMP Figura 1.1 - O jogo Tennis for Two Comercialmente, a história dos jogos eletrônicos se inicia com o advento das máquinas arcades, uma evolução das máquinas mecânicas de pinball, adotando botões, circuitos eletrônicos e um monitor de TV para exibir as imagens. Os arcades obtiveram muito sucesso, e várias empresas proeminentes surgiram nessa época, entre elas a Atari. A Figura 1.2 mostra o jogo Atari Night Driver. Figura 1.2 - Atari Night Driver, um jogo arcade que também fez bastante sucesso nos consoles. Os consoles surgiram após o sucesso dos arcades, e visavam expandir o mercado para o ambiente doméstico, no que sucederam. Os principais exemplos dessa primeira geração são o Odissey e o 2 ANAIS ELETRÔNICOS V ENUCOMP Atari, mostrado na Figura 1.3, je um de seus maiores sucessos, o jogo Space Invaders, também lançado originalmente como um arcade, mostrado na Figura 1.4. Figura 1.3 - O Atari VGS 2600, de 1978, o primeiro console de grande sucesso. Figura 1.4 - O jogo Space Invaders O aquecimento do mercado de jogos levou a uma expansão muito rápida das empresas de desenvolvimento, o que gerou uma grave crise de conteúdo entre 1983 e 1984, que culminou com a falência e dissolvição da Atari original. Muitos jogos de baixa qualidade, e cópias baratas de produtos de sucesso foram a principal causa dessa crise. Muitos previram o fim dos jogos eletrônicos, mas o advento dos consoles NES, da Nintendo (Figura 1.5), e Master System da Sega, em 1985 e 1986 respectivamente, mostraram que o mercado estava apenas no seu início. 3 ANAIS ELETRÔNICOS V ENUCOMP Figura 1.5 - NES, Nintendo Entertainment System O lançamento das séries Super Mario (Figura 1.6) e Zelda para NES, mostraram o quanto o uso de personagens carismáticos pode alavancar as vendas desse tipo de produto. Desde essa segunda geração, todos os consoles e produtoras buscam a criação de séries e personagens marcantes. Figura 1.6 - O jogo Super Mario 1, para NES 4 ANAIS ELETRÔNICOS V ENUCOMP No final dos anos 1980, o mercado de jogos eletrônicos para computador se iniciou através de empresas de garagem, principalmente na Inglaterra. Em meados da década de 1990, começaram a surgir jogos com o uso de ponto de vista de primeira pessoa, onde a imagem aparenta ser a visão do personagem. Exemplos desses jogos são o Wolfenstein 3D, Doom e Duke Nukem. Entretanto, o advento dos jogos em perspectiva 3D real (três dimensões) só ocorreu realmente com o lançamento do jogo Quake (Figura 1.7), de 1996. Desde então, muitos jogos de sucesso usam essa técnica de visualização. Figura 1.7 - O jogo Quake, desenvolvido em 1996 pela ID Software 1.3 - Game Design Antes de se começar a desenvolver um jogo, é importante se trabalhar os conceitos que irão compor essa experiência de entretenimento. Esse é o assunto abordado numa área do conhecimento milenar chamada de game design, ou projeto de jogos. Game design trata de como se projetam as mecânicas de jogos, ou seja, as regras que definem como o jogo funciona, seja ele eletrônico, de tabuleiro, ou um esporte. Todos nós jogamos, mesmo que não concientemente, já que jogos basicamente exploram instintos que estão presentes nos nossos cérebros. Um game designer precisa conhecer um pouco desses instintos para poder criar experiências interessantes para o jogador. Os principais instintos que são explorados em game design são os seguintes: 5 ANAIS ELETRÔNICOS V ENUCOMP ● Exploração - o ser humano é curioso por natureza, e em jogos isso pode ser explorado através da criação de ambientes interessantes, o que faz o jogador ter vontade de continuar jogando para descobrir as novas áreas, paisagens e personagens. Essa característica é mais marcante nas mulheres, mas muitos homens também gostam de exploração; ● Aprendizado - nós somos recompensados quimicamente quando aprendemos algo novo, quando desenvolvemos uma nova habilidade que antes não tinhamos. Esse instinto é responsável por grande parte do desenvolvimento técnico da humanidade. Em jogos, é importante estimular o jogador a aprender novas ações que lhe permitam vencer os desafios; ● Desafios - vencer desafios em si também é uma atividade recompensadora, especialmente para os homens, que são normalmente mais competitivos. Mecânicas de jogo Mecânicas de jogo são os elementos mais básicos que definem a atividade. Ao se projetar um jogo, são as primeiras decisões a serem tomadas. Para entender o que são as mecânicas, podemos fazer um exercício simples: remova tudo o que puder de um jogo que você conhece, como gráficos, música, estória, personagens. Substitua tudo por elementos visuais simples, como círculos, caixas, etc. O que sobram são as mecânicas, ou seja, a coordenação entre os controles, o visual e o tempo (para atingir alvos, pular em plataformas, evitar obstáculos, tudo no momento exato). Em alguns jogos, as mecânicas podem envolver áudio, como em jogos musicais de ritmo, mas mesmo nesses casos, podemos substituir as músicas em questão por batidas ritmadas, coordeanadas com o visual da tela, onde o jogador deve apertar a tecla de cor correspondente no momento exato para ganhar os pontos. Na Figura 1.8 temos uma visão simplificada do que poderia ser o protótipo de um jogo de plataforma usando apenas elementos visuais simples. Um protótipo desses permite que se testem as mecânicas rapidamente, antes de se comprometer com o design visual. Se o jogo for divertido apenas com caixas simples, será também divertido com visual apurado. Entretanto, se o jogo não for divertido dessa forma, dificilmente será após a adição da arte. 6 ANAIS ELETRÔNICOS V ENUCOMP Figura 1.8 - Um protótipo de jogo de plataforma usando apenas elementos visuais simples. Um outro conceito importante de game design é o loop de desafio, que ajuda a se projetar como se apresentam as regras para o jogador. Todo jogo é uma repetição da seguinte sequência: apresenta-se um desafio ao jogador; o jogador realiza uma ação; através das regras, se verifica se o jogador venceu o desafio; caso afirmativo, o jogador é recompensado (usando os instinto citados anteriormente), caso negativo, o jogador é punido; volta-se ao passo de apresentar um desafio. A Figura 1.9 mostra um desenho esquemático desse conceito. Figura 1.8 - O loop de desafio, um conceito de game design. 1.4 - O Jogo Exemplo 7 ANAIS ELETRÔNICOS V ENUCOMP Agora iremos apresentar o jogo que será usado como exemplo. Será um jogo simples, para um único jogador, onde o seu desafio é atravessar uma sala até uma porta do lado oposto ao que ele inicia. Como o jogo é em turnos, a sala é composta por um conjunto de casas (células quadradas) em um tabuleiro, e o jogador deve usar o mínimo de movimentos possíveis para chegar ao destino final. O problema é que a sala está infestada de monstros que o jogador não pode ver. Se o jogador parar numa casa que possui um monstro, ele perde a partida. Felizmente, ele pode perceber a presença de um monstro em uma casa adjacente, quando isso ocorrer. A estratégia então é recuar e buscar outro caminho, ou então arriscar para tentar não perder movimentos. A Figura 1.9 mostra uma imagem do protótipo desenvolvido em HTML dinâmico. Figura 1.9 - Protótipo do jogo. A casa verde é a saída, a casa amarela é onde o jogador está, e as casas pretas mostram onde ele já passou. Ao chegar numa casa próxima a um monstro, um aviso é emitido. 1.5 - Implementação de Mecânicas 8 ANAIS ELETRÔNICOS V ENUCOMP O protótipo do jogo foi todo criado em HTML 4 dinâmico, usando a linguagem Javascript, sem necessidade de uso de tecnologias de servidor, como PhP, Ruby ou Java. Na Figura 1.10 podemos ver o código base HTML que carrega a página do jogo. Observe que apenas fazemos carga da biblioteca jQuery, para facilitar o trabalho em HTML dinâmico, e dos arquivos Javascript criados especialmente para o jogo. Figura 1.10 - Arquivo HTML básico do jogo. O elemento DIV chamado “container” servirá como tabuleiro, e seu conteúdo será criado dinamicamente com Javascript. A criação das casas do tabuleiro é feita através da inserção de elementos DIV diretamente no HTML através de Javascript. Cada uma das 100 casas (tabuleiro 10x10) é representada por uma DIV de fundo cinza, a qual é associada uma função ligada ao evento clique. A Figura 1.11 mostra o trecho de código Javascript que cria as DIVs para representar as casas do tabuleiro. Figura 1.11 - Trecho de código Javascript que cria as casas do tabuleiro. Cada casa é uma DIV, que é posicionada proceduralmente, e tem uma função associada ao evento clique. A função associada ao evento clique é responsável pela lógica do jogo. Os seguintes passos são verificados sempre que o jogador clica em uma casa do tabuleiro: 9 ANAIS ELETRÔNICOS V ENUCOMP ● ● ● ● ● O jogador pode se mover para essa casa? A função só continua em caso afirmativo; Move o jogador para a nova casa e conta o movimento; A nova casa contém um monstro? Caso afirmativo, o jogador perde a partida; A nova casa é o destino final? Caso afirmativo, o jogador vence a partida; Existe um monstro em casa adjacente? Caso afirmativo, emitir alerta. Para implementar essa lógica, o tabuleiro é representado por uma matriz 10x10 de números inteiros, onde o valor zero (0) representa uma casa livre, e o valor um (1) representa a presença de um monstro. As funções de checagem de derrota e presença de monstro usam essa matriz, enquanto a função de checagem de movimentação possível apenas verifica se a casa clicada é adjacente à atual. Na Figura 1.12 podemos ver o código da função que checa a validade do movimento. Figura 1.12 - Função que checa se a casa clicada é adjacente àquela ocupada pelo personagem, o que indica um movimento válido. O restante do código fonte para as mecânicas está incluído no DVD de anais do evento, num arquivo chamado “jogo.js”. O arquivo zipado incluído no DVD contém esse e os demais arquivos que fazem parte do jogo desenvolvido. 1.6 - Integração com o Facebook Ao se criar um jogo para Facebook, ao contrário do que muitos imaginam, não se está criando um aplicativo web que irá rodar nos servidores dessa rede social. O que o Facebook permite é a autenticação, e o acesso remoto (via serviços web) a vários dados do perfil dos jogadores, seu grafo de amigos, entre outras informações. Esses serviços remotos podem ser acessados diretamente através de requisições em protocolo HTTP, mas é mais produtivo se utilizar uma das SDKs disponibilizadas, seja ela oficial, ou mantida por uma comunidade. Existem SDKs para as linguagens mais populares, tais como PhP, Objective C (iOS), Android/Java e Javascript, entre outras. Para isso, basta que você registre a sua aplicação no endereço http://developers.facebook.com/ e baixe uma das SDKs oficiais para 10 ANAIS ELETRÔNICOS V ENUCOMP iniciar a programação. Para o nosso exemplo, usaremos a SDK oficial Javascript para fazer a integração diretamente do browser. Iremos apenas fazer a autenticação/autorização do jogador via Facebook, para, em caso de vitória numa partida do jogo, publicar uma mensagem no mural do jogador. O arquivo “facebook-utils.js” inclui todo o código de acesso à rede social, e é bastante simples, sendo baseado no exemplo incial de autenticação da documentação oficial. A função de inicialização contida no arquivo verifica se o jogador está logado no Facebook, e se já autorizou o uso do aplicativo. Caso contrário, o código abre uma pequena janela para que o jogador possa fazer isso. A função mais interessante, mostrada na Figura 1.13, usa a API de grafos do Facebook para postar a mensagem de vitória no mural do jogador. Figura 1.13 - Função que publica uma mensagem no mural do usuário logado no Facebook. 1.7 - Conclusão e Outras Idéias Nesse capítulo, mostramos alguns conceitos básicos sobre o projeto de jogos, e um exemplo simples, feito como um protótipo em HTML4 dinâmico, de um jogo com elementos de rede social. A tendência que tem-se observado é o uso cada vez mais acentuado dessas tecnologias abertas que permitem a criação de jogos para diversos dispositivos diferentes (PC, Android, iOS, Mac, Linux), especialmente com o novo padrão HTML5. Nesse exemplo preferimos utilizar HTML4 por ser uma tecnologia que funciona em browsers antigos, como o IE 8 e inferior. Uma atualização interessante seria desenvolver os gráficos do jogo para uso da tag CANVAS de HTML5, permitindo um melhor uso de animações e efeitos. Para tanto, recomenda-se o uso de alguma biblioteca que facilite o trabalho, tal como a CreateJS. Também é possível se utilizar animações e efeitos interessantes com HTML4. No jogo Cangaço, da Sertão Games, utilizamos apenas HTML4 com a biblioteca Spritely, com resultados bastante interessantes. 11 ANAIS ELETRÔNICOS V ENUCOMP Outro aspecto que recomendamos explorar é uma maior imersão nas características sociais dos jogos, tal como o uso de desafio multiplayer, ou pelo menos contra um único amigo, como explorado nos jogos Song Pop, e Cangaço Wargame. Referências Cook, Daniel (2012). What are game mechanics? http://www.lostgarden.com/2006/10/what-aregame-mechanics.html. Acessado em 09/11/2012. CreateJS (2012). A suite of Javascript libraries and tools for building rich, interactive experiences with HTML5. http://www.createjs.com/#!/CreateJS. Acessado em 09/11/2012. Facebook Inc. (2012). Facebook Developers Portal. http://developers.facebook.com. Acessado em 07/11/2012. Sertão Games (2012). Sítio oficial do Cangaço Wargame. http://cangaco.com. acessado em 09/11/2012. W3Schools (2012). Introdução ao padrão HTML5. http://www.w3schools.com/html/html5_intro.asp. Acessado em 09/11/2012. 12 ANAIS ELETRÔNICOS V ENUCOMP Criação de jogos 2D com técnicas 3D utilizando Python/C Leinylson Fontinele Pereira Abstract The game in our context is the electronic game, a simulation and interactive visual displays on a screen. The interaction is such that the player must have some specific goal or how to go out somewhere, destroy something, solve a problem, etc. The game developer should be aware of all possible situations that will be experienced by the player, the knowledge and application of specific techniques to create an immersive environment and free of errors typical of computer graphics, as well as all processes that involve the creation of a game / animation, for use by companies in disseminating their products through the adoption of "gamification" or for personal entertainment. Resumo O jogo no nosso contexto é o jogo eletrônico, uma simulação visual e interativa exibida numa tela. A interação é tal que o jogador deve ter algum objetivo específico como ir ou sair para algum lugar, destruir algo, resolver um problema, etc. O desenvolvedor de jogos deve estar ciente de todas as situações possíveis que serão sentidas pelo jogador, o conhecimento e aplicação de técnicas específicas para criar um ambiente imersivo e livre de erros típicos da computação gráfica, bem como todos os processos que envolvem a criação de um jogo/animação, seja para uso de empresas na difusão de seus produtos por meio da adoção de “gamificação” ou ainda para entretenimento pessoal. 2.1. Do que é feito um jogo? Um jogo nos dá um controle sobre um personagem ou um objeto virtual, de modo que possamos ter um controle e uma imersão no ambiente virtual que se aproxime do nosso controle e imersão no ambiente real só que com regras e motivações diferentes. 13 ANAIS ELETRÔNICOS V ENUCOMP Figura 2.1 Componentes da criação de um jogo 2.2. O Jogador O Jogador é um participante do jogo. Um jogador pode ser uma pessoa real ou um jogador controlado pelo próprio jogo. Neste artigo, estamos nos referindo a um jogador real, onde a interação do jogo com o jogador é feito com dispositivos de entrada e saída do jogo, geralmente a tela e um controle em que na maioria das vezes, o jogador controla o personagem central do jogo. 2.3. Personagem O personagem de um jogo de videogame é personagem fictício para que o jogador controle. Nos primeiros jogos o personagem era apenas uma figura sem expressão, dotada de alguma característica especial (andar, pular) e não possuíam uma história ou motivação. O primeiro personagem de videogame foi o Mario (ver figura 2.2), criado por Shigeru Miyamoto para a Nintendo. Com o tempo, os personagens de videogame foram incorporados à cultura pop. Com Mário surgiu o conceito de mascote do jogo. Esse tipo de personagem carismático agrega um grande valor por sua importância publicitária graças a sua identificação com o público. Muitas ideias vêm dos sonhos, surgem de pequenos conceitos expandidos em Brainstorm. Grandes ideias poder parecer ridículas no começo. Figura 2.2 A criação do Mário 14 ANAIS ELETRÔNICOS V ENUCOMP 2.4. Menus Os menus são interfaces de texto e/ou imagens onde o jogador deve fazer escolhas e ajustes. Antes de o jogo começar, os menus servem para fazer ajuste de preferenciais do jogo, escolha do tipo de jogo, desempenho do hardware, etc. Dentro do jogo eles servem para fazer escolhas e ajustes mais complexos. Nem todo jogo precisa de menus dentro do jogo, mas certamente vai precisar de um menu antes do jogo começar . 2.5. HUD Sigla para Head Up Display. É um método de representação visual de informações importantes para o jogador. São como menus não interativos. Em geral eles exibem informações como munição, life, arma selecionada, pontuação, dinheiro ou itens. O HUD (ver figura 2.3) é desenhado por último na tela, de modo que ele fique sempre visível para o jogador. Ele não deve se mover muito ou conter palavras para que não distraia o jogador e sempre que possível ser iconográfico, ou seja, usando imagens que representem a informação (ícones). Figura 2.3 Exemplo de HUD 2.6. Som e Música Embora não sejam fundamentais no jogo, os sons existem nos jogos desde o primeiro jogo. Os sons ajudam a caracterizar certas ações, aumentar o nível de imersão do jogador e deixa-lo mais concentrado no jogo. Os sons podem ser construídos por sonoplastia. Deve-se ter em mente que diferentes sons provocam diferentes efeitos sobre o sistema sensorial do jogador. Os sons ligados a uma ação ou personagem não precisam ser os mesmos sons ligados a estes no mundo real. Pose-se usar sons diversos a fim de obter efeitos cômicos, criar tensões, força ou simplesmente obter sensações agradáveis. A música serve para se criar uma base para as imagens e os outros sons. Com a construção da música certa, pode-se criar ambientes agradáveis, tensos, pode-se deixar o jogador mais nervoso com uma música mais rápida e pode-se até usar o recurso do silêncio para criar um clima de suspense. É sempre bom ter algum repertório de músicas no jogo, e ter músicas de duração razoável, caso contrário, 15 ANAIS ELETRÔNICOS V ENUCOMP as músicas podem ficar chatas e repetitivas. As músicas de jogos também criam uma lembrança especial do jogo nos jogadores e cria um sensação agradável ao se jogar. 2.6. Física Um jogo é uma simulação e na maioria das vezes, uma representação do mundo em que vivemos. Essa representação, seja por limitações de software e hardware ou por escolha estética, não contém todos os aspectos do mundo real. Porém, um aspecto que quase sempre está presente é o físico. Esse aspecto se manifesta principalmente na detecção de colisão. Se o objeto A depois que ele se mover colide em algo então faz alguma coisa. Essa alguma coisa pode variar de jogo para jogo. Pode ser que o objeto A seja um personagem e o algo seja uma parede. Então o "faz alguma coisa” pode ser nada, ele bate na parede, portanto não anda, mas pode ser que o personagem tenho batido em algo que o machuque como o fogo, então o "faz alguma coisa" pode ser tirar vida do jogador. Uma técnica de colisão bem simples e que vamos usar aqui é verificar se o retângulo que envolve o sprite toca o retângulo que envolve o outro sprite (ver figura 2.4 e 2.5). Figura 2.4 Colisão entre retângulos Figura 2.5 Máquina de Estados Finitos 2.7. Quem participa da criação? Você que sempre gostou de jogar e decidiu cursar Ciência da Computação para aprender como é que aqueles games são feitos e logo se viu travando uma batalha para passar em Cálculo, Álgebra Linear e Geometria Analítica. O desenvolvimento de um moderno e comercialmente 16 ANAIS ELETRÔNICOS V ENUCOMP viável game, envolve uma ampla variedade de habilidades e uma equipe especializada (ver figura 2.6). 2.7.1. Game Designer Elabora os elementos do jogo bem como sua mecânica. Os elementos são os personagens e o cenário, a mecânica são as possibilidades que o jogador tem de interagir com o jogo. Empresas que elaboram jogos de ponta modernos dividem as responsabilidades do game designer com outros profissionais relacionados, sendo os principais, o combat designer e o level designer. 2.7.2. Roteirista Descreve como é a trama do jogo, o perfil psicológico dos personagens e a interação entre eles (social e/ou psicológica), a qual não necessariamente corresponde àquela entre o jogador e os personagens do jogo. 2.7.3. Tester Trabalha na equipe de Q&A (Quality Assurance - Controle de qualidade). Testa diversos aspectos do jogo e relata os pontos falhos ou a serem melhorados. 2.7.4. Programador Elabora a programação do jogo, desenvolvendo códigos para lidar com AI, música, interação, etc. 2.7.5. Engenheiro de software Projeta os componentes de software do jogo envolvendo diversos aspectos como a composição dos objetos, a interface deles, a interrelação existente entre eles, etc. 2.7.6. Programador Web e Programador de redes Realiza toda a implementação e configuração necessária para a execução do jogo em navegadores e a disponibilização de interatividade em rede nos jogos multiplayers on-line. 2.7.7. Programador de AI Responsável por programar os algoritmos de Inteligência Artificial usados no jogo. Dentre estes algoritmos estão o de planejamento estratégico de grupo num atirador de primeira pessoa, a montagem da estratégia do time controlado pela CPU num jogo de esportes, o planejamento de caminho para levar um personagem NPC (personagens não-jogáveis) de um local ao outro, etc. 2.7.8. Engenheiro de som Produz os efeitos sonoros e a música tema. 2.7.9. Level designer 17 ANAIS ELETRÔNICOS V ENUCOMP Faz o projeto da fase em que o jogador se encontra. Determina quais elementos compõem a fase, verifica a presença de alguma característica distintiva no terreno como aclives, declives, montanhas, etc. 2.7.10. Combat Designer Projeta como será o combate entre o jogador e o computador. Quais são os elementos que devem estar presentes no combate, qual o papel destes elementos (dano, cobertura, etc). Figura 2.6. Equipe de desenvolvimento de jogos 2.8. Como é feito um jogo de duas dimensões? De maneira similar ao modo convencional, a criação de jogos de duas dimensões (2D), utiliza-se da orientação do plano cartesiano (x,y) bastando observar algumas peculiaridades quanto a orientação do eixo y (ver figura 2.7). Figura 2.7. Sistema de coordenadas 2.9. O que são engines? 18 ANAIS ELETRÔNICOS V ENUCOMP Definição: “É a ferramenta que se encarregará por entender como o hardware gráfico, irá controlar os modelos para serem renderizados, tratará das entradas de dados do jogador, tratará de todo o processamento de baixo nível e outras coisas que o desenvolvedor de jogos normalmente não deseja fazer ou não tem tempo para se preocupar” (ver figura 2.8). Figura 2.8 Estrutura de um Motor de Game (Game Engine) 2.9.1. PyGame O Pygame é um conjunto de módulos que você importa num código em Python, os quais lhe disponibilizam uma série de funcionalidades auxiliares para criação de aplicativos multimídia e games. Segue abaixo algumas características da engine para programadores da linguagem python: Vários processadores podem ser usados facilmente: O uso de vários núcleos adiciona um desempenho muito maior ao seu jogo. As funções internas são implementadas em C e Assembly: Código em C costuma ser de 10 a 20 vezes mais rápido que Python. Já Assembly tem uma performance de mais de 100 vezes maior que Python. Portátil: Aplicativos programados em Pygame podem rodar tanto em plataformas Windows (ver figura 2.9) quanto em Linux, Solaris, FreeBSD, Mac OS, Android, entre outros. O código ainda dá suporte a Dreamcast e também pode ser usado em dispositivos móveis. Simples: O Pygame é usado no projeto OLPC (One Laptop Per Child) para ensinar programação a crianças. Ao mesmo tempo, também é a preferência de programadores experientes. 19 ANAIS ELETRÔNICOS V ENUCOMP Figura 2.9 Janela gráfica do PyGame 2.9.2. Allegro Allegro é uma biblioteca de funções para jogos 2D feita em C. Apesar de ter algumas funções para jogos 3D ela não é indicada para isso, sendo no lugar dela uma API3d como OpenGL ou DirectX. De acordo com a Companhia Oxford de Música, Allegro é o italiano para "rápido, vivo e brilhante". Ele também é um acrônimo recursivo que representa "Allegro Low Level Game Routines" (Rotinas de jogo de baixo nível Allegro). Segue abaixo algumas características da engine para programadores da linguagem C: Biblioteca para construção de jogos e aplicações multimídia em geral; Free Source e multi-plataforma (DOS, Windows, Linux, Mac (OS X), BeOS e QNX); Voltada mais especialmente para jogos 2D; Conhecida pela facilidade de adicionar entrada de dados via teclado, mouse e joystick; Suporta arquivos de configuração e de dados comprimidos (.dat); Temporizadores. 2.10. Inicialização das bibliotecas Esta é a principal função, e deve obrigatoriamente ser chamada para uma aplicação funcione, a chamada desta função deve ser a primeira a ser feita, antes de qualquer outra função. Allegro: #include <allegro.h> int allegro_init(); PyGame: import sys, os, pygame from pygame.locals import* 2.11. Paleta de cores A especificação de uma paleta (ver figura 2.10) de cores, dar-se através dos parametros R(Red), G(Green), B(Blue) nas seguintes funções: Allegro: int makecol( int iRed, int iGreen, int iBlue ); 20 ANAIS ELETRÔNICOS V ENUCOMP Passando-se os valores dos tons (que variam de 0 a 255), de vermelho, verde e azul, esta função retorna o código da cor. Exemplo de uso: makecol (255, 0, 0 ); PyGame: Realizada de forma similar Figura 2.10 Paleta de cores 2.12. Temporizadores Interrompe a execução do programa durante um intervalo de tempo igual ao passado como parâmetro, em milisegundos: Allegro: void rest(unsigned int uiTime); PyGame: Clock = pygame.time.Clock() Clock.tick(int Time) 2.13. Pixel a pixel Colore um pixel do bitmap, nas coordenadas especificadas no segundo parâmetro e terceiro parâmetro, na cor passada no quarto parâmetro: Allegro: void putpixel(BITMAP *bmp, int iX, int iY, int iColor); Recupera o valor da cor de um pixel do bitmap, nas coordenadas especificadas no segundo parâmetro e terceiro parâmetro, na cor passada no quarto parâmetro: Allegro: void getpixel(BITMAP *bmp, int iX, int iY, int iColor); Preenche um bitmap com a cor especificada, em um espaço fechado, a partir do ponto X e Y: Allegro: void floodfill(BITMAP *bmp, int iX, int iY, int iColor); 2.14. Formas primitivas A primeira função desenha uma linha vertical, a segunda função desenha uma linha horizontal e a ultima função desenha uma linha entre 2 pontos quaisquer, respectivamente: 21 ANAIS ELETRÔNICOS V ENUCOMP Allegro: void vline(BITMAP *bmp, int iX, int iY1, int iY2, int iColor); void hline(BITMAP *bmp, int iX1, int iY, int iX2, int iColor); void line(BITMAP *bmp, int iX1, int iY1, int iX2, int iY2, int iColor); A primeira função desenha um retângulo sem preenchimento, com o contorno colorido, enquanto a segunda função desenha um retângulo com preenchimento: Allegro: void rect(BITMAP *bmp, int iX1, int iY1, int iX2, int iY2, int iColor); void rectfill(BITMAP *bmp, int iX1, int iY1, int iX2, int iY2, int iColor); A primeira função desenha um círculo sem preenchimento, com o contorno colorido, enquanto a segunda função desenha um círculo com preenchimento: Allegro: void circle(BITMAP *bmp, int iX, int iY, int iRaio, int iColor); void circlefill(BITMAP *bmp, int iX, int iY, int iRaio, int iColor); A primeira função desenha uma elipse sem preenchimento, com o contorno colorido, enquanto a segunda função desenha uma elipse com preenchimento: Allegro: void ellipse(BITMAP*bmp, int iX, int iY, int iXRaio, int iYRaio, int iColor); void ellipsefill(BITMAP *bmp, int iX, int iY, int iXRaio, int iYRaio, int iColor); 2.15. Texto Função para exibir um texto na tela, o sexto parâmetro deve ser -1 para um fundo transparente: Allegro: void textprintf_ex(BITMAP*bmp,FONT font,int X,int Y, int Color,int CorFundo,char Text); PyGame: Font = pygame.font.Font("font.ttf",128) 2.16. Modo gráfico Especificado antes de começar a desenhar: Allegro: int set_gfx_mode (int card, int w, int h, int v_w, int v_h); Onde: O valor de card é usualmente GFX_AUTODETECT, ou GFX_AUTODETECT_WINDOWED; GFX_AUTODETECT_FULLSCREEN w, h largura e altura, respectivamente; v_w, v_h largura e altura virtual (normalmente, 0), respectivamente. 2.17. Desenhando objetos - BITMAPs Bitmaps são matrizes de pixels, em que cada valor indica uma cor. Tela é um BITMAP especial chamado screen, BITMAPs adicionais podem ser criados com: Allegro: BITMAP *bmp = create_bitmap(int width, int height); 2.18. Periféricos de entrada 2.18.1 Teclado 22 ANAIS ELETRÔNICOS V ENUCOMP Para inicializar as rotinas do teclado: Allegro: install_keyboard(); Váriável global int key[ ], permite ver quais teclas estão pressionadas, através de constantes definidas para identificar cada tecla (ver tabela 2.1). PyGame: Realizada de forma similar. Tabela 2.1. Constantes representativas de cada tecla 2.18.2 Mouse Para inicializar as rotinas do mouse: Allegro: install_mouse(); PyGame: Realizada de forma similar 2.19. Som digital (WAV) e música (MID) Antes de se tocar um som digital ou música deve-se carregá-los da seguinte forma: Allegro: som1 = load_wav(“arquivo.wav”); musica = load_midi(“arquivo.mid”); 2.20. Algumas técnicas de programação de jogos 2.20.1. Animação Dar a impressão de que coisas se movem, pode significar mover um pixel ao longo da tela mas, geralmente, significa uma mudança repetitiva da apresentação de algo para que dê a ideia de que se move. 23 ANAIS ELETRÔNICOS V ENUCOMP A técnica mais simples de animação é quando limpamos a tela, desenhamos os objetos, limpamos a tela novamente, desenhamos os objetos nas novas posições. O Desafio é como causar a impressão de movimento dos personagens? A solução é utilizarmos sprites, ou seja, um conjunto de dados que definem determinado objeto ou personagem num jogo (ver figura 2.11). Para uma pessoa, por exemplo, podemos ter um sprite que contenha as posições vertical e horizontal dela no mundo, a direção para onde ela está virada e os bitmaps que podem representá-la durante o jogo. Figura 2.11 Exemplo de sprite 2.20.2. Double Buffering O Problema: Quando vamos fazer animações usando o Allegro, surgem alguns problemas relacionados aos vários métodos que podem ser utilizados. O método mais simples que podemos imaginar é aquele em que limpamos a tela, desenhamos os objetos, limpamos a tela novamente, desenhamos os objetos nas novas posições, e assim por diante. Este método, porém, tem um grave problema: a tela pisca a cada limpeza. A Solução: Dispomos de um bitmap auxiliar (chamado de buffer) que, normalmente, possui o tamanho da tela (ou o tamanho da região onde ocorre a animação). Desenhamos, neste buffer, os objetos que devem ser apresentados na tela. Após isso, desenhamos o conteúdo do buffer na tela, fazendo com que os objetos apareçam. Limpamos, então, o buffer, desenhamos os objetos novamente em suas novas posições, passamos o conteúdo do buffer para a tela, e assim por diante. 2.20.3. Scrolling 24 ANAIS ELETRÔNICOS V ENUCOMP O Problema: Como dar movimento ao personagem e aos objetos envolvidos? A Solução: Movimento de cenário. O scrolling consiste em movimentar o fundo do cenário e, normalmente, deixar o personagem controlado parado, o que causa uma sensação de movimento. O scrolling pode ser horizontal, vertical ou em ambas as direções. 2.20.4. Parallax Scrolling O Problema: Como causar a sensação de profundidade presente em jogos 3D? A Solução: Utilizar vários fundos que se movimentam em velocidades diferentes. 2.20.5. Detecção de Colisão O Problema: Como verificar se dois sprites estão sobrepostos, ou seja, se houve uma colisão? A Solução: Existe o método que chamamos de força bruta (checar cada ponto de um sprite com cada ponto de outro sprite) qué é ineficiente, a maior parte dos outros métodos são aproximativos. Veremos o principal deles, que consiste em dividir os sprites em retângulos, de forma que possamos verificar se cada retângulo está ou não sobreposto a outro. Fazer com que o sprite tenha sua movimentação limitada às bordas do nosso jogo não deixa de ser uma forma de detecção de colisão, bem simples, é verdade. Porém, em jogos 2D, geralmente se deseja realizar detecção de colisão entre dois ou mais sprites no jogo. 2.20.5.1 Colisão entre Esferas O Problema: Contudo, apesar do sistema de detecção de colisões estar utilizando o algoritmo do bouncing box, depois de alguns testes você perceberá um problema. Se os sprites colidirem 25 ANAIS ELETRÔNICOS V ENUCOMP diagonalmente, eles irão colidir antes de atingirem um ao outro de verdade. Isso está ocorrendo justamente por utilizarmos caixas para representar a forma geométrica das esferas, e agora? A Solução: Quando queremos testar colisões entre esferas, teremos que verificar se a distância entre os centros delas são menores que a soma dos seus raios. Em caso positivo, então uma colisão ocorreu. Essa é a forma mais eficiente de detectar colisões entre duas esferas. Para detectar a colisão entre duas formas circulares, usamos o teorema de Pitágoras: (r2 = x2 + y2) (ver figura 2.12). Figura 2.12. Teorema de Pitágoras Referências Andrade, Kleber de Oliveira, “Introdução ao Desenvolvimento de Jogos”, http://pt.scribd.com/doc/79874524/desenvolvimento-de-jogos, Outubro. McGugan, Will, “Beginning Game Development with Python and Pygame”, 2007. “Game Level Design”, http://www.gamasutra.com/view/feature/175950/the_fundamental_pillars_of_a_.php , Outubro. “PyGameLib”, http://www.pygame.org/, Outubro. 26 ANAIS ELETRÔNICOS V ENUCOMP Fundamentos em Segurança e Hardening em Servidores Linux baseado na Norma ISO 27002 Felipe Santos Barbosa Abstract Lack of maturity concept of information security, both as managers from the IT technical staff about potential problems that may occur due to the lack of correct management of sensitive information of the company and the impacts that may cause the image of the corporation. Many administrators with little security experience preparing their servers with a basic installation and after their applications are already in operation they leave the way it is, the adoption of hardening techniques in the UNIX solutions come with standard ISO27002 controls. Having as its main objective to show how to seek compliance of best practices suggested in the standard. Resumo Falta amadurecimento do conceito segurança da informação, tanto de gestores como por parte da equipe técnica de TI sobre possíveis problemas que podem ocorrer pela falta do gerenciamento correto das informações sigilosas da empresa e os impactos que possam causar a imagem da corporação. Muitos Administradores sem muita experiência em segurança preparam seus servidores com uma instalação básica e, depois que suas aplicações já estão em funcionamento eles deixam da maneira que está, a adoção de técnicas de Hardening em ambientes UNIX provem soluções de controles com a norma ISO27002. Tendo como seu principal objetivo mostrar como buscar a conformidade das boas práticas sugeridas na norma. 3.1.Introdução A segurança da informação possibilita que o negócio da empresa seja realizado e sua missão alcançada, fazendo com que a informação seja um ativo de grande importância que necessita ser protegida, independente do formato em que ela se encontra como, por exemplo: impressa ou escrita em papel, armazenada eletronicamente, apresentada em filmes ou através de conversas. Investir em segurança da informação não é apenas uma questão de investimento tecnológico, mas também de gestão de pessoas, o que faz com que esse aspecto seja um dos mais difíceis de ser abordado e que merece bastante atenção dos especialistas na tentativa de mitigar os riscos sofridos pelas empresas, pois são as pessoas que executam e suportam os processos de uma organização. A necessidade do uso das informações e os riscos estão presentes em todos os negócios sendo preciso saber conviver com eles e administrá-los com competência, pois uma indisponibilidade pode causar danos irreparáveis e as pessoas ainda não possuem consciência ou 27 ANAIS ELETRÔNICOS V ENUCOMP não é disponibilizada a elas a importância de terem responsabilidade de ajudar a manter a confidencialidade e a integridade dessa informação. Uma das estratégias utilizada pela equipe de segurança da informação para ajudar a atingir os seus objetivos é desenvolver um programa de conscientização com a finalidade de fazer com que todas as pessoas da organização entendam a necessidade de segurança e passe a se preocupar com esses aspectos em todas as situações do cotidiano, além de transformar o elo mais fraco da cadeia em um grande aliado na estratégia da segurança corporativa. 3.2.Ambiente Organizacional O aumento da competitividade fez com que as empresas buscassem novos modelos de negócio, com maior rapidez, eficiência e qualidade nos serviços prestados e nos produtos. A informação passou a ser o ativo mais valioso da organização, exigindo um controle mais rígido e complexo. Diante desse novo cenário, a segurança da informação, que antes era de conhecimento apenas de grandes empresas e profissionais especializados, passou a ser conhecida por um número maior de pessoas, porém a maioria das organizações toma uma postura reativa em relação à segurança, tomando decisões após a ocorrência de um incidente ou até mesmo chegando a ignorá-lo dependendo do seu impacto nos negócios. Devido às constantes mudanças nas organizações e ambientes de TI é comum o surgimento de diferentes formas de ameaças e vulnerabilidades, tornando a sua gestão uma tarefa complexa e bastante abrangente. Para auxiliar no processo de implementação e manutenção do sistema de gestão de segurança da informação as empresas utilizam as principais normas série 27000 que são a NBR ISO/IEC 27001:2006 - Tecnologia da Informação - Técnicas de Segurança - Sistema de Gestão de Segurança da Informação (SGSI) - requisitos, norma que trata da definição de requisitos para SGSI, e a NBR ISO/IEC 27002:2005 - Tecnologia da Informação - Técnicas de Segurança Código de Prática para Gestão de Segurança da Informação, que é o código de melhores práticas para gerência da segurança da informação. De acordo com Fontes (2000, p.53), há oito dimensões da segurança da informação (SI) que podem auxiliar em todos os aspectos e facilitar esse processo. São elas: a) Organizacional: deve abranger as políticas, os termos de compromisso e as auditorias de acordo com a filosofia e a cultura da empresa; b) Controle de acesso a informação: envolve a identificação e autenticidade dos usuários nos sistemas computacionais e como ele deverá ser feito. Também identifica o gestor e o responsável pelo controle de acesso á informação; c) Desenvolvimento e a manutenção de sistemas: define os procedimentos, padrões, metodologias e regras de desenvolvimento, aquisição e manutenção de sistemas; d) Ambiente físico: envolve o controle de acesso e monitoramento do ambiente, além das condições técnico/ambientais para os equipamentos de informática funcionem corretamente; e) Ambiente descentralizado: deve levar em consideração a importância que os micros e redes locais estão ganhando nas empresas; 28 ANAIS ELETRÔNICOS V ENUCOMP f) Continuidade do negócio: planejamento de ações que permitem a continuidade do negócio, recuperação ou contingência caso algum desastre ocorra. Deve levar em consideração todos os riscos e ameaças que envolvem o negócio da empresa; g) Telemática: garante a comunicação da empresa com o mundo exterior. Deve ser monitorada e garantir a proteção das informações internas, assim como a confidencialidade nas comunicações entre cliente/empresa; h) Recursos Humanos: Fator de grande importância na implementação da SI. Abrange a campanha de conscientização dos usuários e as medidas que deverão ser tomadas para que isso ocorra. A NBR ISO/IEC 27002-2005 cita a conscientização dos usuários como um processo, porém não há um detalhamento ou procedimento de como isso deve ocorrer, permitindo que os gestores desenvolvam planos estratégicos de como isso deve ser feito, levando-se em consideração a realidade e a cultura da organização e lembrando que é uma estratégia à ser realizada de maneira abrangente, contínua e testada. Na descrição de acordo com a ABNT NBR ISO/IEC 27001-2006: A organização deve assegurar que todo pessoal que tem responsabilidades atribuídas definidas no SGSI seja competente para desempenhar as tarefas requeridas: a) determinando as competências necessárias para o pessoal que executa trabalhos que afetam o SGSI; b) fornecendo treinamento ou executando outras ações (por exemplo, contratar pessoal competente) para satisfazer essas necessidades; c) avaliando a eficácia das ações executadas; e mantendo registros de educação, treinamento, habilidades, experiências e qualificações. A organização deve também assegurar que todo o pessoal pertinente esteja consciente da relevância e importância das suas atividades da informação e como eles contribuem para o alcance dos objetivos do SGSI (FONTES, 2006). Diante dos dados de pesquisa da Módulo Security na sua 10ª Pesquisa Nacional de Segurança da Informação (2010), a estrutura da área de segurança da informação na maioria das empresas envolve profissionais que desempenham outras funções na área de TI, como Gerentes de TI/Redes. Somente em um pequeno número de empresas (13%) existe um cargo de CSO/Diretor de segurança (Figura 3.1). 29 ANAIS ELETRÔNICOS V ENUCOMP Figura 3.1 Percentuais de Profissionais que desempenham funções na área de TI nas empresas Fonte: Módulo Security Solutions 10ª Pesquisa Nacional de Segurança da Informação (2006, p.8) Segundo a Módulo Security (2006), apenas 25% das empresas preferem não terceirizar a área de Segurança da Informação, enquanto que aquelas que terceirizam dão a preferência aos serviços de administração e suporte a firewall e IDS (16%), help desks (13%) e análise de riscos (9%). 3.3.Segurança da Informação 3.3.1. Uma Visão Geral O conteúdo publicado nas redes sociais nem sempre são relevantes aos negócios da organização e muitas vezes podem reduzir a produtividade dos profissionais. A disponibilização de informações e a sensação de conforto, gerados pela liberação da utilização dessas ferramentas, pode favorecer o trabalho de pessoas maliciosas que utilizam de estratégias como a de Engenharia Social para obter informações sigilosas. De acordo com Frank Wazmer, ChiefInformation Officer (CIO) da rede hospitalar norteamericana Health First, explica que a ameaça à imagem das companhias é latente quando seus funcionários fazem parte de redes sociais. “Esses sites tornam-se plataforma para que eles possam fazer reclamações, comentários impertinentes ou até divulgar dados confidencias de forma maciça”, Tendo como única solução a conscientização dos usuários e a definição das regras que devem ser aceitas por todos que fazem parte da empresa. “É o único caminho eficiente que conheço, já que nenhuma ferramenta até agora consegue deter os criminosos virtuais”, conclui (COMPUTERWORLD, 2010, p.55). Dawel (2005, p.26) acredita que há no mínimo três explicações para que isso ocorra: desconhecimento do perigo que pode estar dentro da empresa, negligência em tratar as ameaças 30 ANAIS ELETRÔNICOS V ENUCOMP internas e a imperícia em lidar com assuntos relativos à segurança e tratá-las de forma amadora, achando que está sendo profissional. Em uma pesquisa realizada pela empresa Módulo Security com Guelman (2006) foi publicado que uma das principais constatações de um estudo realizado pelo "CSI/FBI Computer Crime and Security Survey" que a segurança da informação é muito mais uma questão gerencial do que tecnológica, pois de nada adianta investir em tecnologia e proteção física se não temos a colaboração e o comprometimento das pessoas. A 10ª Pesquisa Nacional de Segurança da Informação, realizada em 2006, pelo Módulo Security Solutions, empresa especializada em segurança da informação, com cerca de 600 profissionais ligados a área de tecnologia e segurança da informação de diversos segmentos de negócio, revelou que apesar de haver uma maior preocupação com investimentos em SI para ajudarem as empresas a estarem mais bem preparadas pra enfrentar algumas falhas de segurança, ainda é grande o número de empresas (33%) que não sabem quantificar as perdas ou sequer identificar os responsáveis pelo problema (21%). Porém a maioria das corporações (55%) considera como principal obstáculo para a implementação da segurança da informação a falta de conscientização dos executivos e usuários (Figura 3.2). Figura 3.2 Principais obstáculos para a implementação da Segurança da Informação Fonte: Módulo Security Solutions 10ª Pesquisa Nacional de Segurança da Informação (2006, p.7) Para ajudar a melhorar esse cenário é fundamental que a alta gerência tenha claro que a conscientização de seus funcionários é um fator crítico de sucesso no plano de segurança da informação. Para isso é necessário que seja realizada uma avaliação do nível de conhecimento que a direção da empresa possui sobre o assunto e que seja feito um nivelamento de informações utilizando as recomendações das normas, as melhores práticas e cases de sucesso, tendo como apoio, caso se faça necessário, uma consultoria especializada no assunto. 31 ANAIS ELETRÔNICOS V ENUCOMP O aumento do nível de conscientização dos altos executivos e o crescente número de ataques, invasões e vazamento de informações enfrentadas pela empresa, têm incentivado a capacidade dos funcionários que trabalham na área de Segurança da Informação, conforme demonstrado na (Figura 3.3). Figura 3.3. Nível de capacitação dos profissionais que lidam com a Segurança da Informação na corporação Fonte: Módulo Security Solutions 10ª Pesquisa Nacional de Segurança da Informação (2006, p.14) 3.3.2. Generalidades e Conceitos A preocupação com a segurança da informação e com os conhecimentos que ela proporciona vem desde o inicio da existência do ser humano, antes mesmo da invenção e uso dos computadores. As civilizações antigas desenvolveram métodos de segurança da informação, como a cifra, onde cada letra do alfabeto era modificada e somente a pessoa que possuía a chave para decifrar o manuscrito conseguia ler a informação corrente. Esse método de cifra foi utilizado por muito tempo, inclusive na Segunda Guerra mundial para proteger informações estratégicas de guerra dos exércitos. Com o avanço tecnológico, o aumento do uso e das facilidades que o computador proporciona, fez-se necessário o surgimento da segurança da informação e, ao longo do tempo, o desenvolvimento de normas e padrões que servem como guias de melhores práticas e auxiliam na sua estruturação. Para que a segurança da informação tenha sucesso na sua implementação é necessário que ela envolva todas as áreas da empresa, ativos e pessoas e a atividade de conscientização do uso das políticas de segurança da informação e seja uma cultura da organização (FONTES, 2000). 3.3.3. Objetivos A segurança da informação tem como objetivo a proteção das informações através de um conjunto de orientações, normas, procedimentos, políticas e demais ações para garantir a sua 32 ANAIS ELETRÔNICOS V ENUCOMP preservação contra possíveis danos, perdas, furtos e mau uso, afetando a continuidade do negócio e alcance de seus objetivos. De acordo com a norma ABNT NBR ISO/IEC 27002:2005 a informação é um ativo e como outro qualquer ativo importante, é essencial para os negócios de uma organização e, consequentemente, necessita ser adequadamente protegida. Isto é especialmente importante no ambiente dos negócios, cada vez mais interconectado. Como um resultado desde o incrível aumento da interconectividade, a informação está agora exposta a um crescente número e a uma grande variedade de ameaças e vulnerabilidades (ABNT, 2005). Um ativo é qualquer coisa que tenha valor para empresa, como serviços, equipamentos, pessoas, conhecimentos, sua imagem e reputação. Segundo a NBR ISO/IEC 27002-2005 (ABNT, 2005) para que a informação possa estar protegida é necessário que ela possua os três princípios básicos da segurança, que são: Confidencialidade, Integridade e Disponibilidade. Confidencialidade: somente indivíduos autorizados possuem acesso a esse ativo, impedindo que a informação acabe sendo acessada por pessoas erradas ou divulgada sem autorização prévia. Exemplo: Acesso á folha de pagamento do RH por um funcionário não autorizado. Integridade: o ativo ou a informação devem estar em seu formato original preservando a sua exatidão e completeza, ou seja, a informação não pode ter sofrido alteração. Disponibilidade: o ativo deve estar disponível e acessível para o individuo autorizado sempre que necessário. Além desses princípios básicos, a proteção também pode ser obtida através da auditabilidade (registro do acesso e uso da informação para posteriores consultas e averiguações), da legibilidade (de acordo com as leis aplicáveis, regulamentos, licenças e contratos para o negócio), do não repúdio (garantia de que o usuário da informação não possa negar as suas responsabilidades pelo seu uso) (TI EXAMES ISO/27002 FOUNDATION, 2011). Para que sejam elaboradas as normas e diretrizes, como políticas de segurança da informação, de acordo com o tipo de negócio da empresa e o seu porte, tendo que haver um total comprometimento de toda a organização com nesse processo, desde a alta direção até os estagiários, prestadores de serviço e/ou partes envolvidas. 3.3.4. Políticas de Segurança da Informação A política de segurança da informação (PSI), de acordo com Fontes é um documento que deve ser elaborado pela equipe técnica, geralmente a equipe de segurança da informação, juntamente com a alta direção visando estabelecer regras, normas e diretrizes de acordo com cada empresa. Ela deve garantir que todas as áreas e recursos da empresa sejam abrangidos e ser coerente com a sua visão, missão e objetivos, além de ser elaborado em uma linguagem de fácil entendimento por todos, evitando utilização de termos técnicos e aspectos de implementação (FONTES, 2000). Todas as pessoas que fazem parte da empresa devem conhecer e seguir as políticas de segurança, independentemente do seu nível hierárquico ou do seu grau de participação, inclusive 33 ANAIS ELETRÔNICOS V ENUCOMP os prestadores de serviço e stakeholders (FONTES, 2000).Segundo Fontes (2000, p.38) a PSI deve conter os seguintes tópicos: a) a informação como um bem da empresa; b) controle do acesso a informação; c) definição do gestor da informação; d) responsabilidades do usuário, da gerência e do gestor da informação; e) preparação para situações de contingência, garantindo a continuidade da execução do negócio; f) definição do uso profissional da informação da empresa; g) definição da possibilidade, ou não, da empresa acessar arquivos pessoais do usuário, quando de investigações criminais; h) definição da identificação do usuário como pessoal e única, bem como a responsabilidade do sigilo da senha; i) conscientização dos usuários; j) medidas disciplinares que serão utilizadas caso a política não seja cumprida. A implantação da PSI tende a ser longa e deve ser realizada de maneira formal e adaptável para que possa se adequar à realidade da empresa. Sua manutenção deve ser constante e seus tópicos revisados e atualizados de acordo com as suas necessidades e importância (FONTES, 2000). 3.3.5. Vulnerabilidades A vulnerabilidade pode ser considerada uma falha no sistema computacional que cria deficiências na segurança e que pode ser ocasionadas por configurações incorretas do computador ou de segurança (FONTES, 2000). Segundo Sêmola (2002) e Moreira (2001) respectivamente, a fragilidade presente ou associada a ativos que manipulam e/ou processam informações que, ao ser explorada por ameaças, permitem a ocorrência de um incidente de segurança, afetando negativamente um ou mais princípios da segurança da informação: Confidencialidade, Integridade e Disponibilidade. A vulnerabilidade é o ponto onde qualquer sistema é suscetível a um ataque, ou seja, é uma condição encontrada em determinados recursos, processos, configurações, etc. Condição causada muitas vezes pela ausência ou ineficiência das medidas de proteção utilizadas com o intuito de salvaguardar os bens da empresa (SÊMOLA, 2002). As vulnerabilidades podem ser encontradas em praticamente todos os ambientes, podendo ser de vários tipos, como: físicas, naturais, hardware, software, mídias, comunicação e humana. A identificação dessas vulnerabilidades e a implantação de medidas de segurança diminuem o grau de ameaça e aumenta a possibilidade da continuidade do negócio (MOREIRA, 2001). Em relação a segurança da informação, a vulnerabilidade humana é um dos pontos mais frágeis e ela pode ser causada devido a negligência ou não conhecimento das políticas de segurança, falta de treinamento, sabotagens, compartilhamento de informações confidenciais 34 ANAIS ELETRÔNICOS V ENUCOMP como senhas e envio de e-mails a pessoa não autorizada, destruição ou roubo de propriedade ou dados, entre outros. (SÊMOLA, 2002). 3.6. Ameaças Para Araújo (2005), as ameaças são muitas das vezes consequências das vulnerabilidades existentes, provocando assim perdas de confidencialidade, integridade e disponibilidade. A perda da confidencialidade ocorre quando há a quebra do sigilo de alguma forma, como o vazamento de informações e a descoberta da senha de um usuário. Quando a informação é acessada por pessoas não autorizadas e há alterações dessas informações ocorre a perda da integridade. Já a perda de disponibilidade é quando, por exemplo, a informação não está acessível a quem precisa dela, ou por motivos acidentais, fatores internos ou externos, má intenção ou ainda falha nos equipamentos (ARAUJO, 2005).As ameaças podem ser naturais, quando são causadas devido a fenômenos da natureza e não naturais quando são causadas pelo ser humano. O erro humano é a causa mais comum para a perda de dados, que pode ocorrer de forma acidentalmente por apagar ou sobrescrever um arquivo existente na rede. Usuários frequentemente utilizam seus computadores com configurações pré-configuradas sem entender o que elas significam o que pode causar sérios danos. Muitos problemas originados nos computadores das empresas são causados por atividades executadas por seus próprios funcionários. Kevin Mitnick, um dos maiores cyber criminosos dos EUA, que atualmente trabalha em prol da segurança da informação considera as pessoas como o elo mais fraco da segurança, devido à falsa sensação de segurança ocasionada pelo desenvolvimento e utilização de melhores tecnologias de segurança, tornando mais difícil a exploração de vulnerabilidades técnicas. Para Mitnick (2006), a quebra do "firewall humano" quase sempre é fácil, não exige nenhum investimento além do custo de uma ligação telefônica e envolve um risco mínimo. As empresas estão se preocupando cada vez mais com a proteção da informação, pois estão convencidas de que ela é um ativo de grande importância e valor. Um dos pontos relevantes para que a proteção dessa informação ocorra é a conscientização dos seus funcionários quanto à utilização desse ativo. De acordo com Fontes (2006) conscientização é mais do que um simples conhecimento: estar conscientizado em proteção da informação é internalizar os conceitos e agir com naturalidade no cumprimento dos regulamentos. Significa que a segurança da informação deve fazer parte do dia-a-dia e não ser considerada um peso em nossas responsabilidades profissionais para a organização. Significa também que os executivos da organização devem avaliar e testar comprometidos com o nível estabelecido para a proteção. Fontes (2006, p.32) destaca que vulnerabilidade humana pode ocorrer por diversos tipos de problemas, como descritos a seguir. Pouco ou nenhum entendimento sobre segurança: segurança não é um instinto e deve ser ensinada às pessoas. 35 ANAIS ELETRÔNICOS V ENUCOMP As ameaças devem ser claramente explicadas: muitas pessoas não acreditam que um problema realmente exista por nunca terem sofrido ou conhecerem alguém que já tenha sido de algum tipo de fraude eletrônica. Questões culturais: o comportamento das pessoas não muda facilmente. O hábito de usar regras de segurança não deve ser utilizado apenas dentro da organização. As pessoas também devem ter hábitos fora do ambiente empresarial, fazendo com que a segurança seja uma rotina em seu diaa-dia. Resistência às medidas de segurança: as pessoas costumam ter a falsa sensação de perda de liberdade ao se submeterem às políticas de segurança, ou ainda, que são pessoas não confiáveis perante a organização. Necessidades: geradas principalmente pela necessidade financeira. Oportunidades: os funcionários têm o conhecimento de como a organização funciona diariamente, consequentemente possuem o conhecimento das fragilidades dos controles internos. Racionalização: a conduta da pessoa a faz acreditar e a tornar a fraude como algo justo. O fator humano no desenvolvimento e implantação das políticas de segurança da informação é o ponto mais problemático para a organização, pois é o único aspecto que não pode ser diretamente controlado, como ocorre com os diversos tipos de sistemas e computadores que são programados a executar com fortes políticas de segurança. A organização deve desenvolver um plano de conscientização dos usuários, como o objetivo de introduzir a preocupação com a SI na cultura organizacional. Deve envolver todos os funcionários da organização e, caso se faça necessário, fornecedores e terceiros. O processo de seleção dos profissionais também deve ser realizado de maneira criteriosa, levando-se em consideração a importância do ativo pelo qual o colaborador será responsável, além dos seus conhecimentos e da titularidade exigida pela função. Os riscos considerados ativos podem ser mais bem gerenciados de acordo com as vulnerabilidades humanas se todas as pessoas reconhecerem o seu papel, suas responsabilidades e habilidades, fazendo a diferença na prática e contribuindo para a SI. A empresa deve estabelecer regras que sejam claras e objetivas, medir a adesão às políticas de segurança da informação periodicamente, ter um criterioso processo de seleção, prover treinamento, atualizações e reciclagens, fornecer informações de como se defender de ataques tecnológicos e engenharia social além de possuir um conjunto de tecnologias aplicadas a SI. 3.4. Motivos de Ameaça à Segurança No começo dos anos 70 poucos eram as ameaças e danos que poderiam ser causados a informação pela utilização dos computadores, onde a maioria dos perigos era causada pela utilização de disquetes contaminados e, posteriormente, de CDs e jogos que carregavam vírus e cavalos de Tróia. O aumento do uso de computadores pelas organizações para processar e armazenar informações importantes e confidenciais sobre o seu negócio, o compartilhamento das informações através da rede, o desenvolvimento de novos negócios na internet, a sua facilidade de uso, baixo custo, 36 ANAIS ELETRÔNICOS V ENUCOMP anonimato e, consequentemente, impunidade contribuíram exponencialmente para o crescimento dos ataques às informações pessoais e, principalmente empresárias. Conforme publicado na 10ª Pesquisa Nacional de Segurança da informação há uma grande dificuldade das organizações em conseguir identificar os responsáveis pelas ameaças, fazendo com que elas se dediquem apenas a corrigir as falhas (48%), quando descoberta, ou tomar providências internas (25%), acionando por conta própria o causador do problema (MÓDULO SECURITY SOLUTIONS, 2006). Os danos causados por vários tipos de ameaça podem gerar perdas significantes para as organizações. O conhecimento das vulnerabilidades dos sistemas e suas ameaças ajudam a mitigar os riscos com a implementação de medidas corretivas e custos aceitáveis para a organização. Ainda de acordo com a mesma pesquisa, quando as organizações conseguem identificar os responsáveis é verificado que a maioria das falhas de segurança é causado por funcionários (24%) e hackers (20%). As ameaças que mais causam danos financeiros são os vírus (15%), spam (10%) e as fraudes (8%) (Figura 3.4). Figura 3. 4 Problemas que geraram perdas financeiras Fonte: Módulo Security Solutions 10ª Pesquisa Nacional de Segurança da Informação (2006, p.6). Para Mitnick (2003) não existe um computador 100% seguro, pois um criminoso fará de tudo para conseguir a informação desejada.Há um ditado popular que diz que um computador seguro é aquele que está desligado. Isso é inteligente, mas é falso: o criminoso convence alguém 37 ANAIS ELETRÔNICOS V ENUCOMP a entrar no escritório e ligar aquele computador. Tudo é uma questão de tempo, paciência, personalidade e persistência. É nesse ponto que entra a arte da fraude (MITNICK, 2003). O conhecimento das causas e riscos que as ameaças trazem se faz necessário, pois os usuários repetem seus comportamentos domésticos diários nos ambientes corporativos, comprometendo igualmente a segurança dos computadores utilizados. 3.4.1. Erros e Omissões Também chamados de bug's do sistema, os erros e as omissões podem causar ameaças à integridade dos sistemas devido a problemas que podem ser gerados pela edição das informações diária, por diversos funcionários e/ou automaticamente pelo próprio sistema, como através de atualizações ou erros de programação, podendo contribuir direta ou indiretamente com as brechas de segurança. Alguns desses tipos de erros podem causar perdas irreparáveis ou criar vulnerabilidades e podem ocorrer durante todo o ciclo de vida do sistema. Uma pesquisa publicada pelo portal terra em julho de 2007 mostra que uma falha de segurança foi descoberta em um erro de programação bastante comum. O erro era considerado apenas “preguiça de programador", no entanto agora ele é considerado um defeito gravíssimo em segurança e está presente em milhares de programas e sistemas em todo o mundo. Atualizações de segurança também são frequentemente liberados com frequência por diversos desenvolvedores de sistemas para correção de vulnerabilidades, descobertas em seus diversos sistemas para evitar que erros e/ou falhas de programação sejam explorados por pessoas mal intencionadas. 3.4.2. Fraude e Roubo Podem ser ações causadas tanto por pessoas externas (conhecidas ou não) como, na grande maioria das vezes pelos próprios funcionários, utilizando-se de métodos tradicionais, como desvio de dinheiro e falsificação de documentos, ou através de novas formas. Os softwares e hardwares em geral também são alvos vulneráveis de roubo. De acordo com uma recente comparação feita pelo Centro de Estudos, Respostas e Tratamento de Incidentes de Segurança - CERT.br (2011) notificações relacionadas a tentativa de fraude apresentam crescimento de 45,8%, em relação ao trimestre anterior e de 23,6% sobre o mesmo período de 2010. Houve aumento de 73,4% no número de notificações de páginas falsas de bancos e de sites de comércio eletrônico (Phishing), em relação ao quarto trimestre de 2010 e de 134,4% em relação ao mesmo período de 2010 (Tabela 3.1). Tabela 3.1 Notificações de ataques classificados por tipo de ataque Fonte: http://www.cert.br/stats/incidentes/2011-jan-mar/total.html 38 ANAIS ELETRÔNICOS V ENUCOMP Os itens apresentados na Tabela 3.1 têm os significados a seguir descritos. Worm: notificação de atividades maliciosas relacionadas com o processo automatizado de propagação de códigos maliciosos na rede. DoS(DoS – Denialof Service): notificação de ataques de negação de serviço, onde o atacante utiliza um computador ou um conjunto de computadores para tirar de operação um serviço, computador ou rede. Invasão: um ataque bem sucedido que resulte no acesso não autorizado a um computador ou rede. Web: um caso particular de ataques visando especificamente o comprometimento de servidores Web ou desfiguração de páginas na internet. Scan: notificações de varreduras em redes de computadores, com o intuito de identificar quais computadores estão ativos e quais serviços estão sendo disponibilizados por eles. É amplamente utilizado por atacantes para identificar potenciais alvos, pois permite associar possíveis vulnerabilidades aos serviços habilitados em um computador. Fraude: segundo Houaiss, é "qualquer ato ardiloso, enganoso, de má-fé, com intuito de lesar ou ludibriar outrem, ou de não cumprir determinado dever, logro”. Esta categoria engloba as notificações de tentativa de fraudes, ou seja, de incidentes em que ocorre uma tentativa de obter vantagens. Outros: notificações de incidentes que não se enquadram nas categorias anteriores. 3.4.3. Sabotagem dos Funcionários Os funcionários têm um amplo conhecimento de como é a estrutura organizacional da empresa, o funcionamento diário de sistemas e possíveis brechas facilitando a sabotagem. O número de incidentes gerados por esse tipo de ameaça não chega a ser maior do que o número de roubos, porém o custo desses incidentes pode ser significativamente maior. A insatisfação do funcionário, como a não aprovação constante de seu chefe, a falta de reconhecimento ou promoção de cargo ou salarial, pode levá-lo a esse tipo de ação, ajudando-o a atingir um nível maior de insatisfação no seu trabalho. O site BR-Linux.org publicou em 2008, em uma de suas reportagens, que um problema na rede da telefônica que deixou boa parte de São Paulo off-line pode ter sido causado por sabotagem interna. Segundo os próprios funcionários da companhia, uma semana antes do incidente, foram demitidos cerca de 700 funcionários da Telefônica, por conta de fechamento de contrato de terceirização com fornecedores. Um dos funcionários ainda citou que esse mesmo problema já havia ocorrido há um ano, porém o incidente não havia sido tão grave. 3.4.4. Hackers Maliciosos Também chamados de crackers, referem-se a pessoas que se aproveitam de brechas e vulnerabilidades do sistema para invadi-lo. Podem ser tanto pessoas internas quando externas da empresa. Atualmente os danos causados pelos crackers são menores do que os causados pelos roubos e sabotagem de funcionários, porém recebem mais atenção do que as demais ameaças por 39 ANAIS ELETRÔNICOS V ENUCOMP não haver o conhecimento do seu objeto e por tomar as pessoas vulneráveis por não conhecer a identidade dos hackers. Em dezembro de 2009 um e-mail circulava pela internet oferecendo vacina para antigripe H1N1. Através desse e-mail os hackers maliciosos redirecionavam o usuário para um site falso que baixava automaticamente programas maliciosos para o computador da vítima. O computador contaminado era utilizado para furtar dados cadastrais, atacar outros computadores e transformar a máquina em um servidor de "spam" (REUTERS, 2009). 3.4.5. Espionagem Industrial É a ação em que se obtêm informações confidenciais de empresas particulares ou privadas com o propósito de vendê-las para outras empresas. A espionagem industrial pode ser encomendada por empresas para obter informações precisas de empresas concorrentes ou pelo próprio governo para buscar vantagens econômicas ou nos seus negócios industriais. Os três maiores tipos de danos causados pelo roubo de informação são: o custo dessa informação, a informação do processo de manufatura e a especificação da informação no processo de desenvolvimento de novos produtos e serviços. A ABIN (Agência Brasileira de Inteligência) publicou em 2008 no seu site uma reportagem realizada por Xavier (2008) sobre espionagem industrial relacionado ao furto ocorrido na Petrobrás de informações sigilosas sobre pesquisas sísmicas que estavam armazenadas em dois laptops que estavam sendo transportados em um container pela empresa norte-americana Halliburton. Para Advir, diretor e dono da Ormax, uma empresa especializada em contra-espionagem localizada em São Paulo, “A espionagem industrial é praticada há muitos anos, mas tem crescido a passos largos graças à tecnologia mais barata e ao número da competição entre as empresas" (XAVIER, 2008, p.88). 3.4.6. Código Malicioso Refere-se a vírus, worms, trojans, malwares em geral. Atacam tanto computadores pessoais quanto outros tipos de plataforma, como celulares. Atuais custos atribuídos à presença de códigos maliciosos podem resultar primeiramente pela parada do serviço para remoção do malware ou o tempo do funcionário envolvido no reparo do sistema, entretanto esses custos podem ser significantes. Virus: é pequeno programa de computador que se replica propositalmente, algumas vezes em forma alterada. As versões replicadas do vírus original também são vírus. Worm: programa de computador que se replica propositalmente. O resultado da replicação são cópias do original que se espalham por outros sistemas fazendo uso dos recursos da rede. Trojans: programa que propositalmente conduz atividades secundárias, não observadas pelo usuário do computador e que podem causar dano à integridade do sistema infectado. (TI EXAMES ISO/27002 FOUNDATION, 2011). Em uma entrevista realizada pela Módulo Security com Rob Slade (2006), especialista em vírus de computador, foi publicado que os vírus de macros surgiram em 1995 e acreditava-se que somente programas eram perigosos. Já em 1998 os criadores de vírus começam a disseminá40 ANAIS ELETRÔNICOS V ENUCOMP los pela internet infectando um número maior de pessoas e se espalhando pela rede mundial quase que instantaneamente, porém o maior problema surgiu em 2003 quando esses desenvolvedores perceberam as possibilidades de fazer dinheiro com o uso desses malwares. O risco passou a aumentar de forma gradativa e a conscientização dos usuários não acompanhou esse processo. Dessa forma, a conscientização passa novamente a ser um fator importantíssimo para as empresas na mitigação de riscos e vulnerabilidades em seus ativos, conforme Slade (2006) recomenda em um trecho de sua entrevista citando sobre as tendências para o futuro e o que as empresas poderiam fazer para melhor se protegerem. Nós não podemos saber como as tecnologias perigosas podem ser, mas sabemos que serão como aplicações que colaboram para a "conveniência do usuário". Muito provavelmente, se relacionarão com ferramentas que existam. Em termos de proteção a conscientização continuará sendo a melhor defesa. Organize palestras para seus funcionários, ensine o que é perigoso e que todos os atalhos geralmente resultam em infecções. É apontado também que seminários para os usuários em geral são uma das mais efetivas proteções, em termos de custobenefício: ensinando usuários que não trabalham para você, você ajuda na proteção. Os vírus que atingem usuários infectados enviam cópias e uma destas pode atingir você. (SLADE, 2006, p.2). 3.4.7. Spam É um nome coletivo para mensagens indesejadas. O termo é normalmente usado para email, mas mensagens de publicidade e em web sites também são consideradas como spam.O número de spams reportados para o CERT.br, órgão responsável por receber, analisar e responder a incidentes de segurança envolvendo redes conectadas à internet, chegou a um total de 31.367,42 somente entre janeiro e junho de 2011 e esse número vem crescendo exponencialmente a cada ano (Figura 3.5). Figure 3.5 Spams reportados ao CERT.br por ano Fonte: http://www.cert.br/stats/spam/ 41 ANAIS ELETRÔNICOS V ENUCOMP 3.4.8. Exploração de Vulnerabilidades Vulnerabilidades ocorrem, principalmente, em softwares comerciais ou, até mesmo, nas ferramentas de segurança como antivírus e firewalls. A Figura 3.6 exibe os incidentes reportados em 2011 referentes aos tipos de ataque pelos sistemas e usuários de computadores. Figura 3.6 Tipos de ataques reportados ao CERT.br no ano de 2011 Fonte: http://www.cert.br/stats/incidentes/2011-jan-mar/tipos-ataque.html De acordo com resultados da 16ª edição do internet Security ThereatReport, divulgado pela Symatec só em 2010 foram descobertos mais de 286 milhões de novas ameaças com ataques direcionados às organizações. No universo da mobilidade, as incidências de ameaças subiram para 42%. Com isso, as empresas norte-americanas gastam em média, $7,2 milhões para sanar um vazamento de dados. Em matéria divulgada pela DecisionReport (2011) Vendramini diretor Comercial da Symantec Brasil cita como tendência de ameaça para os próximos anos ataques direcionados como o Hydraq e o Stuxnet, esse último tem se mostrado uma ameaça crescente em todo o mundo pelo fato de ser considerado o maior ataque cibernético da história. O Stuxnet abriu uma porta para os malwares que alteraram a frequência de energia do motor, que ocasionou também a capacidade de produção de uma empresa. 3.4.9. Ameaça à Privacidade Podem ter várias origens, uma delas é a venda de informações pessoais dos cadastros de moradores de uma determinada região ou país por funcionários públicos para empresas privadas para que elas possam disseminar sua marca e promover propagandas de seus produtos e serviços. A divulgação de informação também pode favorecer a engenharia social facilitando o ataque. As informações também devem ser descartadas de forma adequada, evitando que pessoas mal intencionadas possam conseguir informações valiosas, como contas e senhas de usuários, configurações de computadores, número de contas bancárias, vasculhando o lixo de uma empresa. 3.4.10. A Fragilidade das Senhas Fracas Na tentativa de se obter sucesso em um acesso não autorizado o primeiro alvo a ser atacado são as senhas de usuários, que geralmente não possuem uma complexidade na sua 42 ANAIS ELETRÔNICOS V ENUCOMP elaboração, são anotadas e armazenadas em locais com pouca ou sem nenhuma segurança ou compartilhada com demais usuários. Ao obter sucesso na invasão o hacker pode acessar informações particulares ou confidenciais, instalar ou executar programas, tornar a máquina vulnerável e trazer sérios riscos à organização. De acordo com a redação do site Correio 24 Horas (2011), o apresentador Luciano Huck teve a sua senha do Twitter roubada e divulgada aos seus seguidores. O hacker dizia que tinha trocado a sua senha e mandado de forma privada para a mulher do apresentador, Angélica. Poucos minutos depois, Huck brincou escrevendo para os seguidores. "Depois da indelicadeza de ser hackeado no twitter... estou de volta! Ah... minha nova senha é: Angélica!", brincou. 3.5. Engenharia Social Um engenheiro social recebeu a atribuição de obter os planos do seu novo produto que deve ser lançado em dois meses. O que vai impedi-lo? O seu Firewall? Não. Dispositivos avançados de autenticação? Não. Sistemas detectores de invasão? Não. Criptografia? Não. Acesso limitado aos números de telefone de discagem por modems? Não. Nomes de códigos nos servidores para dificultar que um estranho determine qual servidor podem conter os planos do produto? Não. A verdade é que não existe uma tecnologia no mundo que evite o ataque de um engenheiro social (MITNICK, 2003).A ausência das medidas de segurança e a fragilidade humana podem facilitar o uso da engenharia social, que é uma técnica para obtenção de informações de uma organização ou pessoal através de métodos para enganá-las ou explorá-las. Geralmente o infrator se passa por outra pessoa, fingindo ser um profissional ou outra personalidade, não utilizando de força bruta ou falhas de equipamentos para explorá-los.Segundo Mitnick (2003) a engenharia social usa a influência e a persuasão para enganar as pessoas e convencê-las de que o engenheiro social é alguém que na verdade ele não é, ou pela manipulação. Como resultado, o engenheiro social pode aproveitar-se das pessoas para obter as informações com ou sem o uso da tecnologia. Em uma reportagem exibida pelo programa Fantástico - Globo (2011) nos deparamos com a notícia de que "No Rio falso tenente-coronel do Exército atuava nas barbas da cúpula da Segurança Pública..." Esta noticia, que muitos devem ter visto ou ouvido, causou um verdadeiro alvoroço tanto na mídia como na alta cúpula de Segurança Pública no Estado do Rio de Janeiro, que foi colocada em uma situação um tanto constrangedora. Em um dos seus trechos o falso coronel cita "Eu consegui porque entrei e ninguém me perguntou nada e nem pediu nenhuma identificação. “E se já não bastasse” ainda apresentava documentos falsos criados por ele próprio e por último em mais uma de suas colocações cita "...que a parte que mais engana as pessoas é tão somente a convicção com que o engenheiro social se porta, a forma como coloca os assuntos e os resultados apresentados...". Enfim, ele utilizou-se de suas habilidades em convencer as pessoas, para se tornar parte de um projeto maior, que neste caso específico, era estar/atuar na cúpula da Secretária de Segurança Pública do Rio de Janeiro. Algumas das características humanas utilizadas para a aplicação da engenharia social são (MITNICK, 2003, p.8): 43 ANAIS ELETRÔNICOS V ENUCOMP a) vaidade pessoal e/ou profissional; b) autoconfiança; c) formação profissional; d) vontade de ser útil; e) busca por novas amizades; f) propagação de responsabilidades; g) persuasão. Inúmeras ferramentas podem ser utilizadas pelos engenheiros sociais para alcançar os seus objetivos, entre eles podem-se destacadas a utilização do telefone, internet, e-mail, e/ou correspondências, chats, malwares em geral, espionagem, roubo de informações através de documentos descartados incorretamente (MITNICK, 2003). Geralmente os engenheiros sociais bem-sucedidos têm a habilidade de lidar com as pessoas, são educados e agradam facilmente, o que ajuda no estabelecimento de afinidade e confiança. Utilizam-se de documentos aparentemente sem grande importância, o qual as pessoas da organização não veem nenhum motivo pelo qual ela deva ser protegida e restrita, e desenvolvem um ambiente de credibilidade, além de explorar a confiança da vítima sem levantar qualquer suspeita utilizando-se da crença de que a probabilidade de ser enganado é muito baixa (MITNICK, 2003). Para que uma empresa ou pessoa evite a trapaça Mitnick (2003, p.32) diz que: A sua empresa tem a responsabilidade de informar os empregados sobre como pode ocorrer um erro sério quando informações não públicas são tratadas da forma errada. Uma política de segurança bem desenvolvida, combinada a educação e treinamento adequados, aumenta bastante a consciência do empregado sobre o tratamento correto das informações comerciais corporativas. Uma política de classificação de dados ajuda você a implementar os controles adequados para divulgação das informações. Sem uma política de classificação de dados, todas as informações internas devem ser consideradas confidenciais, a menos que seja especificado o contrário. De acordo com Mitnick (2003, p.33) as empresas devem seguir alguns passos que ajudam a protegê-la contra a divulgação de informações aparentemente inofensivas: a) realização de treinamentos e conscientização fornecidos pela equipe de Segurança da informação sobre os métodos utilizados pelos engenheiros sociais; b) determinar o método apropriado de autenticação a ser usado quando os empregados interagem com as pessoas que eles não conhecem pessoalmente ou por telefone. c) classificação das informações que aparentam ser inofensivas verificando se o acesso a elas não poderá levar o engenheiro social a acessar informações sigilosas da empresa; d) o uso da terminologia interna pode fazer com o que o engenheiro social pareça assumir autoridades e conhecimento; 44 ANAIS ELETRÔNICOS V ENUCOMP e)evitar a divulgação dos telefones diretos dos CEOs ou diretos para pessoas desconhecidas. Elaborar uma política de identificação positiva pode auxiliar no fornecimento dessas informações somente aos colaboradores da empresa; f) ter uma política escrita e bem divulgada sobre a divulgação de informações de código contábeis dos grupos de trabalho e departamentos; g)verificar sempre a identidade do solicitante juntamente com a necessidade que o requisitante tem que saber; h) os funcionários deverão ser treinados a negar educadamente alguma informação até que a solicitação possa ser verificada. As políticas e procedimentos da empresa com relação à divulgação de informação não pública devem ser sempre seguidos. Portanto, trazendo isso à realidade corporativa, fica evidente que combater um engenheiro social é um dos mais difíceis papéis, até mesmo para os mais experientes CSO, pois depende da colaboração de todos da empresa. Essa colaboração só é possível de acontecer com um mínimo nível de maturidade em segurança da informação, e para alcançar isso, uma das ações que mais apresenta resultado são as políticas de conscientização de usuários (CORREIA, 2011). 3.6. Conscientização e Treinamento em Segurança Um programa de conscientização e treinamento deve ser desenvolvido de acordo com os motivos pelo qual as pessoas são vulneráveis aos ataques. Um estudo realizado por Robert B. Cialdini durante 50 anos resumiu seis tendências básicas da natureza humanautilizadas pelos engenheiros sociais (MITNICK, 2003, p.12). Autoridades: as pessoas têm a tendência de atender solicitações que são feitas por pessoas com autoridades ou que estão autorizados a fazer tal solicitação. Afabilidade: as pessoas têm a tendência de atender solicitações quando o solicitante se faz passar por alguém agradável ou com interesses, crenças e atitudes semelhantes aos da vítima. Reciprocidade: costumamos a atender a solicitações quando acreditamos que recebemos algo de valor como retribuição. Consistência: após fazer um comprometimento público ou adotar uma causa as pessoas têm a tendência de atender as solicitações para não parecem pouco confiáveis ou indesejáveis. Validação Social: o cooperativismo quando a ação parece estar de acordo com aquilo que as pessoas estão fazendo aparentando estar de forma correta e apropriada. Escassez: as pessoas costumam cooperar quando o objeto que está sendo procurado está em falta ou disponível por um curtoperíodo de tempo e que outras pessoas estão competindo por ele. O programa de conscientização e treinamento deve visar à mudança de comportamento dos funcionários motivando-os a querer fazer parte do programa protegendo os ativos da empresa e também as suas próprias informações. Ele deve atingir cada pessoa que tem acesso as informações confidenciais ou aos sistemas corporativos de computadores. Deve ser realizado de forma contínua e atualizado sobre as novas ameaças e vulnerabilidades e divulgado a todos os funcionários da corporação fazendo com que eles aprendam que cada colaborador tem um papel importante na defesa contra tentativa de invasão aos dados confidenciais. 45 ANAIS ELETRÔNICOS V ENUCOMP Por definição, a engenharia social envolve algum tipo de interação humana.Com frequência, um atacante usa vários métodos de comunicação e tecnologias para tentar atingir o seu objetivo. Por esse motivo, um programa de conscientização bem feita tenta abortar alguns ou todos estes itens: a) as políticas de segurança relacionadas com senhas de computador; b) o procedimento de divulgação de informações ou material confidencial; c) a política de uso do correio eletrônico, incluindo as medidas para evitar ataques maliciosos de código; d) a responsabilidade de questionar as pessoas que estão nas instalações sem o crachá; e) como determinar a classificação das informações e as medidas adequadas para proteger as informações confidenciais; f) a eliminação adequada de documentos confidenciais e mídia de computador que contenham, ou que já tenham contido material confidencial. O programa de conscientização deve ser realizado de forma constante, além de ser criativo e utilizar todos os canais disponíveis de comunicação para que todos os colaboradores tenham acesso às mensagens e possam ter em mente os bons hábitos de segurança. Outra tática que pode ser utilizada é a linguagem no qual as mensagens são redigidas evitando que elas tornem familiares demais para serem ignoradas (MITNICK; SIMON, 2006). 3.7. O que é Hardening ? Segundo o WikipediaHardening é um processo de mapeamento das ameaças, mitigação dos riscos e execuçao das atividades corretivas – com foco na infraestrutura e objetivo principal de torná-la preparada para enfrentar tentativas de ataques. Muitos administradores sem muita experiencia em segurança preparam seus servidores com uma instalação básica e, depois que suas aplicações já estão funcionando eles a deixam da maneira que está. Eis que muitas vezes surge a seguinte frase “ Ah, já esta funcionando, então está bom!”, e é ai que está o maior problema: achar que está bom. O Sistema Linux torna-se bastante seguro uma vez devidamente trabalhado. E é por isso que deve ser aperfeiçoado suas configurações padrões. Apesar de ser seguro quando devidamente configurado é possível torná-lo ainda mais seguro. Adotar técnicas de hardening é ter que pensar em três fatores: Segurança, risco e flexibilidade. É necessário saber dosar muito bem esses três fatores para levar o sistema a uma ótima produtividade e segurança. Sabe-se que não é possível ter 100% de segurança, mas, quanto mais segurança menos risco mas também pouca flexibilidade, ou seja é uma razão inversa proporcional. Por outro lado, se há grande flexibilidade no servidor, que permita qualquer tipo de programa nele, a segurança ficará baixa e os riscos vão aumentar (MELO, 2006). Tabela 5.2 para visualizar uma representação gráfica desses cenários. Segurança Risco 46 Flexibilidade ANAIS ELETRÔNICOS V ENUCOMP Não há uma regra direta para esses três fatores representados na Tabela 5.2, isso vai depender de cada situação, de acordo com o tipo de necessidade. Por isso toda implentação de um servidor deve ser bem definida antes de ser feita, nem que ela tenha que ser desenhada no papel e analisada por várias vezes. Embora as técnicas de hardening sejam de extrema importância, elas não se aplicam em todas as situações. Cada caso é um caso. É preciso analisar e descobrir o procedimento que será mais adequado para a necessidade em questão. Outro ponto importante é que ela é focada na camada de “userland”. Hardening é composto por 4 etapas bem definidas são elas: 1º Mapeamento das ameaças Ameaças é qualquer evento que possa gerar impacto negativo em nossos ativos. Ex: usúario insatisfeito, incêndio, falata de recurso. Pra uma ameaça poder se concretizar ela necessita de uma vulnerabilidade. Mesmo porque vulnerabilidade sozinha não faz nada. Quando se tem diversas vulnerabilidades e ameaças que possam comprometer nosso ambiente explrorando essa vulnerabilidade, temos um risco. Dessa forma, enttão ameaças são circunstância e incidentes que podem gerar impactos negativo explorando uma vulnerabilidade tornando um potencial risco. 2º Mitigação do Risco Visa reduzir/eliminar os riscos ao nível aceitável, mas qual é o nivelaceitavel ?aquele que meu ambiente pode trabalhar adequadamente de forma segura a zelar pelos 3 pilares da segurança da informação e que esteja proteigo contra ataques. Há 3 formas de lidar com os riscos: Evitar o risco: Medidas são tomadas para eliminar a ameaça de tal forma que a ameaça não leve a um incidente. Suportar / Aceitar o risco: Considera que certos riscos são aceitos. Isto pode acontecer quando o custo da medida de segurança execede o dano. Nesta estratégia a organização vai optar por medidas de segurança repressivas. Ex: se houver um incêndio na sala deve-se apagar o fogo com o extintor de incêndio. Neutralizar o risco – Tomar o risco neutro: Medidas são tomadas mesmo que as ameaças já não se manifestam mais, mas se por ventura venham a se concretizar, o resultado do dano é minimizado. Nesta estratégia a organização pode optar pela combinaçao de medidas preventivas, detectivas e repressivas. 3º Ações corretivas e preventivas Ações Corretivas e preventivas para os Riscos de TlAs ações corretivas e preventivas fazem parte do dia-a-dia dos técnicos e gerentes operacionais de TI. São inerentes às suas funções e atreladas aos riscos do negócio sob sua responsabilidade. É recomendável que as ações preventivas sejam mais utilizadas queascorretivas. As ações preventivas devem estar previamente orçadas, contratadas, acompanhadas e atuantes. Podem se restringir a uma ação puramente técnica controlada internamente ou pode requerer uma ação externa (fornecedores, terceiros etc). As ações Preventivas estão atuantes pré47 ANAIS ELETRÔNICOS V ENUCOMP ocorrência do Risco. Por outro lado as ações corretivas são ativadas pós-ocorrência do Risco. Podem ser o último estágio antes do acionamento de um Plano de Contingência. Ações corretivas em demasia podem ser o resultado de um planejamento ou operações inadequadas ou mesmo a falta deles. Ações corretivas, na maioria das vezes ocorrem de forma emergencial, sem planejamento e dependendo do procedimento e das ferramentas adotados podem ser mais nocivas para o ambiente de Tl do que benéficas. Podem ser evitadas caso haja ações Preventivas.Um exemplo clássico é a gestão de servidores: é requerido que este passe por manutenções preventivas de hardware periódicas (disco, memória, capacidade, performanceetc), assim como é requerido também que seu ambiente operacional (sistema operacional, software gerenciador de banco de dados etc) seja atualizado permanentemente de acordo com as orientações do fornecedor. Não havendo manutenções e atualizações preventivas Hardware e Software, riscos de indisponibilidade do ambiente são potencializados. As ações preventivas possibilitam uma gestão de menos risco. No caso citado, contratos de manutenção e suporte técnico junto a fornecedores e terceiros; treinamento técnico ao pessoal interno e outras ações impedem que haja exposição e perdas financeiras da empresa em função de indisponibilidade dos sistemas/serviços (IETEC-Instituto de Educação Tecnológica). 4º Estratégia de Segurança Antes de decidir implementar um sistema de segurança um firewall por exemplo é importante ter o conhecimento de algumas estratégias básicas empregadas na construção destes, visando uma maior segurança e confiabilidade no firewall são métodos que podem e devem ser analisados. Privilégio Mínimo: Garantir que o usuário só tenha acessoaos recursos que ele necessita ter acesso. Tomando o cuidado de não atribuir privilégios menores que o necessário, pois desta forma, tal objeto não conseguirá realizar suas tarefas. Este método é largamente utilizado, sendo importante para eliminar ou amenizar os danos causados por pessoas mal intencionadas. No contexto de Internet, existem vários exemplos: Todo usuário não precisa acessar todos os serviços de Internet existentes; Todo usuário não precisa modificar todos os arquivos em seu sistema; Todo usuário não precisa saber a senha de root (administrador) da máquina; Todo administrador de sistema não precisa conhecer as senhas de root de todos os sistemas; Todo sistema não precisa acessar todos os arquivos de todo outro sistema. Muitos dos problemas se segurança comuns na internet podem ser evitados com a utilização deste princípio. Por exemplo, o Sendmail é um alvo muito visado pelos atacantes, devido sua complexidade e o fato de que ele funciona acoplado ao root. O nível de complexidade deste daemon aumenta a ocorrência de bugs, isto implica que, programas privilegiados devem ser tão simples quanto possíveis. Caso um programa complexo exija privilégios acentuados, 48 ANAIS ELETRÔNICOS V ENUCOMP devemos procurar meios de separar e isolar as partes que necessitam destes privilégios das que não precisam (MELO, 2006). Segregação de função: Consiste na separação entre as funções de autorização, aprovação de operações, execução, controle e contabilização, de tal maneira que nenhum funcionário detenha poderes e atribuições em desacordo com este princípio de controle interno. A segregação de funções proíbe o usuário de, exercendo certa atividade, executar outra atividade ao mesmo tempo que implique em risco operacional para o negócio. A hierarquia organizacional reflete a estrutura dos papéis desempenhados pelos colaboradores dentro da organização. Várias normas e regulamentos governamentais, como Sarbanes-Oxley (SOX), COBIT, ISO/IEC 27002, recomendam a implementação de controles, como o Perfil por Função, como forma de seguir as políticas de acesso. Mas para que os controles funcionem de maneira adequada, é extremamente importante que as pessoas tenham treinamentos corretos nos sistemas de informação e conscientização nos temas de segurança da informação. Segurança por Obscuridade: É um princípio nada confiável, pois consiste unicamente em ocultar informações. Exemplos práticos deste método são: colocar uma máquina na Internet e achar que ninguém tentará invadi-la, simplesmente porque você não contou a ninguém sobre ela; abrir um servidor Apache em uma porta diferente para que ninguém o utilize, a não ser as pessoas que você informou sobre sua existência; configurar sua rede de forma que usuários internos vejam as informações de uma maneira e usuários externos (Internet) não consigam ver tais informações, como portas e serviços prestados em seus servidores. Observe alguns pontos sempre utilize esta técnica em conjunto de outras, pois manter a segurança apenas através da obscuridade é muito ruim; não anunciar algo não é o mesmo que ocultá-lo; utilizar um sistema de criptografia desconhecido, não garante segurança nenhuma (MELO, 2006); Segurança em Profundidadeou em camada: implementar o máximo de controles possíveis no ambiente pra proteger o ativo. Este princípio de segurança é destinado à prevenção dos acidentes, e a minimização das respectivasconsequências, evitando que um problema isolado se alastre pelo sistema; instituindo múltiplos, redundantes e independentes níveis de proteção. A idéia aqui é não depender de um únicométodo de defesa, instalando vários níveis de proteção. Tornando a tentativa de invasão arriscada demais ou cansativa demais para os atacantes. Isto porque as chances de violar um nível de proteção do sistema são muito maiores do que as chances de violar um sistema com vários níveis de segurança(MELO, 2006). 49 ANAIS ELETRÔNICOS V ENUCOMP 3.8. Segurança no Sistemas de Arquivos Sempre que o sistema Linux é instalado, as boas práticas de instalação aconselha particionar o disco e a colocar os principais diretórios em partição separadas, isso proporciona uma maior segurança, pois cada partição tem sua tabela separada. Caso o diretório /está em uma partição e o /home em outra, no caso de algum problema no sistema ou até uma reinstalação, não perderia as informações no diretório /home.Entretanto,segurança de um particionamento não é apenas isso. Todas essas partições são montadas no diretório, e um erro que muitos administradores de sistema Linux cometem é não ler a documentação para conhecer melhor os recursos e descobrir que o camandomountpossibilita a utilização de algumas opções muito interessante, que permitem melhorar muito a segurança nas partições. Caso todos os diretórios estivessem na mesma partição, no /, não seria possível ter essas opções e usufruir desses recursos. É possível retirar a permissão de Suid bit dos binários, mas só isso tambem não resolveria. Vamos cortar o mal pela raiz, com essas opções do mount, dizendo que na partição em questão os binários com permissão de Suid bit não terão efeito, entre outras configurações. Conformidade com as recomendações A segurança em sistemas de arquivos, a norma ABNT NBR ISO/IEC 27002:2005, recomenda, no item 10.4, que devemos proteger a integridade do software eda informação. Execução do procedimento A primeira opção do mounté o nosuid,que faz com que binários com permissão de Suid bit não surtam efeito na partição na qual está definido. Ex: prático, adicionar um usuário. # adduser teste Faça uma cópia das shells do seu sistema para o diretório home desses usuário e atribua as shells a permissão de Suid bit. # cp /bin/*sh /home/teste # chmod 4755 /home/teste/*sh* Logar em outro terminal com o usuário que foi criado e teste executar uma dessas shells. $ cd /home/teste $ ./sh $ id Na saida do comando id, podemos ver que esse usuário conseguiu permissão de root. 50 ANAIS ELETRÔNICOS V ENUCOMP OBS.: Recomenda-se, para fins de melhor conhecimento do sistema, que esse teste seja feito em todas as shells disponíveis. Para resolvermos isso, vamos remontar a partição onde está montada o /home, mas agora com a opção de nosuid. # mount -o remount,rw,nosuid /home # mount O camandomountsem parâmentros nos mostra quais as partições estão montadas e suas respectivas opções. Com a partição remontada com nosuid, faça o teste novamente e veja que as asshells continuam com o suid bit ativado. Entretanto, quando forem executadas, não vão mais possibilitar o acesso no nível de root. Outra opção que pode ser utilizado é o noexec, que impossibilita a execução de qualquer binário ou arquivo executável dentro da partição na qual essa opção está ativa. Essa opção pode ser aplicada a todos os diretórios, mas um clássico exemplo é aplicá-la aos diretórios /home e /tmp. Crackerspodem ser aproveitar do diretório /tmp, onde por padrão qualquer usuário pode introduzir backdoors ou qualquer outro programa malicioso para ter um acesso completo ao seu sistema. O mesmo exemplo realizado com o nosuid.Agora será remontar a partição com a opção noexece tentar executar umas shells que copiamos para o /home. # mount -o remount, rw,noexec /home # mount # ./sh Observe que não foi possível executar a shell. Na tentativa de executá-las, retornou a mensagem “permissão negada”; nessa partiçao, nada de execução. Uma última opção que podemos utilizar é o noatime. Ele não é especificamente uma opção para a questão de segurança, mas sim para a questão de performace, pois faz com que o kernel do linux execute uma rotina a menos quando o noatime esta definido e destinado à atuaização do tempo de acesso de arquivo. Primeiro é conhecer o comando stat, utilizado para verificar o status de um arquivo ou de um sistema de arquivos. # stat /etc/passwd A saida desse comando nos retorna informações importantes, mas vamos nos focar nas informações do Access(atime), do Modify (mtime)e do Change (ctime).Veremos suas diferenças. Será criado dois arquivos, um no diretório /root e outro no /tmp, assumindo que o /root e o /tmp estão em partiçoes diferentes. # touch /root/teste1 51 ANAIS ELETRÔNICOS V ENUCOMP # touch /tmp/teste2 Verificar o seu status, mas focando nas informações do Access,do Modifye do Change. # stat /root/teste1 # stat /tmp/teste2 Diante das primeiras informações, vamos fazer os testes e ver o que será mudado. Vamos visualizar o conteúdo dos arquivos, supondo que eles tenham algum conteúdo, e logo em seguida será verificado o status dos arquivos. # cat /root/teste1 # cat /tmp/teste2 # stat /root/teste1 # stat /tmp/teste2 Veja que os Accessdos arquivos estão diferentes. Quando nós visualizamos o conteúdo dos arquivos, fizemos um acesso a ele, logo o seu tempo de acesso (Access) foi modificado. Agora mais um teste nesses arquivos. Será modificado sua permissão e logo em seguida visualizar o seu status. # chmod 777 /root/teste1 # chmod 777 /tmp/teste2 # stat /root/teste1 # stat /tmp/teste2 Com atenção observer que o Access dos arquivos estão diferentes. Quando é visualizado o conteúdo dos arquivos, é feito um acesso a ele, logo o seu tempo de acesso (Access) foi modificado. Será feito um teste nesses arquivos. Modificar sua permissão e logo em seguida visualizar o seu status. # chmod 777 /root/teste1 # chmod 777 /tmp/teste2 # stat /root/teste1 # stat /tmp/teste2 Percebe-se que agora o Access não foi modificado, mas o Changefoi. Sempre que mudarmos a permissão de um arquivo, o Change será mudado, registrando a última data e hora da mudança. Agora será inserido um conteúdo nesses arquivos e logo em seguida verificar o que foi modificado. # echo abc> /root/teste1 52 ANAIS ELETRÔNICOS V ENUCOMP # echo abc> /tmp/teste2 # stat /root/teste1 # stat /tmp/teste2 Percebe-se que o Change foi alterado novamente, mas ele não foi alterado sozinho: o Modify também foi, pois agora não ocorreu só uma mudança de permissões, mas uma alteração no conteúdo do arquivo. Veremos a diferença entre o Access,o Modify e o Change,podemos fazer a alteração na partição e ver o que será melhorado. Agora é remontar a partição onde foi montado o diretório /tmp com a opção noatime. # mount –o remount,rw,noatime /tmp # mount Com a partição remontada com a opção noatime, vamos fazer o primeiro teste que foi realizado, o de listar o conteúdo do arquivo, e logo em seguida é verificado seu status dos arquivos. # cat /root/teste1 # cat /tmp/teste2 # stat /root/teste1 # stat /tmp/teste2 Observe que o Access(atime) do arquivo teste2 dentro do /tmp não foi modificado, justamente por causa da opção noatime que colocamos na remontagem da partição. Isso pode ser muito útil para os diretórios de logs, onde o acesso é feito constantemente pelo sistema, pois faz com que ookernel deixe de executar uma rotina, o que ajuda sua performance. DICA:Essas não são as únicas opções que o comando mount pode nos oferecer. Para ver todas as opções possíveis, consulte o man do comando mount. 53 ANAIS ELETRÔNICOS V ENUCOMP Tabela 5.3 : bom exemplo da maneira pela qual podemos aplicar essas opções aos nossos diretórios que estão montados em partições diferentes. 3.9. Programas Desnecessários Após a instalação de um sistema Linux, devemos nos preocupar se todos os programas que foram instalados nele são realmente necessários. Mesmo que tenha sido instalação mas básica possível a verificação de programas é sempre uma boa escolha. Lembre-se de que o servidor não deve conter programas “Clientes”. Conformidade com as recomendações No que diz respeito a programas instalados, a norma ABNT NBR ISO/IEC 27002:2005 recomenda no Item 11.5.4 que devemos remover todo utilitário ou software desnecessário do sistema após uma checagem. Execução de procedimento Primeiramente é possível fazer uma pesquisa por todos os pacotes instalados no sistema, justamente com suas versões. Em seguida, enviamos a uma lista para ser mais bem analisada. Debian: #dpkg /root/pacotes –l | awk ‘{print $2,$3}’ | sed ‘1,7d’ > Com esse commando, estaremos pesquisando todos os pacotes instalados. Com o dpkg é feito um filtro somente na segunda e na terceira coluna, que são os nomes dos programas e as versões. O sed removerá as sete primeiras linhas que são importantes para a nossa pesquisa e a direcionará isso para o arquivo de pacotes dentro do /root. A retirada dos programas desnecessários será de acordo com a situação com que se está trabalhando. Pode ser que, para um caso específico, seja necessário algum programa que, em outros casos, não seja obrigatório. É importante que isso seja minunciosamente analisado. Um exemplo é o programa wget, que é utilizado para fazer download sem a interação do usuário. Isso pode ser um grande risco para um servidor, já que um cracker pode aproveitar-se de problemas conhecidos do seu sistema e utilizar o wgetpara baixar programas maliciosos para seu 54 ANAIS ELETRÔNICOS V ENUCOMP servidor, tais como exploits, backdoors, entre outros. Isso impossibilitará que ele tenha um fácil acesso ao servidor ou que mesmo o danifique. Concluindo o exemplo, se o seu Linux tem o wget, podemos então removê-lo, # apt-getremove –purgewget Faça uma análise completa dos programas que estão instalados por padrão no seu Linux e verifique o que é realmente necessário. Lembre-se de cada caso é um caso. DICA: O sistema Operacional Windows também vem com um programa semelhante ao wget, o tftp. Caso esteja utilizando o Windows, também tome cuidado com esse programa, pois muitos Spywares se aproveitam dele. Podemos ver que, mesmo o sistema seja instalado no seu modo básico, ainda existe programas que podemos ser retirados, pois talvez sejam até brechas de segurança em seu sistema se forem bem explorados. 3.10.Arquivos com permissão Suid bit A permissão de Suid bit possibilita que um determinado binário que só pode ser executado, por exemplo, pelo usuário root seja executado por outro usuário comum do sistema. Muitos binários no sistemajá vêm com a permissão de Suid bit, pois alguns binários que somente o root pode executar precisam ser utilizados por um usuário. Exemplos clássicos desses comandos o su, o ping, o passwde muitos outros. Mas em uma coisa devemos pensar: será que todas esses binários que já estão com a permissão de suid bit vão ser utilizados por seus usuários? Será que eles precisam de todas esses comandos a disposição? Mas qual o problema de se ter um Suid bit ativado. O problema pode ser muito grande se um cracker souber aproveitá-lo, explorando vulnerabilidades conhecidos para conseguir uma shell do root. Podemos pensar no exemplo clássico das shells com permissão de suid bit que quando executada por um usuário, pode liberar uma shell de root. O administrador tem que atenta-se para essas coisas. Como o sistema possui muitos binários com suid bit, problemas como esses das shells podem passar despercebidos. Então o que podemos fazer? Retirar todas as permissões de Suid bit do sistema de depois vamos setar essas permissões somente para os binários que julgamos fundamentais para um usuário. Devemos pensar sempre que vão existir casos diferentes, então os binários que julgamos importantes para um servidor firewall por exemplo, podem não ser os mesmos para um servidor de e-mail. Conformidade com as recomendações Por recomendação da norma ABNT NBR ISO/IEC 27002:2005, no item 11.6.1, o acesso á informaçãoe as funções dos sistemas e de aplicações por usuário e pessoal de suporte deve ser restrito de acordo com o definido na política de controle de acesso. Execução do procedimento 55 ANAIS ELETRÔNICOS V ENUCOMP Para remover todas as permissões de suid bit dos binários, temos que fazer uma pesquisa no sistema e gerar uma lista com todos eles para uma melhor análise. Será criado um diretório chamado teste dentro do /root para fazermos os nossos testes e em seguidautilizaremos o comando findpara localizar com Suid bit. # cd /root # mkdirteste # find / -perm -4000 > /root/teste/lista.suid OBS.: O número 4000 representa a permissão de Suid bit, sendo que os três zeros são as permissões padrões do sistema ( 0 para usuário, 0 para grupo e 0 para outros), e o 4 representa a permissão a permissão Suid bit. Podemos ter também, no lugar do 4, o 2, que é Sgid bit, e o 1, que é Sticky bit, mas não vamos falar sobre eles aqui. Faça uma listagem detalhada em um desses binários para ver como a permissão de suid bit aparece. # ls - l /bin/su Vemos que nas permissões do usuário aparece um s no lugar do x. Isso representa que a permissão de Suid bit está ativada, mas a permissão de execução (x) continua-lá. Com a lista gerada, podemos ver qual desses binários precisa continuar com a permissão de suid bit. Vamos pegar um exemplo de um Bastion Host, que é o Firewall da sua rede. Podemos deixar dois binários com o Suid bit setado, que são o passwde o su. Podemos deixar o passwd para que o usuário possa mudar a sua senha de acesso caso ele seja um administrador e acesse essa máquina remotamente. Se estamos pensando em um firewall, mas não há motivos para um usuário comum acessa-lo. Já o suvai ser de vital importância, pois podemos fazer que tanto local ou remotamente o usuário root não tenha acesso direto. Assim, o administrador vai logar com seu usuário comum, que pode ter alguns privilégios a mais, e depois utilizar o supara se tornar o usuário root. Vamos retirar todas as permissões de Suid bit dos binários. # chmod -s -Rv / Onde: s - retira a permissão de Suid bit R - é recursivo, do /para baixo v - é o modo verbose (mostra o que está sendo feito pelo comando) # ls –l /bin/su Logo vamos setar a permissão de Suid bit somente para os dois binários que desejamos. 56 ANAIS ELETRÔNICOS V ENUCOMP # chmod +s /usr/bin/passwd # chmod +s /bin/su # ls –l /usr/bin/passwd # ls –l /bin/passwd Com esses comandos, as permissões de Suid bit foram setadas novamente para esses dois binários. Pode ser que, para o servidor que você esteja configurando só o passawd e o sunão seja suficiente, talvez outros binários precisem estar com o Suid bit ativado. Cabe analisar o que será necessário para cada tipo de serviço. Uma solução alternativa que podemos adotar é o comando sudo. Como ele podemos definir somente os comandos queremos para o usuário comum executar como se fosse root. Instalando o sudo. #apt-getinstallsudo Depois que o sudo estiver instalado, editaremos o arquivo /etc/sudores, que é onde definimos quais usuários podem ter acesso aos comandos a serem definidos. Alguns exemplos: # vi /etc/sudores Exemplo 1: teste ALL= /sbin/ifconfig, /sbin/iptables Neste primeiro exemplo, vamos permitir que o usuário teste, possa executar os comandos ifconfig e iptablescomo se fosseroot. Dessa maneira, entretanto, ele vai pedir a senha do usuário na primeira vez que fomos executar esses comandos. Podemos executá-los da seguinte maneira. # sudoifconfig # sudoiptables Exemplo 2:teste ALL=NOPASSWD: /bin/reboot , /bin/halt Estamos permitindo que o usuário teste, possa executar os comandos reboot e halt, mas dessa vez sem que seja necessário que ele digite a senha (NOPASSWD). Exemplo 3:teste ALL= /usr/bin/passwd [A-z]*, !/usr/bin/passwd root Este commando permite que o usuário teste mude a senha de qualquer usuário cujo login esteja no interlavo de A a Z, exceto o root. No sistema Linux já vem com a permissão de suid bit ativado em muitos binários para facilitar a utilização deles para outros usuários, mas vimos também que nem sempre essa facilidade é uma boa, pois pode gerar brechas de segurança. Fiquemos atentos para esses tipos de permissões. 57 ANAIS ELETRÔNICOS V ENUCOMP 3.11. Segurança no Terminal Quando falamos em segurança, a primeira coisa que vem à mente é um possível ataque remoto. Então, os nossos servidores que não estão conectados à internet não estão correndo nenhum perigo, certo? Errado, alias, dois fatos errados. Não estar conectado diretamente à internet não quer dizer que se está totalmente seguro, pois se um cracker conseguir passar pelo nosso firewall, ele vai conseguir chegar até os outros servidores que não tem acesso direto à internet, já que entrou em nossa rede interna. O outro fato é que um funcionário mal intencionado pode ter um acesso local (físico) ao nosso servidor, diretamente no teclado do próprio servidor. Se somos administradores desprevenidos, vamos resolver um problema fora da sala e sem perceber deixamos o terminal do servidor logado, com usuário de root. Então, esse funcionário mal intencionado poderá fazer o que quiser, já que ele finge ser um cara que não entende nada de informática, mas na verdade tem um conhecimento maior do que o nosso. Para esse tipo de situação, podemos aplicar alguns procedimentos. Conformidade com as recomendações No que diz repeito ao software instalado, a norma diz, nos itens 11.5.5 e 11.5.6, que devemos ter controle sobre os acessos no sistema a fim de evitar acessos não-autorizados e de não fornecer informações desnecessárias. Execução do procedimento 1. Desabilitar o uso de CTRL+ALT+DEL Desabilitar o Ctrl+Alt+Del no sistema Linux pode ser uma boa idéia, pois não permitirá que alguém pressione uma sequencia de teclas e faça com que o servidor reinicie. Isso é bom principalmente quando seu servidor Linux está no mesmo armário que um servidor com o sistema Windows, assim se evita que em algum momento você pressione Ctrl+Alt+Del no teclado do Linux pensando que é o do Windows. Edite o arquivo /etc/inittab e comente a linha a seguir: #ca:12345:ctrlaltdel:/sbin/shutdown –t1 –a –r now Você pode também mapear as teclas para executar um outro comando qualquer, por exemplo. #ca:12345:ctrlaltdel:/bin/echo desabilitado por segurança” “Esse recurso foi Depois das alterações, precisamos atualizar o arquivo /etc/inittab. Isso é feito com o comando seguinte: # init q 2. Limitar o uso dos terminais texto Dependendo da situação em um servidor, por questões de segurança não é muito interessante deixarmos o login habilitado em todos os terminais texto. Por exemplo, para impedir o login nos terminais 4,5 e 6 devemos editar o arquivo /etc/inittab e comentar as seguintes linhas: 58 ANAIS ELETRÔNICOS V ENUCOMP # vi /etc/inittab # 4:23:respawn:/sbin/getty 38400 tty4 # 5:23:respawn:/sbin/getty 38400 tty5 # 6:23:respawn:/sbin/getty 38400 tty6 Depois das alterações, precisamos realizar novamente o arquivo /etc/inittab # init q 3. Bloquear o terminal com a variável TMOUT No sistema Linux, temos uma variável que não vem setada por padrão. Essa variável é a TMOUTque controla em quando tempo o terminal será deslogado. Primeiro, podemos setá-la manualmente com um tempo pequeno para testarmos. # TMOUT=15 Estamos setando o valor da variável para 15 segundos. Logo, se o terminal não for utilizado durante os 15 segundos, ele será deslogado e o usuário será obrigado a logar-se novamente. Para melhorar, podemos colocar essa variável dentro do arquivo global da variável, para que ela fixe toda vez que o sistema for iniciado. # vi /etc/profile If [ “ ’id –u’ “ -eq 0 ]; then PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/b in:/usr/bin/X11” else PATH=”/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games” fi if [ “$PS1” ]; then if [ “$BASH” ]; then PS1=’ \u@ \h: \w \$ ‘ else if [ “ ‘id –u’ “ –eq 0 ]; then PS1=’# ‘ else PS1=’$ ‘ fi fi fi 59 ANAIS ELETRÔNICOS V ENUCOMP TMOUT=180 Export PATH TMOUTumask 022 Dessa maneira, o sistema voltará para a tela de login se nenhum commando for executado num intervala de 180 segundo (3 minutos). 4. Bloquear o terminal com o programa Vlock Com a variável TMOUT, fizemos com que o terminal seja deslogado automaticamente depois de um determinado tempo. Podemos fazer isso também manualmente com um programa chamado Vlock, que pode travar todos os terminais no momento em que quisermos.Instalação do programa: # apt-getinstallvlock Para travar todos os terminais, digite: # vlock –a O Vlockexecutado com o parâmetro –a bloqueia o uso de todos os terminais. Os terminais só serão liberados mediante autenticação com senha do usuário que os travou. Pequenos detalhes em configurações, uma variável e um simples programa podem nos ajudar a manter nosso servidor seguro, com todos os nossos terminais protegidos. 3.12. Gerenciamento de Privilégios O usuário root é o usuário mais conhecido em sistemas *nix (o termo *nix aborda os sistemas baseados em Unix). Quando algum cracker ou funcionário mal intencionado tentar um acesso ao nosso sistema, seu foco vai ser conseguir senha do usuário root. Se ele tiver sorte e consegui-la, terá acesso ao nosso sistema. Como evitar isso? Vamos adotar alguns procedimentos para evitar que o usuário root tenha acesso direto ao sistema. Nós seremos obrigados a utilizar nossos usuários comuns para logar e depois utilizaremos o sudo ou su para virarmos root. Conformidade com as recomendações A norma ABNT NBR ISO/IEC 27002:2005, no item11.2.2, estabelece que concessão e o uso de privilégio devem ser restritos e controlados. Execução do procedimento 1. Bloquear o login do root nos terminais texto Não é seguro deixarmos o login como root habilitado para os terminais texto. O ideal é bloquear o login do root em todos os terminais texto, logar como usuário comum e, quando for necessário a realização de alguma tarefa administrativa, viramos usuário root usando o comando su. Criando o usuário comum #adduserlix 60 ANAIS ELETRÔNICOS V ENUCOMP Uma das maneiras pelas quais podemos bloquear o login do root é editar o arquivo /etc/securetty e comentar as linhas referentes aos terminais que queremos desabilitar para o root. Vamos comentar as seguintes linhas: # vi /etc/securetty # tty1 # tty2 # tty3 # tty4 # tty5 # tty6 # tty7 # tty8 # tty9 # tty10 # tty12 Agora que as linhas dos terminais estão comentadas, podemos tentar nos logar em outro terminal com o usuário root. Veremos que não teremos sucesso. Como dissemos, essa é uma das maneiras pelas quais se pode bloquear o acesso do root pelos terminais. 2. Determinar datas de expiração para contas de usuários Se o nosso servidor for alocar uma grande quantidade de usuários, podemos especificar datas de expiração para as contas dos usuários. Dessa maneira, se aquele usuário utiliza a sua conta todos os dias, quando sua senha expirar ele poderá modifica-la e renovar a conta. Mas, se por algum motivo uma conta de um usuário não está sendo utilizada, ela será desativada no tempo especificado, dando-nos uma segurança de que essa conta não será usada com más intenções. Utilizaremos o comando chage, que modifica os parâmetros do arquivo /etc/shadown, onde são feitos esses controles. Primeiro vamos visualizar a configuração padrão de uma conta de um usuário, por exemplo, o usuário teste. # chage –l teste E agora faremos algumas modificações para esse usuário. # chage –M 30 –W 5 –I 2 teste # chage –l teste Onde: -M é o tempo máximo da validade da conta. 61 ANAIS ELETRÔNICOS V ENUCOMP -Wé o tempo de aviso. -Ié o tempo antes de uma conta ser desativada. Com essa configuração, estamos dizendo que a conta do usuário é válida por 30 dias. Quando estiverem faltando 5 dias para a conta expirar, o usuário começará a ser avisado quando for logar. Depois desses 30 dias, o usuário terá 2 dias para poder modificar a senha e para que a conta seja renovada. Enquanto ele não fizer isso, não conseguirá logar no sistema. Se nesses 2 dias o usuário não modificar a senha, a conta será desativada e somente o usuário root poderá realtivá-la. 3. Remover shells válidas de usuários que não precisam delas. Usuários que não utilizam shell não têm necessidade de tê-la. Vamos remover as shells válidas de todos os usuários que não vãoexecutar oficialmente login no sistema através do terminal local (tty) ou via ssh. Combinado a isso, criaremos um usuário estratégico pertencente ao grupo de administradores, que também criaremos. Os usuários pertencentes a esse grupo terão permissão para realizar o logine posteriormente usar o su para se tornar root. Primeiro vamos criar o grupo administradores. Logo em seguida, criaremos um usuário administrador e o adicionaremos ao grupo. # groupadd administradores # addusertoor # gpasswd –atoor administradores Vamos visualizar o arquivo /etc/passwd. Veja que todos os usuários de sistema também possuem shells válidas. # cat /etc/passwd | less Criaremos um script para remover todas as shells válidas dos usuários, menos daqueles que nós especificamos. # cd /root # vi inválidos.sh # ! /bin/bash For USER in $(cat /etc/passwd | cut –f l –d “:” | grep –v root | grep –v toor | grep –v lix) do usermod –s /bin/false $USER done # ./inválidos.sh Esse script, ele executa um for que pegará somente a primeira coluna do arquivo /etc/passwd, que são os nomes dos usuários que não estão especificados no grep–v. Isso é armazenado dentro da variável USER. Logo depois, com o comando usermod, esse script passa todas as shells dos usuários que estão na variável USER para /bin/false, ou seja, uma shell inválida. 62 ANAIS ELETRÔNICOS V ENUCOMP Depois da execução do script, visualize novamente o arquivo /etc/passwd e veja como ele ficou. # cat /etc/passwd | less Repare que todas shells dos usuários passaram a ser /bin/false, menos as dos usuários root, toor e lix. Podemos adotar a política de que, sempre que criarmos um usuário novo, ele seja criado com uma shell inválida. Caso ele precise de uma shell válida depois, podemos mudar isso no arquivo /etc/passwd. Para fazer isso, podemos editar os seguintes arquivos. # vi /etc/adduser.conf Nesse arquivo podemos mudar a variável DSHELL para uma shell inválida. DSHELL=/bin/false Dessa maneira nossos usuários seriam criados por padrão com a shell/bin/false, uma shell inválida. Finalizando essa parte de shells, podemos visualizar o arquivo /etc/shells. Ele é um arquivo texto que contém os nomes de caminho completos das shells de login válidos. Esse arquivo é consultado pelo comando chsh (utilizado para mudar a shell de um usuário) e fica disponível para consulta por outros programas. # cat /etc/shells É preciso ficar atento, porque há programas que consultam esse arquivo para descobrir se um usuário é um usuário normal. Por exemplo, daemos (processos que são executados em background) de ftptradicionalmente desaprovam acessos aos usuários com interpretadores de comando não incluídos nesse arquivo. 3.20.Conclusão O ambiente computacional e todas as suas tecnologias, com as mais modernas arquiteturas, plataformas e inúmeras formas de garantir mais segurança da informação ainda não é, e provavelmente não será, suficiente para conter o ímpeto curioso, criativo e astuto do cérebro humano. A engenharia social, combinada com a fragilidade humana, contribui para um dos pontos mais vulneráveis que estão presentes em todas as organizações e que sempre existirão, pois não há uma receita milagrosa de como transformar um ambiente que manipulam informações em um local totalmente seguro. Uma medida para dificultar o roubo ou o acesso indevido a essas informações são as condutas, os treinamentos, os hábitos e o conhecimento de técnicas deHardening em servidores, além da responsabilidade que se deve ter ao manipular, transmitir e descartar informações, sejam elas confidenciais ou não. Se a informação não for considerada uma fonte preciosa será preocupante o agravamento da falta de instruções e conscientizações por parte dos funcionários e se tornará cada vez mais difícil a implementação da segurança da informação, pois o desafio de manter as informações confidenciais está cada vez menor e está cada vez mais fácil de encontrá-las e utilizá-las. 63 ANAIS ELETRÔNICOS V ENUCOMP É importante ter em mente que a tarefa de se possuir profissionais capacitados e aptos a trabalharem com segurança é realmente difícil, porém é um investimento que não deve ser encarado como uma despesa a ser adicionada ao orçamento. Deve ser realizado de forma constante, pois seu retorno será em longo prazo e de acordo com as mudanças culturais da organização. Mesmo o tema sendo discutido nas empresas, ainda assim percebe-se certo grau de desconhecimento em segurança da informação por partes dos gestores e administradores de TI, que ainda têm a mentalidade de que “as coisas só acontecem aos outros...” de modo que isso reflete no ambiente corporativo. A verdade é que se tem um longo caminho para ser alcançado e diante dos resultados pode-se perceber que as empresas já estão mais preocupadas em relação as suas informações geradas ao longo do dia, que devem ser tratadas e gerenciadas para que não ocorram situações como a imagem da empresa atrelada em fraudes ou vitimas de cibe criminosos. Referências AMARAL, Bruno do. Segurança proativa. Disponível em <http://www.decisionreport.com.br/publique/cgi/cgilua.exe/sys/start.htm?infoid=9819&sid=4 2> Acesso em: 12 de Outubro de 2012. ARAUJO, Eduardo Edson de. A vulnerabilidade humana na segurança da informação. 2005. Disponível em <http://svn2.assembla.com/svn/GSIDEI/ Bibliografia/Monografia%20Interven%C3%A7%C3%A3o%20humana%20Seguran%C3%A7 a.pdf>. Acesso em: 01 de Outubro de 2012. ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. ABNT NBR ISO/IEC 27001:2006. Rio de Janeiro, 2006. ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. ABNT NBR ISO/IEC 27002:2005. 2.ed. Rio de Janeiro, 2005. BR-LINUX.ORG. Pane na telefônica: funcionários suspeitam de sabotagem. Disponível em: <http://br-linux.org/2008/pane-na-telefonica-funcionarios-suspeitam-de-sabotagem/> Acesso em: 15 de outubro de 2012. CERT.BR. Incidentes reportados ao CERT.br janeiro a março de 2011. Disponível em: <http://www.cert.br/stats/incidentes/2011-jan-mar/total.html> Acesso em: 01 de Outubro de 2012. COMPUTERWORLD. Falhas de segurança em redes sociais geram risco para o negócio. Março 2010. Disponível em: <http://computerworld.uol.com.br/gestao/2010/03/04/falhas-de seguranca-em-redes-sociais-geram-risco-para-o-negocio/> Acesso em: 10 de Outubro de 2012. CORREIA, Marco. Engenharia social no Governo do Rio de Janeiro percebeu?. Disponível em: <http://marcoacorreia.wordpress.com B/2011/04/03/engenharia-social-no-governo-do-rio-dejaneiro-percebeu/>Acesso em: 18 de Outubro de 2012. CORREIA, Marco. Segurança da informação é novidade nas empresas. Disponível em: <http://marcoacorreia.wordpress.com/ 2011/10/12/seguranca-da-informacao-e-novidade-nasempresas/>Acesso em: 14 de Outubro de 2012. 64 ANAIS ELETRÔNICOS V ENUCOMP CORREIO 24 HORAS. Luciano Huck tem senha do Twitter roubada e brinca com a situação. Disponível em: <http://correio24horas.globo.com/noticias/noticia.asp?codigo=57227&mdl=49>. Acesso em: 15 de Outubro de 2012. DAWEL, George. A segurança da informação nas empresas. Rio de Janeiro: Editora Ciência Moderna Ltda., 2005. DECISION REPORT. A evolução das atividades maliciosas.Disponível em <http://www.decisionreport.com.br/publique/cgi/cgilua.exe/sys/start.htm?from_info_index=1 53&infoid=8903&sid=4> Acesso em: 27 de Outubro 2012. ESTADÃO. Hackers espalham vírus com oferta de vacina antigripe H1N1. Disponível em: <http://www.estadao.com.br/noticias/geral,hackers-espalham-virus-com-oferta-de-vacinaantigripe-h1n1,475155,0.htm> Acesso em: 15 de Outubro de 2012. FONTES, Edison Luiz Gonçalves. Segurança da informação:o usuário faz a diferença. São Paulo : Saraiva, 2006. FONTES, Edison Luiz Gonçalves. Vivendo a segurança da informação:orientações práticas para as organizações. São Paulo :Sicurezza Brasiliano & Associados, 2000. GUELMAN, Luiz. Conscientização de usuários: como envolver seu público com a Segurança da Informação. 2006. Disponível em: <http://www.modulo.com.br/comunidade/entrevistas/616conscientizacao-de-usuarios-como-envolver-seu-publico-com-a-seguranca-da-informacao>. Acesso em: 30 de Outubro de 2012. MITNICK, Kevin D. A arte de enganar. São Paulo : Pearson Education do Brasil Ltda, 2003. MITNICK, Kevin D.; SIMON, Willian L. A arte de invadir. São Paulo: Pearson Education do Brasil Ltda 2006. MÓDULO SECURITY SOLUTIONS.10ª Pesquisa Nacional de Segurança da Informação.2006, Disponível em <http://www.modulo.com.br/media/10a_pesquisa_nacional.pdf> Acesso em: 24 de Outubro de 2012. MOREIRA, Nilton Stringasci. Segurança mínima: uma visão corporativa da segurança de informações. Rio de Janeiro: Axcel Books, 2001. REUTERS. Hackers espalham vírus com oferta de vacina antigripe H1N1. 2009, Disponível em <http://br.reuters.com/article/internetNews/idBRSPE5B00SZ20091201?sp=true> Acesso em: 24 Outubro 2012. MELO, Sandro. BS7799 Linux da Tática à Prática em Servidores. São Paulo: Alta Books, 2006 SEMOLA, Marcos. Gestão da Segurança da Informação: uma visão executiva. Rio de Janeiro: Campus, 2002. SLADE, Robert. Exclusivo: entrevista com Rob Slade– especialista em vírus de computadores. Jun 2006. Disponível em: <http://www.modulo.com.br/site?from%5Finfo%5Findex=8&infoid=791&lng=br&sid=91> Acesso em: 24 de Outubro de 2012. SYMANTEC.InternetSecurity Threat Report, volume 16.2010, Disponível <http://www.symantec.com/threatreport/#> Acesso em: 24 de Outubro de 2012. 65 em: ANAIS ELETRÔNICOS V ENUCOMP TECHOJE. Planos de Contingência em TI. <http://www.ietec.com.br/site/techoje/categoria/detalhe_artigo/219> novembro de 2012. Disponível em Acesso em: 01 de TERRA TECNOLOGIA. Erro de programação inofensivo vira ameaça à segurança. Disponível em: <http://tecnologia.terra.com.br/ interna/0,,OI1790208-EI4805,00.html> Acesso em: 15 de Outubro de 2012. TI EXAMES. Curso preparatório para o exame ISO/IEC 27002 FOUDATION, 2011. XAVIER, Herberth. Furto na Petrobrás traz à tona espionagem industrial. 2008. Disponível em: <http://www.abin.gov.br/modules/articles/article.php?id=2008> Acesso em: 15 de Outubro de 2012. WIKIPEDIA, Hardening, Disponível em: <http://pt.wikipedia.org/wiki/Hardening> Acesso em : 30 de Outubro de 2012. 66 ANAIS ELETRÔNICOS V ENUCOMP Desenvolvimento Web com Framework Primefaces Jailson Nunes Leocadio, Roniere da Silva Sousa e Evaldo Sávio Silva Araújo da Costa Abstract This chapter describes the contents discussed in short course about Web Applications Development using the framework Primefaces. To this, it is presented a theoretical context of the technologies used for the construction of systems in order to situate and connect the roles in development. Understanding the characteristics of JavaServer Faces provides a deeper understanding of how Primefaces components work and how is their communication with each other and with the application logic. It is presented the set of elements of the JSF libraries, HTML and Primefaces. Resumo Este capítulo descreve os conteúdos discutidos em minicurso sobre o Desenvolvimento de Aplicações Web com utilização do framework Primefaces. Para isso, é feito a contextualização teórica das tecnologias empregadas para a construção dos sistemas, no sentido de situar e relacionar o papel de cada uma no desenvolvimento. Compreender as características do JavaServer Faces possibilita entender mais profundamente como funcionam os componentes do Primefaces e como se dá a comunicação deles entre si e com a lógica da aplicação. Apresentase o conjunto de elementos das bibliotecas JSF, HTML e do Primefaces. 4.1. Aplicações web As aplicações web surgiram e agregaram benefícios sobre os modelos de sistemas até então existentes. Isso ocorreu devido ao estabelecimento da rede mundial de computadores e do grande fluxo de informações que constantemente flui dentro das organizações, e entre as instituições e as pessoas. Esse tipo de aplicação, geralmente, implementa características de dinamismo, rapidez, disponibilidade, atualização e portabilidade, que são propriedades necessárias para sobreviver frente ao mercado e ao modelo social atual. Por isso, as experiências na utilização de tecnologias de desenvolvimento, levam à criação de modelos e padrões que agregam as melhores práticas e tecnologias que proporcionam a concepção de produtos que atendam a todas essas demandas de forma simples e segura. 4.2. O Primefaces como uma extensão do JavaServer Faces O framework open-source Primefaces corresponde a uma biblioteca de componentes UI (User Interface) que extende os componentes nativos do JavaServer Faces (JSF). Sendo assim, compreender as características e o modo de funcionamento de uma aplicação desenvolvida em JSF corresponde em conhecer também a dinâmica do Primefaces. Nos tópicos a seguir, será visto importantes tecnologias 67 ANAIS ELETRÔNICOS V ENUCOMP que tornam possível o desenvolvimento de aplicações web com Java, e como elas trabalham em conjunto com o framework de visão aqui em estudo. 4.2.1. JavaServer Faces Mantido pelo comitê JCP (Java Community Process) com o Java Specification Request (JSR – 314), o JavaServer Faces é uma tecnologia que se apresenta no formato de um framework, utiliza o padrão de arquitetura MVC para o desenvolvimento de aplicações web em Java e emprega um modelo de interfaces gráficas baseado em eventos. Divulgado inicialmente em 2004, atualmente está em sua versão 2. Ele possui dois grupos de componentes: a primeira são as Java APIs que modelam e definem os componentes UI; a segunda são as taglibs JSP que realiza a representação dos componentes em uma página JSP e também a conexão dos objetos no backend da aplicação. A API é ainda responsável pela manipulação dos componentes e seu ciclo de vida (estados), handle-event, validação server-side, conversão de dados, acessibilidade, além do suporte a internacionalização. De acordo com diversos autores [Marafon 2006], [Rossi 2012], utilizar o padrão JSF proporciona diversos ganhos no desenvolvimento de aplicações web, dentre esses benefícios, cita-se: reusabilidade de componentes nas páginas, possibilidade de extensão pela utilização de bibliotecas de terceiros, a existência de IDEs e plugins adaptados para o desenvolvimento de sistemas que utilizam o framework; facilidade de construção de novos componentes, entre outros. A primeira proposta de especificação para o JSF propõe oito principais metas: Criar um framework de componentes GUI (Graphical User Interface) padrão que pode ser aproveitado para a criação de ferramentas de desenvolvimento, que permitam criar interfaces gráficas de alta qualidade e gerenciar as conexões entre os componentes e o comportamento da aplicação; Definir um conjunto de classes base simples para os componentes GUI, estados dos componentes, e eventos de entrada. Estas classes controlarão o ciclo de vida dos componentes e a persistência de dados referentes a eles; Fornecer um conjunto de componentes comuns, incluindo elementos padrão HTML de entradas de formulário. Eles serão derivados do conjunto das classes bases (item 1) e poderão ser usados para definir novos componentes; Fornecer um modelo JavaBeans para emitir os eventos acionados no lado do cliente para a aplicação no lado do servidor, onde ocorre o controle do comportamento da aplicação; Definir API's para validação de dados de entrada, incluindo suporte para a validação no lado do cliente; Especificar um modelo de internacionalização e localização dos componentes. Gerar automaticamente saídas apropriadas para o cliente, de acordo com os dados disponíveis de configuração, como versão do navegador e etc.; 68 ANAIS ELETRÔNICOS V ENUCOMP Gerar automaticamente saídas que contenham suporte de acessibilidade, como definido pela WAI (Web Accessibility Iniciative). 4.2.2. Padrão de Arquitetura MVC O padrão de arquitetura MVC (Model, View e Controller) permite a separação entre a lógica de negócio e as interfaces de visualização, pela divisão do sistema em três partes com responsabilidades distintas. Essas são denominadas de modelo, visão e controle. O modelo é responsável por representar os dados, manter o estado da aplicação pela definição dos dados armazenados e fornecer o acesso às informações quando necessário. A visualização é responsável por exibir as informações vindas do modelo e por captar e enviar aos controles, as ações dos usuários sobre os dados apresentados. O controle faz a ligação entre a visão e os modelos, acionando um ou outro, de acordo com as requisições recebidas. Essa interação produz modificações no estado do sistema que então provoca respostas diferenciadas ao cliente. Ao dividir em grupos as diversas tarefas de um sistema, o padrão MVC faz com que a aplicação passe a ter uma arquitetura onde a interface pode ser modificada sem preocupações com alterações na camada de lógica do negócio [Engholm Júnior 2010]. A Figura 4.1 [Algaworks 2010], logo abaixo, mostra a interação entre os componentes do MVC, nela é possível perceber como os componentes interagem para montar a dinâmica de funcionamento das aplicações que implementam esse padrão. Figura 4.1 Arquitetura do JavaServer Faces baseada no MVC Em JSF, a camada de controle é composta por alguns elementos distintos. O servlet chamado de FacesServlet é quem recepciona e redireciona as requisições vindas da web e é ele também que envia a resposta que será exibida pela visão; os arquivos de configuração mapeiam as ações realizadas e definem as regras de navegação; e os manipuladores de ações e observadores de eventos são quem recebem os dados vindos das interfaces, realizam o acesso ao modelo quando necessário e retornam o resultado para o FacesServlet. Já as views são providas pelos componentes de interface do JSF, que incluem componentes de layout desde os mais simples, até outros mais complexos. Os componentes UI possuem propriedades, 69 ANAIS ELETRÔNICOS V ENUCOMP métodos e eventos acessíveis pelo desenvolvedor, que possibilita identificar a interação do usuário com estes componentes de interface. 4.2.3. Características de uma Aplicação Java com JSF As aplicações Java para a web quando construída de acordo com a especificação J2EE, possui um conjunto de padrões e modelos característicos bem definidos. Na figura 4.2 [Algaworks 2010], é possível ver a forma como o JSF está relacionado com outras tecnologias na construção das aplicações dentro desse padrão. Figura 4.2 Arquitetura de Aplicações Java para a Web O Java Servlet é a base para as aplicações Java e são responsáveis pela recepção de requisições do cliente e envio de respostas, geralmente por meio do protocolo HTTP. Já o JavaServer Pages (JSP) pode ser compreendido como uma abstração do Java Servlet e torna possível a utilização de código Java nesses sistemas web. As páginas JSP são executadas nas views e utilizam Java do lado do servidor para a criação de conteúdo dinâmico junto com as tags HTML. O JSP não oferece nada que não possa ser criado com servlets puros, porém ele oferece a vantagem de ser facilmente codificado, facilitando assim a elaboração e manutenção de uma aplicação web [Ferreirra e Martins 2009]. Nessa estrutura, existe o ciclo de vida formal do JSF, como pode ser visualidade na Figura 4.3, [Jacobi e Fallows 2007]. Quando ocorre uma requisição, enviada pelo navegador, o Faces Servlet recepciona essa requisição e dá inicio à execução dos seis passos mostrado na imagem: Restore View (Restaurar a view), Apply Request Values (aplicar os valores do request), Process Validations (processar as validações), Update Model Values (atualizar os valores do modelo), Invoke Application (invocar a aplicação) e Render Response (renderizar a resposta). 70 ANAIS ELETRÔNICOS V ENUCOMP Figura 4.3 Ciclo de vida formal do JSF 4.2.4. Componentes Visuais A especificação do JSF fornece um conjunto de componentes básicos, incluídos em duas bibliotecas, a “HTML”, que possui componentes que representam diversos elementos HTML e a biblioteca “Core”, que é responsável por tarefas comuns no desenvolvimento de sistemas, como internacionalização, validação e conversão de dados [Algaworks 2010]. A Tabelas1 4.1 e 4.2 mostram as tags disponibilizadas pela biblioteca nativa do JSF e HTML, respectivamente, além de uma descrição das mesmas. Tabela 4.1 Tags nativas na biblioteca JSF. Tag Descrição f:actionListener Registra uma instância de javax.faces.event.ActionListener junto a um componente f:ajax Fornece recurso Ajax de forma padrão f:attribute Define o valor de um atributo no componente f:convertDateTime Converte datas e possui um conjunto de opções f:convertNumber Registra uma instância de NumberConverter f:converter Registra uma instância de Converter f:event Define o tipo de evento, por exemplo, para chamada de funções Ajax f:facet Adiciona um facet a um componente f:loadBundle Carrega um pacote de recursos de acordo com o local vigente f:metadata Engloba as tags f:viewParam f:param Configura um parâmetro para o componente associado 1 http://www.jsftoolbox.com/documentation/help/12-TagReference/ 71 ANAIS ELETRÔNICOS V ENUCOMP f:phaseListener Adiciona um ouvidor de fases a um componente f:selectItem Adiciona um componente filho UISelect para o componente associado f:selectItems Adiciona um componente filho UISelectItems para o componente associado f:setPropertyActionListener Registrar uma instância de ActionListener no componente relacionado f:subview Cria um componente container que terá todo o core JSF e as tags aninhadas via “jsp:include” ou outra tag dinâmica f:validateBean Utilizado para validações de acordo com as definições do Bean f:validateDoubleRange Registra uma instância de DoubleRangeValidator no componente associado f:validateLength Registra uma instância de a LengthValidator no componente associado f:validateLongRange Registra uma instância de LongRangeValidator no componente associado f:validateRegex Valida expressões regulares f:validateRequired Define componente como requerido f:validator Registra uma instância de Validator instance no componente associado f:valueChangeListener Registra uma instância de ValueChangeListener no componente associado f:verbatim Cria um componente output como um filho do componente associado f:view A tag View tag é o container para todo componente JavaServer Faces usado na página f:viewParam Uso para URL Tabela 4.2 Tags nativas na biblioteca JSF HTML. Tag Descrição h:body Renderiza um element Body do HTML h:button Renderiza um Button h:column Renderiza uma coluna dentro de um componente data table h:commandButton Renderiza um button que pode está associado a um backing bean ou a uma classe ActionListener h:commandLink Renderiza um link HTML h:dataTable Cria uma data table h:form Renderiza um elemento tipo form 72 ANAIS ELETRÔNICOS V ENUCOMP h:graphicImage Renderiza uma tag de imagem em HTML h:head Renderiza um elemento head h:inputHidden Renderiza um elemento input do tipo "hidden". h:inputSecret Cria um elemento input do tipo "password". h:inputText Cria um elemento input do tipo "text". h:inputTextarea Cria um elemento input do tipo "textarea" h:link Configura links h:message Renderiza mensagens específicas para um determinado componente h:messages Renderiza todas as mensagens para a view atual h:outputFormat Cria um elemento para exibição de texto h:outputLabel Renderiza um elemento "label" h:outputLink Renderiza um elemento link HTML que possua o atributo "href" h:outputScript Renderiza a tag HTML <script/>, que trás um JavaScript existente na biblioteca JSF 2.0 h:outputStylesheet Definite arquivos de layout CSS h:outputText Tag básica para textos h:panelGrid Renderiza um panelGrid compatível com a tabela do HTML4 h:panelGroup Container de componentes h:selectBooleanCheckbox Cria um elemento input do tipo "checkbox". h:selectManyCheckbox Cria uma lista de checkboxes. h:selectManyListbox Cria um “select” list h:selectManyMenu Cria um elemento "select” com múltiplos atributos h:selectOneListbox Renderiza um elemento HTML "select" de qualquer tamanho sem atributo "multiple" h:selectOneMenu Cria um elemento do tipo Select One Menu h:selectOneRadio Cria um elemento do tipo Select One Radio 4.3. Persistência com JPA 73 ANAIS ELETRÔNICOS V ENUCOMP A JPA (Java Persistence API) é uma especificação que padroniza as ferramentas ORM (Object Relational Mapper) para os sistemas desenvolvidos em Java. As ferramentas ORM fazem o mapeamento e transição automática de dados entre os paradigmas relacional e orientado a objetos (OO). Isso é necessário, tendo em vista que as aplicações Java são construídas seguindo as regras de OO e os SGDB’s geralmente são organizados de acordo com o modelo relacional. Dentre as implementações de JPA, destaca-se o Hibernate que é o mais utilizado para esse propósito; mas existem outras implementações como o EclipseLink e OpenJPA. As ferramentas que seguem as regras da JPA caracterizam-se por serem independentes de linguagem SQL, resultando num baixo acoplamento entre aplicação e os Sistemas Gerenciadores de Banco de Dados (SGDB). 4.4. Manipulação de Dados com JPQL A Java Persistence Query Language (JPQL) é uma linguagem de consulta ORM que permite a realização de consultas sobre classes e objetos. A linguagem suporta consultas de campos individuais de uma entidade e operações como update e delete, subqueries, join, group by, e having. A linguagem é uma extensão da EJB Query Language (EJB QL), e inclui outras funcionalidades não presentes nesta linguagem que a antecede. Todas as operações em JPQL podem ser realizadas no modo de consultas dinâmicas ou estáticas. 4.5. Facelets Até a versão 1.2 do JSF, existem algumas deficiências que dificultam a vida do programador de páginas, como a falta de um mecanismo para criação de templates de telas integrado ao JSF e também para criação de novos componentes visuais a partir da composição de outros componentes já existentes [Algaworks 2010], a partir disso, foi desenvolvido um framework denominado Facelets para facilitar o gerenciamento das telas criadas. Na versão 2 do JSF, o Facelets é o engine padrão que gerencia as interfaces. Ao se utilizar Facelets, as páginas deverão ser construídas usando XHTML (eXtensible HyperText Markup Language), e não mais JSP, pois o framework possui um compilador XHTML responsável pelo gerenciamentos e reaproveitamento dos templates criados. A tag do Facelets possui as bibliotecas a seguir: component, composition, debug, decorate, define, fragment, include, insert, param, remove e repeat. 4.6. Primefaces O Primefaces, em sua versão atual 3.4, é um framework composto por mais de 100 componentes para o JSF, com suporte nativo a Ajax e HTML5. Possui boa documentação e ricos exemplos de códigos disponibilizados na web para auxílio na utilização dos mesmos. Para utilizar o Primefaces em um projeto Java que implemente JSF 2, é preciso fazer o download do arquivo primefaces-{version}.jar no 74 ANAIS ELETRÔNICOS V ENUCOMP site do framework, adicioná-lo ao classpath da aplicação web desejada, e importar o namespace para chamada dos componentes: xmlns:p="http://primefaces.org/ui". A Figura 4.4 [primefaces.org], logo abaixo, mostra a codificação de alguns componentes do Primefaces numa página web. Nela, os elementos estão definidos dentro de um formulário, que faz parte da biblioteca HTML e por isso foi definido pela tag <h:form>. Ainda há outros elementos da mesma biblioteca, são eles o panelGrid e o outputLabel. Neste código encontram-se dois elementos simples do Primefaces: o inputText e o commandButton. Figura 4.4 Codificação de componentes HTML e Primefaces Os componentes são definidos por seus atributos configuráveis, que podem ou não está vinculado a classes Java denominadas Managed Bean, que são classes que fornecem ao desenvolvedor o acesso aos estados dos componentes na tela, ou seja, eles fazem a ligação entre interfaces gráficas e a lógica da aplicação. O resultado do código da Figura 4.4 é exibido na figura abaixo, Figura 4.5 [primefaces.org]. Figura 4.5. Componentes em exibição na tela. O Primefaces oferece os componentes mais populares utilizados em páginas na internet, e outros mais complexos, fazendo com que seja possível encontrar em sua biblioteca um elemento para quase todas as necessidades na construção das interfaces gráficas. Dentre os principais componentes, cita-se: AutoComplete, BooleanButton, BooleanCheckbox, Calendar, Editor, InputMask, InputText, InputTextarea, Keyboard, ManyButton, ManyMenu, ManyCheckbox, OneRadio, Password, Slider, DataExporter, DataList, DataGrid, DataTable, GMap e muitos outros componentes distribuídos nas categorias Ajax Core, Input, Button, Data, Panel, Overlay, Menu, Charts, Message, Multimedia, File, DragDrop e Misc. Sobre a exibição de mensagens de validação, são utilizadas as tags Messages e Growl do Primefaces, isso torna fácil a construção destas mensagens e outros avisos que se deseja exibir durante 75 ANAIS ELETRÔNICOS V ENUCOMP a utilização dos componentes na tela. Essas mensagens podem ser geradas pela manipulação da própria interface ou serem lançadas a partir do managed bean. O Primefaces disponibiliza um conjunto de 37 temas pré-definidos, alguns deles mostrado na Figura 4.6, que podem ser utilizados nos projetos de desenvolvimento. Para isso é necessário fazer o download do theme.jar e adicioná-lo ao classpath da aplicação. Além desses, é possível utilizar a ferramenta ThemeRoller, divulgado no site do framework, para criar um novo tema sem necessidade de conhecimentos aprofundados sobre CSS. Figura 4.6 Temas pré-definidos. 4.7. Conclusão O framework aqui estudado é uma ferramenta utilizada em muitos projetos relatados na internet, sempre com críticas positivas da sua utilização. As atualizações de versões são frequentes, o que vai permitindo a melhoria e o incremento dos componentes disponibilizados. Referências Algaworks. (2010) “DWJSF – Desenvolvimento Web com JavaServer Faces”, http://www.algaworks.com/treinamentos/desenvolvimento-web-com-jsf Engholm Júnior, H. (2010) “Engenharia de Software na Prática”. São Paulo: Novatec Editora. Ferreira, A. D. e Martins, L. A. (2009) “Comparativo Entre as Tecnologias JSP (JavaServer Pages) e ASP (Active Server Pages)”, http://www.inf.ufrgs.br/gppd/disc/cmp167/trabalhos/sem2001-1/T2/alex/ Jacobi, J. e Fallows, J. R. (2007) “Pro JSF e Ajax - Construindo Componentes Ricos para a Internet”. Rio de Janeiro: Ciência Moderna. 76 ANAIS ELETRÔNICOS V ENUCOMP Marafon, L. D. (2006) “Integração JavaServer Faces e Ajax”. Monografia (Graduação em Ciência da Computação) - Universidade Federal de Santa Catarina, Santa Catarina. Rossi, C. L. (2012) “Interfaces Ricas para Web: Aplicação com PrimeFaces”. Monografia. (Aperfeiçoamento/Especialização em II Especialização em Tecnologia Java) - Universidade Tecnológica Federal do Paraná. Orientador: Beatriz Terezinha Borsoi. 77 ANAIS ELETRÔNICOS V ENUCOMP Introdução à simulação de redes de computadores com o NS-2 (Network Simulator) - Teoria e Prática Marllus de Melo Lustosa Abstract Perform real experiments with computer networks is often not a trivial task, because, as you know, in many cases can have a complex and heterogeneous environment such networks, which can cause a significant impact on development time of this study. Therefore, computer simulation is a technique used very often because it enables the performance evaluation of various scenarios, including the use of new technologies and protocols, plus the ability to evaluate the impact of different topologies in the environment. This paper attempts to transpose, for students, teachers and professionals, the idea of using computer simulation in education and research computer network, using examples of network simulation with the software NS-2 (Network Simulator). Resumo Realizar experimentos reais com redes de computadores muitas vezes não é uma tarefa trivial, pois, como se sabe, em muitos casos pode se ter um ambiente complexo e heterogêneo dessas redes, o que pode causar um impacto significativo no tempo de desenvolvimento desse estudo. Por esse motivo, simulação computacional é uma técnica utilizada com muita frequência, pois possibilita a avaliação de desempenho de vários tipos de cenários, incluindo a utilização de novos protocolos e tecnologias, além da possibilidade de avaliação do impacto de diferentes topologias no ambiente. Este artigo tenta transpor, para alunos, professores e profissionais, a ideia da utilização da simulação computacional no ensino e pesquisa de redes de computadores, utilizando-se para isso exemplos de simulação de redes com o software NS-2 (Network Simulator). 5.1. Introdução O estudo de redes de computadores propõe analisar, quantita e qualitativamente, o desempenho de sistemas conectados entre si, como a avaliação de protocolos de roteamento, segurança, topologias e novas arquiteturas de comunicação. Desde a criação da pilha de protocolos TCP/IP bem como do modelo OSI, o meio acadêmico e empresarial estuda a implantação de novas tecnologias para compor este ramo da pesquisa. Para isso, trabalham em conjunto para propor novos protocolos e tecnologias, que vão desde à camada de aplicação, como os "peer-to-peer" e ssh, à camada física, como as arquiteturas de transferência de dados usb e wireless. A criação dos modelos TCP/IP e OSI foi ambientalizada na adoção do modelo "Dividir para conquistar", o qual ataca, em partes, o desafio de se propor novos estudos na área de redes de computadores. 78 ANAIS ELETRÔNICOS V ENUCOMP O uso de técnicas de avaliação de desempenho de sistemas também é necessário para compor estudos na área de redes, como: Análise real, modelagem analítica e simulação computacional. A análise real faz uso de acompanhamento real do sistema, medindo e criando relatório das variáveis estudadas, o que pode se tornar um processo árduo e, às vezes, impraticável, pelo alto custo e complexidade do estudo. Os modelos matemáticos ou analíticos podem ser vistos como um conjunto de fórmulas matemáticas de natureza estática, porém, muitos sistemas complexos não possuem modelos para solução analítica, acarretando em hipóteses simplificadoras, o que o torna pouco utilizado em ambientes de alta dinamicidade (Chwif and Medina 2006). Já a simulação computacional é uma técnica que faz uso de soluções computacionais para modelagem e análise de situações reais, podendo prever, com certa confiança, o comportamento de um sistema baseado em dados de entradas específicos e respeitando um conjunto de premissas (Chwif and Medina 2006). Nos demais tópicos serão mostrados as características dos modelos TCP/IP e OSI, bem como a importância para o estudo de redes de computadores, além de promover o estudo de simulação computacional de redes de computadores com o simulador de eventos discretos NS-2, demonstrando todo o seu potencial, tanto na abordagem teórica do simulador quanto por meio de exemplos práticos de simulação de redes. 5.2. Modelo OSI Sigla para Open System Interconnection, é um padrão da ISO (Intenational Organization for Stardardization) mundial que define um framework de rede para implementação de protocolos em sete camadas. Esse padrão ISO, criado em 1984, afeta a forma de como a indústria de TI deve criar protocolos de redes de computadores [Surman 2002]. Com base na teoria de "Dividir para conquistar", o modelo foi criado com objetivo de traçar todas as partes de desenvolvimento de uma arquitetura ou protocolo de comunicação que usa redes de computadores e máquinas heterogêneas em seu funcionamento. O modelo é composto de várias camadas distribuídas desde o nível do usuário (camada de aplicação) ao nível físico (camada física). A figura 5.1 mostra como estão dispostas essas camadas. 79 ANAIS ELETRÔNICOS V ENUCOMP Figura 5.1. Exemplificação das 7 camadas do modelo OSI 5.3. Modelo TCP/IP Criado e financiado pela ARPANET (Advanced Research Projects Agency), o TCP/IP, comumente chamado de pilha TCP/IP, é um conjunto de protocolos de comunicação entre computadores em rede. O nome foi dado em referência aos protocolos TCP (Transmission Control Protocol) e IP (Internet Protocol). O conjunto de protocolos pode ser visto como um modelo de camadas, onde cada uma é responsável por um grupo de tarefas, fornecendo um conjunto de serviços bem definidos para o protocolo da camada superior. Sua evolução emergiu no final de 1978, e em 1983 se tornou o primeiro modelo aprovado pela ARPANET. Os protocolos para internet formam o grupo de protocolos de comunicação que implementam a pilha de protocolos TCP/IP sobre a qual a internet e a maioria das redes comerciais funcionam [Danzig and Jamin 1991]. A seguir, a Figura 5.2 mostra as camadas referentes ao modelo TCP/IP. 80 ANAIS ELETRÔNICOS V ENUCOMP Figura 5.2 Pilha de protocolos TCP/IP 5.4. Modelo OSI vs Modelo TCP/IP A Arquitetura OSI foi elaborada pelas comissões da ISO, constituídas por representantes técnicos da maioria dos países com experiência em comunicação de dados [Lima 2006]. O modelo OSI foi elaborado seguindo métricas determinadas no decorrer do processo. Enquanto que a Arquitetura TCP/IP foi elaborada no ambiente da Internet de acordo com a demanda e as necessidades do mercado [Lima 2006]. Os estudos da ARPA foram os grandes precursores para o desenvolvimento desse modelo. A criação dos protocolos TCP e IP deu início a um novo paradigma de comunicação, baseado no conjunto de vários protocolos que fornecem a possibilidade de transferência de dados por meio das redes de computadores. A figura 5.3 mostra uma possível comparação entre esses dois modelos de comunicação de dados. Figura 5.3 Comparação dos modelos OSI e TCP/IP 5.5. Análise de desempenho de sistemas Na implantação ou desenvolvimento de qualquer sistema computacional, é imprescindível o uso de técnicas para avaliação de desempenho, pois permite ao pesquisador uma maior análise das métricas e características do sistema em questão, objetivando uma maior viabilidade de recursos para o projeto, além da utilização de diferentes parâmetros no processo de análise. Existem três técnicas clássicas utilizadas na literatura para a avaliação de desempenho de sistemas, que são: Medição real, modelagem analítica e simulação computacional. A primeira, também chamada de métodos de benchmarking, provê o uso de ferramentas para teste diretamente no hardware de estudo, ou seja, é necessária a disponibilidade do equipamento físico em questão no ambiente de pesquisa. A modelagem analítica é baseada em métodos analíticos, que são modelos matemáticos, como Redes de Petri e Cadeias de Markov, e consistem no principal meio de predição do desempenho de sistemas que ainda não estão fisicamente disponíveis. A criação de um modelo analítico preciso para determinado sistema é muito difícil, devido à complexidade do seu processo de desenvolvimento do modelo [Marcari and Manacero 2003]. Por último, a técnica de simulação 81 ANAIS ELETRÔNICOS V ENUCOMP computacional é empregada em referência à expressões matemáticas ou especificações mais ou menos formalizadas, com a finalidade de representar um processo ou operação do mundo real. Assim, é necessária a construção de um modelo de computador que corresponda à situação real que se pretenda simular [Freitas 2008]. A simulação de sistemas é a utilização de técnicas matemáticas usadas em computadores, que permitem "imitar" a operação de praticamente qualquer tipo de operação ou processo do mundo real, o que significa que é o estudo do comportamento dos sistemas reais através da exercício de modelos [Freitas 2008] [Chwif and Medina 2006]. A partir dessas técnicas, vários parâmetros são disponibilizados objetivando uma melhor postura por parte do pesquisador em seus critérios de avaliação e adoção de um modelo para o estudo de avaliação de desempenho de sistemas. Tais parâmetros podem ser vistos na tabela 5.1, retirada de Jain [Jain 1991]. Tabela 5.1 Critérios para escolha de técnicas de análise ou predição de desempenho [Jaim 1991] Métodos analíticos Critério Simulação Benchmarking 1. Estágio de desenvolvimento Qualquer qualquer pós-protótipo 2. Tempo na obtenção dos resultados Pequeno médio varia 3. Ferramentas para análise analistas humanos linguagem de computadores instrumentação 4. Exatidão Baixa moderada varia 5. Avaliação de alternativas Fácil moderada varia 6. Custo Baixo médio alto 7. Credibilidade do método Baixo médio alto 82 ANAIS ELETRÔNICOS V ENUCOMP .5.1. Simulação computacional Simulação, segundo [Longman Dictionary of Contemporary English 2003], é uma atividade ou situação que reproduz uma condição real, mas tem uma aparência realística, sendo usada para testar qualquer coisa. Segundo [Law e Mccomas 1991], simulação é a imitação de um sistema real, modelado em computador, para avaliação e melhoria de seu desempenho. Ou seja, simulação é o desenvolvimento virtual e controlado de uma realidade, afim de se estudá-la, objetivando propor melhorias no ambiente, assim como [Banks 2000], que afirma que a simulação envolve a criação de uma história artificial da realidade e, com base nesta história artificial, são realizadas observações e inferências nas características de operação do sistema real representado. A figura 5.4 esquematiza este conceito da transformação da realidade em modelo e novamente dos resultados em realidade. Figura 5.4 Realidade x Modelo [Duarte 2003] Existem na literatura três tipos de modelos de simulação: Modelos discretos e contínuos. Também existem os modelos híbridos, que trabalham com eventos estáticos e discretos em um mesmo ambiente. Mais especificamente, de acordo com [Filho 1995], Um modelo é discreto se todas as variáveis de estado têm seus valores alterados apenas em um número contável de instantes de tempo. Já em um modelo contínuo, todas essas têm seus valores alterados a qualquer instante de tempo. Um modelo é misto ou híbrido, se algumas variáveis de estado têm os seus valores alterados a qualquer instante de tempo e outras apenas em um número contável de instantes de tempo. A figura 5.5 demonstra como funciona uma simulação de eventos contínuos, mostrando como exemplo a simulação do esfriamento de uma xícara de chá. A variável estudada é a temperatura, que varia continuamente com o tempo. Figura 5.5 Simulação contínua do estudo da temperatura do chá ao longo do tempo [Chwif and Medina 2006]. 83 ANAIS ELETRÔNICOS V ENUCOMP Ao contrário dessa, a figura 5.6 exemplifica uma simulação de eventos discretos, ou seja, eles são disparados em instantes de tempo descontinuados, pois, no modelo discreto, a execução dos eventos ocorre em saltos. Figura 5.6 Evolução dos estados na simulação de eventos discretos da preparação de uma xícara de chá [Chwif and Medina 2006]. 5.6. Simuladores de redes de computadores Na literatura de redes de computadores, vários são os simuladores disponíveis para quem deseja estudar a área, a exemplo do Jist [Barr and Haas 2004], Sinalgo [Sinalgo 2007] e OMNet++ [György 1993]. Alguns clássicos, como o Network Simulador 2 [NS 2001] e TOSSIM [Levis and Lee et al 2003] são mais utilizados pela comunidade acadêmica, envolvida em diversos projetos sobre redes wireless, cabeadas, veiculares, dentre outras. Muitas são as linhas de pesquisa em redes de computadores, e pela grande quantidade de pesquisadores envolvidos em projetos na área, é esperado que existam vários simuladores para os mais diversos fins. Neste trabalho é proposta a iniciação e o desenvolvimento do estudo sobre simulação de redes de computadores a partir da ferramenta Network Simulator - 2 (NS), cujos objetivos e motivações serão descritos no próximo tópico. 5.6.1. Network Simulator - NS-2 NS-2 é um simulador de redes de eventos discretos. NS-2 fornece um apoio substancial para a simulação do TCP, protocolos de roteamento e multicast com fio e sem fio (local e satélite). Ele é descrito em C++ e uma versão orientada a objeto do Tcl (Tool command language) chamado OTcl [Fall and Varadhan 2007]. É altamente escalável, com características de acoplamento de módulos para simulação de diferentes tipos de redes. Na instalação do NS-2 ainda é seguido o NAM (Network Animator), que é uma ferramenta capaz de realizar uma animação 2D da simulação. A figura 5.7 mostra o resultado de uma pesquisa feita pelo autor deste trabalho, que comparou a utilização dos simuladores de redes de computadores, em trabalhos publicados em conceituadas conferências. Como resultado, apresentou-se a estatística do uso de simuladores de redes e modelagem analítica, pela comunidade acadêmica no período entre 1998 e 2009, em 84 ANAIS ELETRÔNICOS V ENUCOMP estudos na área de Redes de Sensores Sem Fio (RSSF). Num total de 46, todos os artigos analisados na pesquisa foram retirados do portal de periódicos da capes. Figura 5.7 Análise do uso de simuladores em pesquisas na área de RSSF entre os anos de 1998 e 2009. Na figura acima, percebe-se que o software de simulação mais utilizado em trabalhos com RSSF, no período estudado, e atingindo quase 70% de utilização, foi o NS-2, seguido de simuladores próprios (P.S.) desenvolvidos para determinado fim de pesquisa. Em terceiro lugar encontra-se o Tossim, e por último, com menos de 5% de uso, estão os modelos analíticos (M.A.). Além da motivação citada acima, outros tópicos interessantes favoreceram na escolha do NS-2 como software de simulação de redes de computadores na composição desse trabalho, dentre eles: - Open Source; - Possibilidade de interações em ambientes multiprotocolos; - Facilidade de Trancing; - Disponível em sistemas Unix, GNU/Linux, BSD, Solaris e Windows (Cygwin); - Orientado a objetos; - Estrutura modular; - Suporte à simulação de redes cabeadas e sem fio; Percebe-se, portanto, sua grande abrangência tanto em relação ao desenvolvimento do cenário de simulação de redes quanto na utilização de diferentes sistemas operacionais para execução do mesmo, facilitados pelo motivo de este ser de código aberto e ter compatibilidade com diferentes núcleos operacionais. Outra característica bastante interessante é a sua capacidade de implementação em qualquer camada do modelo OSI, da aplicação à física. Na literatura, existem modelos prontos de diferentes camadas, propostos por pesquisadores da área e desenvolvedores do programa. O suporte à simulação de redes cabeadas e sem fio também é um 85 ANAIS ELETRÔNICOS V ENUCOMP fator decisivo, pois, em ambientes reais, tanto pode-se ter um ambiente de simulação homogêneo de nós em rede como a fusão desses dois tipos, wired-cum-wireless, como exemplificado na figura 5.8, retirado de [Fall and Varadhan 2007]. Figura 5.8 Topologia de rede mista, onde se encontram nós móveis e fixos cabeados e sem fio [Fall and Varadhan 2007]. 5.6.1.1. NS-2 - C++ e OTcl A importância e necessidade de utilizar duas linguagens de programação para compor o NS-2 está descrita a seguir. - C++: É utilizada para compor o núcleo do simulador. É nela em que ocorre a implementação e execução dos protocolos e aplicações. Pelo fato dessa linguagem trabalhar bem com bytes e ter um tempo computacional de processamento relativamente baixo, além da capacidade de trabalhar com orientação a objetos, ela foi escolhida para compor a padrão de mais baixo nível do programa, agilizando os processos de recompilação de módulos. - OTcl: A alta dinamicidade de mudança de uma simulação, aliada à rapidez no processo de alteração do ambiente a ser simulado sem que os módulos e protocolos sejam recompilados novamente, foram o que levaram a adoção de uma linguagem de scripts para compor o front-end do usuário. A linguagem Otcl, variante orientada a objetos da Tcl, e interpretada, é capaz de interagir com as classes C++ por meio da interface TclCL, que faz a ligação entre estas, numa correspondência one-to-one [Fall and Varadhan 2007], conforme mostra a figura 5.9, retirada de [Issariyakul and Hossain 2011]. 86 ANAIS ELETRÔNICOS V ENUCOMP Figura 5.9 Ligação one-to-one entre as classes compiladas e interpretadas, das linguagens C++ e Otcl [Issariyakul and Hossain 2011]. A correspondência entre essas duas linguagens é melhor descrita por meio da imagem 5.10, retirada de [Rodolfo 2009], na qual são apresentados três níveis: O cenário de simulação, o script Tcl e a implementação C++. O primeiro, representa um ambiente de simulação constituído de 2 nós e comunicação sem fio. O script Tcl contém a instanciação e criação de um array de nós e de um objeto simulador, pelas declarações das variáveis node_ e ns_. A implementação da classe dos nós, chamada MobileNode (nó móvel), que contém todos os atributos e métodos referentes a eles, é feita na linguagem C++, e é compilado somente um vez, na criação do ambiente de simulação. Figura 5.10 Interação entre as implementações Tcl e C++ no NS-2 [Rodolfo 2009]. 5.6.1.2. NS-2 - Nós e enlaces - Modelo wired Os nós (hosts) são definidos no NS-2, na linguagem OTcl, por meio do comando set <nome_do_no> [$ns node], que seta um nó e referencia a classe node da instância do simulador 87 ANAIS ELETRÔNICOS V ENUCOMP $ns. Eles são compostos de agentes, um ponto de entrada no nó, um classificador de endereços e um classificador de portas. De acordo com [Anton 2003], um pacote gerado por um agente é entregue ao nó ao qual o agente está ligado, através do ponto de entrada, que também recebe pacotes cujo destino é o próprio nó. Após passar pelo ponto de entrada, o pacote é recebido pelo classificador de endereços, que verifica se o pacote deve ser entregue a um agente pertencente ao nó ou deve ser transmitido para um enlace de saída. Caso o pacote seja destinado a um agente do próprio nó, o pacote é então repassado ao classificador de porta que, de acordo com o endereço de destino, entrega o pacote ao respectivo agente. A arquitetura do componente nó é mostrada a seguir, a partir da figura 5.11, retirada de [Coutinho 2007]. Figura 5.11 Arquitetura do componente do tipo nó, unicast e multicast [Coutinho 2007]. A definição dos nós está diretamente ligada à criação do enlace, que é uma estrutura que conecta os nós, objetivando formar a topologia. Outro detalhe importante que se deve ter ciência é o fato de a camada de enlace implementar as políticas de fila, ao contrário do que acorre em ambientes reais, cujo gerenciamento de buffer é no próprio host. Portanto, o atraso no encaminhamento dos pacotes de um nó a outro se dá pela soma do atraso do pacote na fila com o atraso default do próprio enlace, o qual é definido pelo usuário. A camada de enlace também guarda informações e gerencia o TTL do pacote, valor que vai decaindo com cada salto do mesmo. Toda a estrutura dessa camada pode ser observada na figura 5.12, retirada de [Coutinho 2007]. Figura 5.12 Estrutura do enlace no NS-2 [Coutinho 2007]. 88 ANAIS ELETRÔNICOS V ENUCOMP O NS-2 suporta dois padrões de encaminhamento de pacotes nos enlaces: O tipo simplex, em que os dados são enviados apenas em um sentido (exemplo da figura 5.12) e no modo em que os pacotes trafegam em ambos os sentidos, caracterizando o tipo duplex. O comando básico que define um enlace entre os nós é $ns duplex-link n0 n1 1Mb 10ms DropTail. O comando contém parâmetros do tipo de encaminhamento do enlace (duplex ou simplex), os nós que serão ligados (n0 n1), a largura de banda do link (1 Megabits/segundo), o atraso do link (10 milissegundos) e a política de fila adotada para o enlace (DropTail). 5.6.1.3. NS-2 - Camadas de protocolos - Modelo Wireless As camadas de protocolos do modelo wireless, no NS-2, descrevem a pilha de protocolos e modelos referentes às camadas da arquitetura OSI, utilizadas pelo simulador. Qualquer implementação de novos módulos para algumas dessas camadas, tem de ser realizada na linguagem C++, cujas implementações estão na estrutura do próprio simulador. A figura 5.13, retirada de [Rodolfo 2009] demonstra como funciona o modelo wireless no NS-2. Figura 5.13 Funcionamento do modelo wireless no simulador NS-2 [Rodolfo 2009]. Iniciando pelo camada de mais alto nível, a camada "Agent" se liga à aplicação (ftp, telnet, cbr, ...) e tem a função de receber ou transmitir pacotes, funcionando como Src (transmissor) ou Sink/Null (receptor). Logo após, tem-se os componentes "Addr Demux" e "Port Demux" que são os classificadores de endereço e porta, respectivamente, e cuja função já foi explicada anteriormente, a partir da figura 1.10. A camada "RTagent" faz a implementação do protocolo de roteamento utilizado na simulação, no caso do exemplo da figura 5.13, foi usado o protocolo DSDV. A camada "LL" implementa a camada de enlace, cuja função é executar os protocolos da camada de ligação de dados, como fragmentação ou reagrupamento dos pacotes. Essa camada está também ligada à camada "ARP", que tem a função de converter o endereço ip 89 ANAIS ELETRÔNICOS V ENUCOMP do pacote em endereço mac e vice-versa. A camada "MAC" implementa os protocolos de acesso ao meio, como o padrão IEEE 802.11, que simplesmente foi uma transcrição em C++ do firmware das placas de comunicação que se utilizam desse padrão. A camada "IFq" (interface de fila) existe para dar prioridade aos pacotes de encaminhamento. O módulo PriQueue, referente a essa camada, prioriza os pacotes de encaminhamento, colocando-os na cabeça da lista de espera. As camadas "NetIF", "Radio Propagation Model and Antenna" e "Channel" modelam os protocolos referentes à camada física, da arquitetura OSI. A primeira, "NetIF" (interface de rede), implementada pelo módulo WirelessPhy, é usada pela classe MobileNode como uma interface de hardware para acesso ao Channel. Especificamente, essa camada recebe os metadados, presentes no cabeçalho do pacote recebido, com informações sobre potência de transmissão, energia gasta na transmissão ou restante (residual), comprimento de onda do sinal, e encaminha para a camada de propagação de rádio e antena, que, a partir de modelos como o TwoRayGround e Propagation e Free-space, quantifica as perdas de propagação e testa se o pacote contém as condições necessárias para ser recebido pelo nó em questão, ou seja, se possui a potência mínima para ser recebido, caso contrário, será descartado. Os modelos de antena também são definidos na camada "Radio Propagation Model and Antenna", como por exemplo o modelo OmniAntenna. Como tipo de canal, tem-se o exemplo do modelo WirelessChannel, que é um modelo de propagação sem fio. 5.7. Projeto Liowsn Implantar o ambiente computacional necessário para a iniciação das pesquisas na área de redes é a primeiro passo para o pesquisador que deseja realizar simulações em seu estudo. No entanto, além de instalar essas ferramentas, muitas vezes é necessário a configuração dos módulos adicionais para estudos específicos, como por exemplo, os da área de rede de sensores sem fio (RSSF), no caso do NS-2. Considerando que a grande maioria desses programas e módulos são nativos para a plataforma Linux, é natural que se tenha um corpo técnico para a realização da configuração adequada do software no sistema operacional. Tendo em vista a grande lista de perguntas sobre instalação do NS-2, como em [Nabble 2012], bem como dúvidas sobre a configuração de novos módulos em grandes fóruns desses programas, como pode ser visto em [Nabble 2012], [The Linux Question 2012], [Gname 2012] e [The Mail Archive 2012], entende-se que essa não é uma tarefa trivial. A partir desse cenário, o projeto Liowsn (Linux for works with WSN, Linux para trabalhos com redes de sensores sem fio), idealizado pelo autor deste trabalho, foi criado e consiste de um sistema operacional GNU/Linux remasterizado com todas as ferramentas clássicas para simulação de redes, já instaladas e configuradas, assim como a maioria dos módulos para trabalhos com redes de sensores sem fio, cujo tema foi o foco do projeto [Lustosa and Singh 2012]. Dentre essas ferramentas estão o NS-2 e OMNet++, além de alguns módulos específicos para trabalhos na área de RSSF, como a Castalia e Mannasim. A descrição de todas as ferramentas incluídas no sistema operativo segue abaixo. - NS-2.34 (Simulador de redes); - Mannasim (Módulo para simulação de RSSF para o NS-2.34); - OMNeT++ (Framework para simulação de redes); - Castalia (Simulador de RSSF, roda sob o OMNeT++); 90 ANAIS ELETRÔNICOS V ENUCOMP - Xgraph (Analisador de arquivos trace); - Tracegraph (Analisador de arquivos trace); - NAM (Animador gráfico da simulação); Percebe-se, então, que todo o ambiente necessário para iniciação à simulação de redes, com as ferramentas mais utilizadas na literatura, está instalado no sistema operacional. Ele foi disponibilizado em imagem .iso e se encontra no endereço http://sourceforge.net/projects/liowsn/. O sistema operacional utilizado para compor o projeto Liowsn foi o GNU/Linux Ubuntu 9.10, e será usado neste trabalho de simulação de redes por já conter o NS-2.34 instalado e configurado. O sistema pode ser instalado em computador ou ainda iniciá-lo pela opção live-cd, que funciona usando somente a memória principal (ram). O NS-2 ainda pode ser utilizado instalando-o a partir de seus arquivos fontes ou binários originais, que podem ser baixados no site http://nsnam.isi.edu/nsnam/index.php/Downloading_and_installing_ns-2/. 5.8. Prática de simulação de redes com NS-2 O tópico a seguir abordará a prática da simulação de redes cabeadas e sem fio no simulador NS2, com exemplos bem claros de ambientes básicos de redes. Mostrará também os tópicos a serem seguidos no desenvolvimento da simulação, assim como a análise básica dos arquivos trace (arquivos gerados após a execução da simulação computacional). 5.8.1. Simulando uma rede cabeada Para iniciar uma simulação de ambientes cabeados, ou seja, redes em que os nós são ligados por links físicos, 5 passos basicamente são seguidos [Coutinho 2007]: - Planejar a simulação; - Definir os nós; - Definir a ligação entre os nós (topologia); - Definir o tráfego que será injetado na rede; - Analisar os resultados; O planejamento da simulação consiste em definir quais as características dos nós e enlaces da rede a ser simulada. Segue abaixo a figura 5.14, que mostrando uma modelagem básica de um ambiente de rede. Figura 5.14 Planejamento da simulação 91 ANAIS ELETRÔNICOS V ENUCOMP Na figura acima são definidas todas as características da rede a ser simulada, como a topologia dos nós, a largura de banda do enlace seguido de seu atraso padrão, o tipo de fila DropTail (com política FIFO - First In First Out) e os agentes UDP (User Datagram Protocol) e NULL ligados aos nós, que são os agentes de roteamento de envio e recebimento do pacotes. É definida também a aplicação CBR (Constraint Bit Rate), cuja é ligada ao agente de roteamento UDP, que possui característica de entrega não confiável de dados. A seguir, é mostrado o script, com extensão .tcl, desse cenário, adaptado de [Greiss 2012] utilizado para ser executado pelo simulador NS-2, a partir do shell do Linux, como o comando $ns nome_do_script.tcl. # Criando o objeto simulador set ns [new Simulator] # Abre o arquivo de trace .nam e .tr set nf [open out.nam w] set f [open out.tr w] $ns namtrace-all $nf $ns trace-all $f # Define o procedimento "finish" proc finish {} { global ns nf f # Limpa os arquivos trace $ns flush-trace # Fecha o arquivo trace close $nf close $f # Envia um comando para o shell e abre o arquivo trace do NAM pelo programa NAM exec nam out.nam & 92 ANAIS ELETRÔNICOS V ENUCOMP exit 0 } # Cria dois nós set n0 [$ns node] set n1 [$ns node] # Cria um enlace full-duplex entre eles $ns duplex-link $n0 $n1 1Mb 10ms DropTail # Cria um agente UDP e anexa-o ao nó n0 set udp0 [new Agent/UDP] $ns attach-agent $n0 $udp0 # Cria uma fonte de tráfego e anexa-a ao agente udp0 set cbr0 [new Application/Traffic/CBR] # Define os parâmetros de tamanho dos pacotes gerados e intervalo entre eles $cbr0 set packetSize_ 500 $cbr0 set interval_ 0.005 $cbr0 attach-agent $udp0 # Cria um agente null0 e anexa-o ao nó n1 set null0 [new Agent/Null] $ns attach-agent $n1 $null0 # Conecta os agentes udp0 e null0 (transmissor e receptor) $ns connect $udp0 $null0 93 ANAIS ELETRÔNICOS V ENUCOMP # Escalonador de eventos para a aplicação CBR $ns at 0.5 "$cbr0 start" $ns at 4.5 "$cbr0 stop" # Chama o procedimento "finish" no instante de tempo 5 segundos. $ns at 5.0 "finish" # Executa a simulação $ns run A partir desse código, salvo com extensão .tcl e executado pelo comando acima citado, tem-se dois arquivos trace: out.nam e out.tr. O primeiro, é o arquivo que será executado pelo software NAM (Network Animator) e será responsável por realizar a animação gráfica da simulação. Com ele, se tem a possibilidade de observar se a simulação ocorreu da forma como foi programada, pela visualização gráfica que este fornece ao pesquisador, assim como é mostrado pela figura 5.15, em um exemplo de utilização do software NAM. O segundo, out.tr, é um arquivo trace que contém todos os dados da simulação, ou seja, todos os eventos que ocorreram ao longo do tempo dado, como o instante de tempo de cada pacote enviado, se ele foi recebido e/ou descartado, e até mesmo se passou por fila em algum enlace que trafegou. A seguir, nas figuras 5.16 e 5.17, é mostrado parte do código do arquivo trace gerado pela simulação acima e o que cada campo representa na análise dos dados, respectivamente. Figura 5.15 Visualização dos fluxos de dados e estouro de fila, com o software NAM. 94 ANAIS ELETRÔNICOS V ENUCOMP Figura 5.16 Exemplo de parte do arquivo trace gerado na simulação. Figura 5.17 Análise dos campos do arquivo trace de uma simulação cabeada, adaptada de [Chung and Claypool 2012]. Na figura 5.16, tem-se na primeira coluna o evento, que pode ser "r", "+", "-" e "d", referente ao recebimento do nó ou monitoramento da fila. Logo após está o instante de tempo em que ocorreu o evento, depois vêm os campos "from node" e "to node", que representa o nó emissor e receptor. A coluna 5 ("pkt size") é referente ao tamanho do pacote. O campo "flags" representa os campos seguintes, que são: Id do fluxo de dados do pacote ("fid"), o endereço do nó fonte ("src addr") e do nó destino ("dst addr") e são representados por "nó.porta", o número de sequência do pacote ("seq num") e o id do pacote ("pkt id"). A partir desses dados do arquivo trace, é possível realizar diversas consultas com objetivo de receber informações a cerca de determinados parâmetros de simulação, como exemplo: - Vazão de um link (troughput); - Índice de perdas de pacotes; - Atraso médio na entrega dos pacotes (latência); - Variação no atraso (jitter); 5.8.3. Simulando uma rede sem fio A simulação de redes sem fio também segue os mesmos 5 passos para desenvolvimento do script de simulação. A diferença está na criação dos parâmetros de topologia, que na rede wireless, tem-se desde informações da camada física até a camada de enlace, definidas pelo usuário. Abaixo segue um script de simulação, adaptado de [Rodolfo 2009] com dois nós sem fio (nó n(0) e nó n(1)) que se movem, além de haver transmissão de dados FTP, por meio do agente de roteamento TCP, entre eles (do nó n(0) ao nó n(1)), em um ambiente com dimensão 500x500m (eixo z é definido como z=0). A figura 5.18, retirada de [Rodolfo 2009], mostra o modelo de simulação utilizado. 95 ANAIS ELETRÔNICOS V ENUCOMP Figura 5.18 Modelo pretendido para simulação [Rodolfo 2009]. Segue script .tcl abaixo: # Define opções set val(chan) Channel/WirelessChannel; # tipo do canal set val(prop) Propagation/TwoRayGround; # modelo de radio-propagação set val(netif) Phy/WirelessPhy; # tipo de interface de rede set val(mac) Mac/802_11; # tipo MAC set val(ifq) Queue/DropTail/PriQueue; # tipo de interface de fila set val(ll) LL; # tipo de camada de enlace set val(ant) Antenna/OmniAntenna; # modelo da antena set val(ifqlen) 50; # num máx de pacotes em ifq set val(nn) 2; # numero de nós móveis set val(rp) DSDV; # protocolo de roteamento # Inicializa variáveis globais set ns_ set tracefd [new Simulator] [open simple.tr w] 96 ANAIS ELETRÔNICOS V ENUCOMP $ns_ trace-all $tracefd # Seta topografia da simulação set topo [new Topography] $topo load_flatgrid 500 500 # Cria objeto GOD (Guarda informações sobre a conectividade da topologia) create-god $val(nn # Configuração dos nós $ns_ node-config -adhocRouting $val(rp) \ -llType $val(ll) \ -macType $val(mac) \ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -channelType $val(chan) \ -topoInstance $topo \ -agentTrace ON \ -routerTrace ON \ -macTrace OFF \ -movementTrace OFF #Criação dos nós for {set i 0} {$i < $val(nn) } {incr i} { 97 ANAIS ELETRÔNICOS V ENUCOMP set node_($i) [$ns_ node] $node_($i) random-motion 0 ; #Desabilita movimento randômico dos nós } # Define coordenadas iniciais para os nós (X,Y, Z=0) $node_(0) set X_ 5.0 $node_(0) set Y_ 2.0 $node_(0) set Z_ 0.0 $node_(1) set X_ 390.0 $node_(1) set Y_ 385.0 $node_(1) set Z_ 0.0 # Criação de movimentos dos nós # Nó n(1) vai para posição x=25m y=20m com uma velocidade de 15m/s, no instante de tempo 50s. $ns_ at 50.0 "$node_(1) setdest 25.0 20.0 15.0" $ns_ at 10.0 "$node_(0) setdest 20.0 18.0 1.0" $ns_ at 100.0 "$node_(1) setdest 490.0 480.0 15.0" # Criando a geração de tráfego set tcp [new Agent/TCP] $tcp set class_ 2 set sink [new Agent/TCPSink] $ns_ attach-agent $node_(0) $tcp $ns_ attach-agent $node_(1) $sink $ns_ connect $tcp $sink 98 ANAIS ELETRÔNICOS V ENUCOMP set ftp [new Application/FTP] $ftp attach-agent $tcp $ns_ at 10.0 "$ftp start" # Reseta as configurações dos nós para encerramento da simulação for {set i 0} {$i < $val(nn) } {incr i} { $ns_ at 150.0 "$node_($i) reset"; } $ns_ at 150.0 "stop" $ns_ at 150.01 "puts \"NS EXITING...\" ; $ns_ halt" proc stop {} { global ns_ tracefd $ns_ flush-trace close $tracefd } # Inicia simulação puts "Starting Simulation..." $ns_ run Após a execução do script de simulação acima é gerado o arquivo simple.tr, que é um arquivo de trace completo da simulação, com informações a cerca de cada evento disparado na mesma. A figura 5.19 mostra um exemplo de uma linha de código do arquivo trace de uma simulação, e logo abaixo têm-se a caracterização de todos os campos. Figura 5.18. Exemplo de parte do arquivo trace de uma simulação de redes wireless. Abaixo segue a descrição de todos os campos referentes à figura acima. - s: envio de pacote (também pode ser r - recepção, D - descarte, f - encaminhamento, c colisão); 99 ANAIS ELETRÔNICOS V ENUCOMP - 0.029365548: instante de tempo em que ocorreu a operação; - _1_: nó onde foi executado a operação; - MAC/RTR/AGT: indica a camada que gerou a operação; - ---: flags; - 0: identicador do pacote; - message/tcp: nome do pacote; - 90 (bytes): tamanho do pacote; - 0: tempo de duração do pacote contido no cabeçalho MAC; - ffffffff: endereço de MAC de destino; - 1: endereço MAC de quem enviou o pacote; - 800: tipo de cabeçalho MAC do pacote (800 = ARP); - -------: flags; - [1:255 – 1:255 32 0]: cabeçalho IP; - 1: endereço IP de quem originou o pacote; - 255: porta de origem; - 1: endereço IP do nó destino; - 255: porta do nó destino; - 32: campo TTL (time to live); - 0: indica o endereço do próximo salto (hop); 5.9. Considerações finais Este trabalho teve por objetivo teorizar sobre o tema de redes de computadores, abordando suas características que vão desde os primeiros estudos de conexão entre sistemas até os modelos OSI e TCP, além de conceituar as formas de análise de desempenho de sistemas, e mostrando o porque da escolha da simulação computacional como foco deste trabalho. Foram relatadas simulações com redes cabeadas e sem fio, a partir do programa NS-2, com um exemplo prático de todo o desenvolvimento da simulação, que vai desde o planejamento da topologia de rede até a análise dos arquivos trace, que contém as informações sobre todos os eventos ocorridos na simulação, seja recebimento, envio, enfileiramento ou descarte de pacotes. O ambiente operacional necessário para a iniciação de pesquisas que têm como foco a simulação computacional na área de redes também foi discutido e focado no projeto Liowsn, um sistema operativo proposto pelo autor desse artigo, e que visa prover um ambiente com várias ferramentas mais utilizadas na literatura já instaladas e pré-configuradas para uso. Portanto, o trabalho foi concluído, seguindo como base de ensino os métodos descritos acima, visando sempre a adequação desse conteúdo de forma a torná-lo o mais claro possível, tanto para 100 ANAIS ELETRÔNICOS V ENUCOMP docentes, que desejam repassar seus conhecimentos em sala de aula, como para pesquisadores em geral, que necessitam desse conteúdo para o desenvolvimento de projetos na área. Referências Surman, G. (2002) "Understand security using the OSI model", SANS Institute - The Information Security Reading, March 20. Danzig, P., Jamin, S. (1991) "tcplib: A Library of TCP/IP Traffic characteristics". Technical Report CS-SYS-91-01, University of Southern California. Lima, S. H. (2006) "Comunicação de Dados - Arquitetura TCP em rede de dados", Engenharia de Telecomunicações, Universidade de Santa Cecília - UNISANTA. Marcari, E., Manacero, A. (2002) "Classificação de Técnicas para Análise de Desempenho de Sistemas Paralelos e Distribuídos", FAPESP - Fundação de Amparo à Pesquisa do Estado de São Paulo. Freitas, P. J. F. (2008) "Introdução à Modelagem e Simulação de Sistemas: com Aplicações em Arena", 2. ed. Florianópolis: Visual Books Ltda. 372p. ISBN 978-85-7502-228-3. Chwif, L., Medina, A. C. (2006) "Modelagem e Simulação de Eventos Discretos: Teoria e Aplicações", 1 ed. São Paulo: Bravarte. 254 p. ISBN 85905978-1-4. Jain, R. (1991) "The Art of Computer Systems Performance Analysis: Techniques for Experimental Design, Measurement, Simulation, and Modeling", John Wiley & Sons, 2nd edition. Longman Dictionary of Contemporary English (2003), 3a Edição, Pearson Education do Brasil LTDA. Law, M. A., Mccomas, M. G. (1999) "Simulation of Manufacturing Systems", Proceedings of the Winter Simulation Conference. Tucson. Banks, J., (1999) "Introduction to Simulation", Proceeding of the Winter conference, Atlanta. Duarte, R. N. (2003) "Simulação computacional: Análise de uma célula de manufatura em lotes do setor de auto-peças", Dissertação (Mestrado em Engenharia de Produção) Programa de Pós-Graduação em Engenharia de Produção, Itajubá, MG, UNIFEI. Filho, C. P. (1995) "Introdução à simulação de sistemas", 159f. Campinas, SP: Editora da UNICAMP. Barr, R., Haas, Z. J. http://jist.ece.cornell.edu/. (2004) "JiST/SWANS Sinalgo (2007) "Sinalgo Simulator http://disco.ethz.ch/projects/sinalgo/index.html. Fall, K., Varadhan, K. (2007) documentation.html, August. "The ns - Java for manual", in Simulation Network Time", Algorithms", http://www.isi.edu/nsnam/ns/ns- György, P. (1993), "OMNeT: Objective Modular Network Testbed", MASCOTS '93: Proceedings of the International Workshop on Modeling, Analysis, and Simulation On Computer and Telecommunication Systems: 323--326. 101 ANAIS ELETRÔNICOS V ENUCOMP Levis, P., Lee N., Welsh M., Culler, D. (2003) "TOSSIM: Accurate and Scalable Simulation of Entire TinyOS Applications", In: Proceedings of the First ACM Conference on Embedded Networked Sensor Systems. Issariyakul, T., Hossain, E. (2012) "Introduction to Network Simulator NS2", DOI 10.1007/978-1-4614-1406-3 3, © Springer Science+Business Media, LLC. Anton, R. E. (2003) "Análise de desempenho de protocolos para estabelecimento de chave de grupo em redes ad hoc", X, 53 p. 29,7 cm (COPPE/UFRJ, M.Sc., Engenharia Elétrica), Tese - Universidade Federal do Rio de Janeiro, COPPE. Coutinho, M. M. (2007) "Network Simulator - Guia básico para iniciantes", http://gredes.ifto.edu.br/wpcontent/uploads/livroNS.pdf. Nabble. (2012) "Network Simulator ns-2 - The Official Discussion List", Research on errors in the installation of the ns2. http://old.nabble.com/forum/Search.jtp?query=installation+error+ns&local=y&forum=15582 &daterange=0&star tdate=&enddate=/. The Linux Questions. (2012) "Forum of the linux users", Research on errors in the installation of the module Mannasim in Ns-2. http://www.linuxquestions.org/questions/search.php?searchid=5438840. Gname. 2012 "Forum of discussion on the NS-2", Research on errors in the installation of the module Mannasim in Ns-2. http://search.gmane.org/?query=mannasim+error+installation&author=&group=gmane.netwo rk.simulator.isi&sort=relevance&DEFAULTOP=and&xP=Zmannasim%09Ze rror&xFILTERS=Gnetwork.simulator.isi---A The Mail Archive. (2012) "Discussion list of the ns-users" Research on errors in the installation of modules on the ns-2. http://www.mail-archive.com/search?l=nsusers%40isi.edu&q=error+installation+module. Lustosa, M., Singh S. (2012) "Liowsn Project: An Operating System Remastered for Works with Simulation of Wireless Sensor Networks", In: International Journal of Computer Applications 52(12):32-37, August 2012. Published by Foundation of Computer Science, New York, USA. Greiss, M. (2012) "Tutorial for http://www.isi.edu/nsnam/ns/tutorial/index.html. the network simulator “ns”, Chung, J., Claypool, M. (2012) "NS by Example", Worcester Polytechnic Institute (WPI), http://nile.wpu.edu/NS/purpose. 102 ANAIS ELETRÔNICOS V ENUCOMP Desenvolvimento de Aplicações para Plataforma Google Android Fábio de Jesus Lima Gomes, Manoel Taenan Ferreira de Souza, Rafael Madureira Lins de Araújo Abstract With the evolution of mobile technology, mobile devices have become an important source of transmission and reception of information, creating the need for more robust operating systems and a considerable demand for the development of services and applications. The Google Android platform was created in order to fill this gap. Thus, this mini-course aims disseminate concepts about developing services and applications for the Google Android platform. Also we will describe how mobile applications can consume web services via REST architecture. Resumo Com a evolução da tecnologia móvel, os dispositivos móveis tornaram-se uma importante fonte de transmissão e recepção de informações, gerando a necessidade de sistemas operacionais mais robustos e uma considerável demanda para o desenvolvimento de serviços e aplicações. A plataforma Google Android surgiu para preencher esta lacuna. Dessa forma, este mini-curso pretende disseminar conceitos envolvidos no desenvolvimento de serviços e aplicações para a plataforma Google Android. Também será abordado como aplicações para dispositivos móveis podem consumir serviços web através da arquitetura REST. 6.1. Introdução O Google Android OS, também chamado apenas de Android, é um sistema operacional de código aberto para dispositivos móveis e utiliza uma versão modificada do Sistema Operacional Linux. Permite a desenvolvedores criarem aplicações Java que controlam o dispositivo através de bibliotecas desenvolvidas pela Google. O Android também provê uma infra-estrutura robusta de execução de aplicações Java. Apesar de ser recente (seu lançamento foi em 2008), o Android foi adotado rapidamente por diversos fabricantes de dispositivos móveis e atualmente é a plataforma que mais cresce no mundo. Atualmente, a plataforma Google Android é mantida pela OHA (Open Handset Alliance), um grupo formado por mais de 40 empresas que se uniram para inovar e acelerar o desenvolvimento de aplicações e serviços para dispositivos móveis, trazendo aos consumidores uma experiência mais rica em termos de recursos e menos onerosa financeiramente para o mercado. Pode-se dizer que a plataforma Google Android é a primeira plataforma completa, aberta e livre para dispositivos móveis. O Android SDK é o kit de desenvolvimento que disponibiliza as ferramentas e APIs necessárias para desenvolver aplicações para a plataforma Google Android, utilizando a linguagem Java. 103 ANAIS ELETRÔNICOS V ENUCOMP Este mini-curso visa abordar conceitos envolvidos sobre desenvolvimento de aplicações para a plataforma Google Android, apresentando os principais aspectos do desenvolvimento de aplicações para dispositivos móveis, com enfoque para o desenvolvimento de aplicações que consomem serviços web utilizando a linguagem Java. Pretende-se capacitar os participantes no desenvolvimento de aplicações Java para plataforma Google Android com base no Android SDK e demonstrar a arquitetura REST (Representational State Transfer) de desenvolvimento de aplicações web. O curso procura explorar as funcionalidades dessas tecnologias através do desenvolvimento passo a passo de aplicações-exemplos. 6.2. Arquitetura do Google Android Android é uma pilha de software para dispositivos móveis que inclui sistema operacional, middleware e aplicações-chave. Esta pilha possui 4 níveis (Google, 2011): Figura 6.1. Arquitetura da Plataforma Google Android (Google, 2011) 1. LINUX KERNEL: a base da pilha é o kernel. O Google usou a versão 2.6 do Linux para construir o kernel do Android, que inclui serviços essenciais do sistema, tais como, gerenciamento de memória, gerenciamento de processos, gerenciamento de energia, configurações de segurança, configurações de rede e drivers. O kernel também atua como uma camada de abstração entre o hardware do dispositivo e os outros níveis da pilha de software. 2. RUNTIME ANDROID e LIBRARIES: acima do kernel estão as bibliotecas do Android e o android runtime. Android runtime consiste de um conjunto de bibliotecas que fornece a maioria das funcionalidades disponíveis nas principais bibliotecas da linguagem de programação Java e de uma Máquina Virtual Dalvik (DVM). Uma aplicação Android roda em seu próprio processo, com a sua 104 ANAIS ELETRÔNICOS V ENUCOMP própria instância da máquina virtual Dalvik. Dessa forma, nenhuma aplicação é dependente de outra; se uma aplicação pára, ela não afeta quaisquer outras aplicações executando no dispositivo e isso simplifica o gerenciamento de memória. Dalvik foi escrito de modo que um dispositivo possa executar várias VMs eficientemente. Android possui um conjunto de bibliotecas C/C ++ usado por diversos componentes da plataforma. As principais bibliotecas são listadas abaixo: System C library – uma implementação da biblioteca padrão C (libc), derivada do sistema operacional BSD, alterada para dispositivos embarcados baseados no Linux; Media Libraries – baseada no OpenCORE da PacketVideo; estas bibliotecas suportam reprodução e gravação de muitos formatos populares de áudio, vídeo e imagem, tais como, MPEG4, H.264, MP3, AAC, AMR, JPG, e PNG. Surface Manager – gerencia acesso ao sub-sistema de exibição e compõe as camadas gráficas 2D e 3D para as aplicações. LibWebCore – um moderno engine para um navegador web que alimenta o navegador do Android. SGL – engine de gráficos 2D. 3D libraries – uma implementação baseada nas APIs OpenGL ES 1.0; estas bibliotecas usam aceleração de hardware 3D (quando disponível) ou o software embutido no sistema. FreeType – renderizador de bitmap e fontes vetorizadas. SQLite – engine leve e poderoso de banco de dados relacional para as aplicações. 3. APPLICATION FRAMEWORK: O próximo nível é o framework de aplicação que consiste nos programas que gerenciam as funções básicas do telefone, tais como, alocação de recursos, aplicações de telefone, mudança entre processos ou programas e informações sobre a localização física do aparelho. Os desenvolvedores de aplicações têm acesso total ao framework de aplicação do Android. Isso possibilita tirar vantagem das capacidades de processamento e do suporte de recursos do Android. 4. APPLICATIONS: No topo da pilha estão as aplicações em si. Aqui se encontram as funções básicas do dispositivo, como fazer chamadas telefônicas, acessar o navegador web ou acessar sua lista de contatos. Esta é a camada do usuário comum, que utiliza a interface de usuário. Apenas os programadores do Google, os desenvolvedores de aplicação e os fabricantes de hardware acessam as camadas inferiores da pilha. O Android contém um conjunto de aplicativos, implementados em Java, como um cliente de e-mail, programa para SMS (Short Message Service), calendário, mapas, navegador e gerenciador de contatos. 6.3. Componentes de uma aplicação Android As aplicações Android podem ser divididas em quatro tipos de componentes básicos que são definidos pela própria arquitetura (ABLESON,2007), são eles: 6.3.1. Activities Funcionam como mediadores que definem como as informações serão apresentadas ao usuário, além de controlar o fluxo da aplicação. Elas podem interagir com o usuário e trocar informações com outras activities ou services (MEIER,2009). 105 ANAIS ELETRÔNICOS V ENUCOMP A maioria do código que escreveremos para uma aplicação Android irá executar no contexto de uma activity. Activities normalmente correspondem a telas: cada activity mostra uma tela para o usuário. Quando esta não está em execução, o sistema operacional pode eliminá-la para liberar memória. 6.3.1.1. Ciclo de vida de uma Activity Ao longo de sua criação até o momento de sua eliminação da memória, uma activity atravessará seis estados, podemos referenciar cada estado pelos métodos: OnCreate É chamado quando a activity é criada. Ela é obrigatória e chamada apenas uma vez, deve referenciar a tela que será apresentada ao usuário. OnStart É chamado quando a activity está ficando visível e já tem uma tela definida. OnResume É chamado quando a activity foi parada temporariamente e está retornando à execução. OnPause É chamado quando a activity está sendo tirada do topo da execução. Geralmente é utilizado para salvar o estado da aplicação. OnStop É chamado quando a activity não está mais visível e está em segundo plano. OnDestroy Executa os últimos processamentos antes da activity ser literalmente encerrada. 106 ANAIS ELETRÔNICOS V ENUCOMP Figura 6.2. Ciclo de vida de uma Activity. 6.3.2. Services São programas que executam em segundo plano. Não interagem diretamente com o usuário e podem ficar executando por tempo indefinido. 6.3.3. Broadcast e Intent Receivers São componentes que ficam aguardando a ocorrência de um determinado evento, pode-se entender como evento a inicialização do sistema operacional, uma chamada de voz, a chegada de um SMS, um evento disparado por uma aplicação (MEIER,2009). Intents são elementos chave no Android, porque facilitam a criação de novas aplicações a partir de aplicações já existentes. Precisaremos utilizar Intents para interagir com outras aplicações e serviços que proporcionarão informações necessárias para nossa aplicação. 6.3.4. Content Providers 107 ANAIS ELETRÔNICOS V ENUCOMP São os compartilhadores de conteúdo entre as aplicações, uma aplicação pode requisitar informações de outra, por exemplo, uma aplicação pode receber dados da lista de contatos que é nativa do Android, e com base nesses dados, realizar algum processamento (LECHETA,2010). 6.4. Android SDK e seus pacotes para implementação de aplicações O SDK é um conjunto de ferramentas utilizadas para desenvolver aplicações para a plataforma Android. Possui um emulador para simular o dispositivo móvel e uma API completa para a linguagem Java, com todas as classes necessárias para desenvolver as aplicações (BURNETTE, 2008). Existem atualmente três versões do SDK para atender a maior parte dos desenvolvedores: versão para Windows, Linux e Mac OS. O ambiente de desenvolvimento que nos utilizaremos nos exemplos seguintes é composto, além do JDK e Android SDK, pelo Eclipse IDE versão Galileo e o Android Development Plugin (ADT), um plugin que ajudará na integração da IDE com o emulador. Os componentes do ambiente de desenvolvimento podem ser encontrados nos links a seguir: JDK: http://www.oracle.com/technetwork/java/javase/downloads/index.html Android SDK: http://developer.android.com/sdk/ Eclipse IDE: http://www.eclipse.org/downloads/ ADT: http://developer.android.com/sdk/eclipse-adt.html 6.4.1. Conceitos básicos do Android 6.4.1.1 Criando uma Activity A classe android.app.activity é utilizada para criar uma tela na aplicação. Essa tela é composta de vários elementos visuais, os quais no Android são representados pela classe android.view.View (LECHETA, 2010). A classe android.view.View pode representar algo simples como um botão, um checkbox ou imagem, como também pode representar algo complexo como um gerenciador de layout, a qual pode conter várias views aninhadas para organizar na tela. 108 ANAIS ELETRÔNICOS V ENUCOMP Figura 6.3. Exemplo de uma Activity. O método setContentView(view) é o que faz a ligação entre a activity e a view e recebe como parâmetro a view que será exibida na tela. 6.4.1.2 A classe R A classe R é criada automaticamente pelo ADT e não pode ser alterada manualmente. Nela existem constantes para os recursos do projeto. Cada constante é nomeada com o nome do recurso, que deve ser escrito com letra minúscula e sem espaço, e recebe um valor inteiro. 6.4.1.3 O arquivo AndroidManifest.xml Toda aplicação Android deve ter um arquivo AndroidManifest.xml em seu diretório raiz. Esse arquivo apresenta informações essenciais sobre a aplicação para o sistema operacional, que deve possuir informações do sistema antes que possa executar qualquer solicitação do código do aplicativo (MEDNIEKS,2009). Ele armazena informações como o nome do pacote da aplicação, descreve os componentes da aplicação, determina qual processo da aplicação vai armazenar os componentes, declara de que formas as solicitações devem ter permissões para acessar partes protegidas da API e interagir com outras aplicações. Declara também as permissões que os outros processos serão obrigados a ter, fim de interagir com os componentes da aplicação, enumera classes e perfis e fornece outras informações sobre como a aplicação será executada, declara qual o nível mínimo da API que o aplicativo exige e enumera bibliotecas que estarão relacionadas com a aplicação. 109 ANAIS ELETRÔNICOS V ENUCOMP Figura 6.4. Exemplo de arquivo AndroidManifest.xml 6.4.1.4 Criação de uma interface visual O Android fornece um sofisticado e poderoso modelo, baseado em componentes, para construir sua interface, baseado no esquema de classes fundamentais: android.view.View e android.view.ViewGroup, e inclui também as suas classes filhas chamadas de widgets e layouts respectivamente(LECHETA, 2010). Podemos citar alguns exemplos de widgets como Button, TextView, EditText, ListView, CheckBox, RadioButton, Gallery, Spinner, e outros. Podemos citar, também, exemplos de layouts como LinearLayout, FrameLayout, RelativeLayout entre outros. Para exemplificar a criação da interface visual criaremos uma tela de login, a qual conterá os campos de nome de usuário e senha, e um botão para submetê-los. 110 ANAIS ELETRÔNICOS V ENUCOMP Figura 6.5. Representação gráfica da tela de login. Figura 6.6. Código da tela de login Podemos observar que foram utilizados três tipos de widgets e um layout. Dois TextView que são utilizados para renderizar strings na tela e dois EditText que são caixas para receber texto. Foi utilizado, também, um “Button” para enviar os dados e um LinearLayout para organizá-los na tela. Podemos observar, também, alguns atributos como o “id” que serve como identificador de cada componente, o text que tem o funcionamento semelhante ao value do HTML e o atributo password que esconde os caracteres digitados no nosso EditText. 6.4.1.5 O método findViewById() 111 ANAIS ELETRÔNICOS V ENUCOMP Ao construir uma tela usando um arquivo XML de layout, surge a necessidade de recuperar os objetos definidos no arquivo dentro do código-fonte da aplicação para obter seus valores ou definir atributos (LECHETA, 2010). Podemos recuperar um objeto de visão através do seu identificador único (android:id), passando-o como parâmetro no método findViewById(id). Esse método recebe o id do componente desejado e retorna uma subclasse de android.view.View, como as classes Button, TextView e EditText. Na figura a seguir é mostrado como recuperar a senha inserida pelo usuário através do método findViewById(id) e uma pequena ajuda da classe R. Figura 6.7. Exemplo da utilização do método findViewById() 6.4.2 Intent Uma intent representa uma intenção da aplicação em realizar alguma ação. Ela envia uma mensagem ao sistema operacional chamada de broadcast. Ao receber essa mensagem, o sistema operacional tomará as decisões necessárias (LECHETA, 2010). Uma intent é representada pela classe android.content.Intent e pode ser utilizada para enviar uma mensagem ao sistema operacional, abrir uma nova tela da aplicação, utilizando o método startActivity(intent), solicitar ao sistema operacional que ligue para determinado número de celular, abrir o browser em um determinado endereço da internet, exibir algum endereço, localização ou rota no Google Maps dentre outros. 6.4.2.1 Navegação entre telas com passagem de parâmetros 112 ANAIS ELETRÔNICOS V ENUCOMP Existem dois métodos de se iniciar uma nova tela (activity), através dos métodos startActivity(intent) e startActivityForResult(intent,codigo) que apenas inicia uma nova activity ou inicia uma nova activity e cria um vínculo para ser utilizado ao retornar respectivamente (PEREIRA, 2009). Para que o sistema operacional possa reconhecer nossa nova activity, é necessário adicionar seu endereço no arquivo AndroidManifest.xml. Figura 6.8. Trecho do arquivo AndroidManifest.xml que contém a nova activity. Podemos enviar informações para outras telas através de uma intent. 6.9. Exemplo de passagem de parâmetro e troca de tela através de uma intent Figura Podemos observar na figura 6.9, que é criada uma intent com a activity da tela-alvo, é passado como parâmetro através do método putExtra() o texto contido no EditText referente ao usuário para a próxima tela, e finalmente, a nova activity é iniciada através do método startActivity(intent). 113 ANAIS ELETRÔNICOS V ENUCOMP Figura 6.10. Código da classe SegundaTela. Observando essa classe, vemos que a intent é capturada através do método getIntent() e recebemos o parâmetro do login através do método getStringExtra(string). O conteúdo da tela é apenas um TextView com uma mensagem de boas vindas. 6.4.2.2 Intents Nativas do Android Vimos no exemplo anterior que é possível iniciar uma nova activity através das intents. O Android possui alguns tipos de intents pré-definidas que podemos utilizar para enviar mensagens ao SO, porém, algumas delas necessitam de permissões para executar, tais permissões precisam ser registradas no arquivo AndroidManifest.xml (PEREIRA,2009). Várias intents como a ACTION_VIEW, que serve para iniciar o navegador, a ACTION_CALL, que é utilizada para realizar chamadas, a ACTION_PICK, que serve para visualizar todos os contatos, dentre outras, são utilizadas em aplicações Android. A seguir veremos um exemplo de como chamar o navegador através de uma intent pré-definida no Android. Figura 6.11. Exemplo da iniciação do navegador através de uma Intent. O exemplo demonstra a utilização da intent ACTION_VIEW, mas, para usar essa intent é necessária a permissão INTERNET que deve ter sido registrada previamente. 114 ANAIS ELETRÔNICOS V ENUCOMP Figura 6.12. Inserindo a permissão INTERNET no arquivo AndroidManifest.xml 6.4.3 Intent Filter Podemos utilizar intents para enviar mensagens ao sistema operacional, definindo uma ação que identifique essa intent. Então quando a mensagem for enviada ao sistema operacional ela seja identificada por essa ação, e somente uma activity que esteja mapeada para aquela ação será executada (MEDNIEKS, 2009). Esse tipo de rotina é bem prática quando queremos que mais de um programa esteja configurado para receber uma ação (LECHETA, 2010). Para definir essa ação, basta criar uma Intent usando seu construtor, que recebe uma string que identifica a ação, como, por exemplo: Figura 6.13. Exemplo de uma chamada de ação por uma Intent. Logicamente, alguém tem que responder por essa ação. Para isto, precisamos mapear um Intent Filter no arquivo AndroidManifest.xml, para escutar esse chamado e delegar a execução à uma activity. Figura 6.14. Código fonte da classe SegundaTela. 115 ANAIS ELETRÔNICOS V ENUCOMP Figura 6.15. Exemplo de mapeamento de uma Intent Filter. 6.4.4 BroadcastReceiver A classe BroadcastReceiver é utilizada para responder a determinados eventos enviados por uma intent. Ela sempre é executada em segundo plano durante pouco tempo, normalmente dez segundos. Não deve ter interface gráfica ou interação com o usuário (LECHETA, 2010). É utilizada normalmente para executar algum processamento sem que o usuário perceba, em segundo plano. Assim como uma activity, devemos declará-lo no arquivo AndroidManifest.xml através da tag <receiver>, deve ser declarada, também, um Intent Filter para o broadcast, ou podemos registrá-lo dinâmicamente, utilizando o método registerReceiver(receiver,filtro), que tem como parâmetros uma classe-filha de IntentReceiver e uma instância da classe IntentFilter que possui a configuração da ação e a categoria (LECHETA, 2010). O método para enviar uma mensagem para um broadcast é diferente do utilizado para uma intent que chama uma activity. O método utilizado é o sendBroadcast(intent) que envia uma mensagem para todas as aplicações instaladas no celular. Para implementar um BroadcastReceiver deve-se extender a classe BroadcastReceiver e implementar o método onReceive() que será executado assim que o IntentFilter receber a mensagem. 116 ANAIS ELETRÔNICOS V ENUCOMP Figura 6.16. Utilizando o método sendBroadcast(intent). Figura 6.17. Exemplo de um BroadcastReceiver. Apenas por motivos didáticos foi utilizado a classe Toast para verificar o funcionamento do BroadcastReceiver. Recomenda-se que não tenha nenhum tipo de interação com o usuário. 117 ANAIS ELETRÔNICOS V ENUCOMP Figura 6.18. Exemplo do mapeamento de um BroadcastReceiver. 6.4.5 Notification A classe Notification é utilizada para exibir informações ao usuário sem que este seja interrompido se estiver executando alguma atividade. O usuário pode escolher visualizar as informações neste momento, ou depois (LECHETA, 2010). A notificação é exibida na barra de status do celular para chamar a atenção do usuário. Ao ser visualizada, a intent configurada pode uma abrir uma nova activity ou pode ser usada para iniciar um serviço por exemplo (MEIER, 2009). Um exemplo de notificação é a recepção de uma nova SMS, onde usuário pode decidir visualizála ou não. Para criar uma notificação é necessário capturar um serviço do Android chamado de NOTIFICATION_SERVICE, será necessário, também utilizar a classe PendingIntent que criará uma intent que ficará pendente até o usuário decidir visualizar a notificação: Figura 6.19. Exemplo da criação de uma notificação. 118 ANAIS ELETRÔNICOS V ENUCOMP Podemos observar, que o construtor da classe Notification recebe três parâmetros: o ícone que deverá ser exibido, o título da notificação e a hora que aparecerá do lado da notificação. Observamos, também, que deve-se informar através do método setLatestEventInfo, a mensagem que aparecerá na barra de status assim que a notificação for reconhecida pelo serviço de notificações do android, o título da notificação e a intent que deverá ser chamada quando o usuário visualizar a notificação. Figura 6.20. Classe que será instanciada quando a notificação for visualizada. A figura anterior mostra a classe que será instanciada quando o usuário visualizar a notificação. Capturamos o serviço de notificações do android, e pedimos para que a notificação não apareça mais na barra de status através do método cancel(int) que recebe como parâmetro o id da notificação. 6.4.6 Service Têm as mesmas características dos serviços dos sistemas operacionais de computador. São utilizados quando queremos executar algo por tempo indeterminado em segundo plano e que exija um alto consumo de recursos, memória e CPU (LECHETA, 2010). Geralmente são iniciados por um BroadcastReceiver para executar algum processamento demorado, pois um BroadcasReceiver tem um tempo determinado para executar (PEREIRA, 2009). É interessante que os serviços tenham suas próprias threads para que fiquem independentes do programa hospedeiro. Eles também possuem um ciclo de vida próprio, semelhante ao de uma Activity, mas possuem apenas três estágios: o onCreate, onStart e onDestroy, que desempenham o mesmo papel que o de uma Activity. 119 ANAIS ELETRÔNICOS V ENUCOMP Para iniciar um serviço é necessário criar uma activity que chame o método startService(intent). Para parar um serviço existem duas maneiras: a primeira é chamar o método stopService(intent), a mesma intent utilizada para iniciar o serviço deve ser usada para pará-lo, e a segunda forma é o próprio serviço chamar o método stopSelf(). Figura 6.21. Chamando um serviço. Para implementar um serviço é necessário estender a classe android. 120 ANAIS ELETRÔNICOS V ENUCOMP Figura 6.22. Exemplo de um serviço. Para exemplificar o funcionamento de um serviço, utilizamos esta classe, que quando iniciada, cria uma série de logs. Podemos observar que mesmo fechando a aplicação que iniciou o serviço, ele continua criando logs até chamar o método stopSelf(). 121 ANAIS ELETRÔNICOS V ENUCOMP É necessário mapear o serviço no arquivo AndroidManifest.xml e configurar um IntentFilter com a ação que iremos passar como parâmetro pela nossa Intent. Figura 6.23. Exemplo do mapeamento de um serviço. 6.4.7 AlarmManager São eventos agendados no sistema operacional para serem executados no futuro (LECHETA, 2010). É utilizado quando é necessário executar algo uma vez em determinado horário ou ficar repetindo de tempos em tempos. Quando agendados, ficam ativos no sistema até que sejam explicitamente cancelados, ou o sistema for reiniciado. Para agendar um alarme, primeiro temos que definir uma intent com o BroadcastReceiver que irá responder pelo nosso alarme. Depois temos que capturar o serviço do Android responsável pelo gerenciamento dos alarmes, o AlarmManager. 122 ANAIS ELETRÔNICOS V ENUCOMP Figura 6.24. Agendando um alarme. Figura 6.25. BroadcastReceiver que será chamado pelo nosso alarme. 6.5. Arquitetura REST de desenvolvimento de aplicações Web Vivemos hoje uma febre de Apps – pequenos aplicativos auto-contidos que tem uma única função e comumente são interfaces para sistemas Web. A maioria desses aplicativos é extremamente dependente de dados para serem úteis e esses dados podem vir dos mais variados lugares – por exemplo, a plataforma 123 ANAIS ELETRÔNICOS V ENUCOMP Android disponibiliza ao desenvolvedor uma pequena base dados SQLite onde ele pode criar suas tabelas, armazenar e buscar dados, mas cada vez mais esses dados vêm de serviços web. A Web é uma plataforma “orientada a recursos”. Um Recurso pode ser definido como qualquer coisa que é exposta a Web através de um identificador e que possamos manipular (ler e/ou escrever) (WEBBER; PARASTATIDIS, 2010).. Desde sua formalização REST2 vem sendo um termo e, mais adequadamente, uma arquitetura de software de sistemas Web cada vez mais utilizado, estudado e discutido. Esta arquitetura foi proposta pelo Dr. Roy T. Fielding em 2000 e desde então vem sendo adotada em vários sistemas de grande porte como Twitter, Facebook, Flickr e todas as APIs de serviços públicos do Google como Google Agenda, Google Health, Google Data e Google Maps. Veremos a seguir o que é REST e, em seguida, formas de se trabalhar com REST em Java. 6.5.1 Definição O protocolo HTTP, e consequentemente servidores HTTP, é um protocolo simples e sem muitos recursos. Em sua primeira versão ele apresentou endereçamento e statelessness: duas características de seu projeto que o tornou um avanço perante seus rivais e que ainda o mantém escalável mesmo nos mega-sites de hoje (RICHARDSON; RUBY, 2007). Sistemas com esta arquitetura são sistemas Clientes-Servidores comuns, entretanto suas requisições e respostas são construídas ao redor da transferência da representação de recursos. Recursos são os blocos fundamentais de sistemas baseados na web, ao ponto que a Web é considerada como “orientada a recursos” (WEBBER; PARASTATIDIS, 2010). A abstração chave de informação do REST são os recursos. Qualquer informação que pode ser nomeada pode ser um recurso: documentos, imagens, informações sobre o tempo, uma pessoa, e assim sucessivamente (FIELDING, 2000). Um dos recursos mais comuns da Web são páginas HTML, que em sistemas são comumente a representação de um recurso interno do sistema, por exemplo, uma página de exibição de um vídeo do YouTube é a representação do recurso “vídeo” do sistema. Um mesmo recurso pode ter várias representações diferentes. Utilizando o exemplo do vídeo do YouTube, uma representação é a página HTML onde é mostrado o vídeo, comentários, etc. outra representação é vista quando o vídeo é incorporado em outra página. Nessa representação vemos apenas um player que carrega o vídeo em questão. Outra representação, um pouco menos conhecida, é a representação em XML3 ou mais recentemente JSON4, ambas tecnologias de transição de dados hierárquicos. Devido a essas características REST também requer que as aplicações façam total distinção entre cliente e servidor através da implementação das seguintes características: 2 Representational State Transfer – Transferência de Estado Representacional 3 XML – eXtensible Markup Language – Linguagem de marcação extensível. 4 JavaScript Object Notation – Notação de Objetos JavaScript. 124 ANAIS ELETRÔNICOS V ENUCOMP 1. Cliente-Servidor: Clientes são separados dos Servidores por uma interface uniforme. Essa divisão faz com que o cliente não se preocupe com, por exemplo, armazenamento de dados ao passo que o servidor não se preocupa com interface com o usuário; 2. Stateless (Sem Estado): A comunicação cliente-servidor ocorre sem que nenhum contexto relativo ao cliente seja armazenado no servidor entre as requisições. Cada requisição de cada cliente contém toda informação necessária para atender aquela requisição e a reposta deve conter toda a informação para satisfazer a requisição; 3. Cache: Como é comum na Web, o cliente pode manter um cache das respostas do servidor, portanto é recomendado que as respostas contenham informações sobre se podem e como deve ser feito o cache a fim de evitar que clientes requisitem um mesmo recurso repetidamente. Um bom cache elimina várias interações cliente-servidor desnecessárias o que proporciona escalabilidade e performance; 4. Camadas: Um cliente não pode normalmente distinguir se ele está ou não conectado ao servidor final ou apenas a um intermediário. Um sistema com vários servidores permite o balanceamento de carga, caches compartilhados e ajudam a manter uma boa segurança; 5. Código sob demanda (opcional): Servidores podem ser capazes de estender a funcionalidade de um cliente transferindo lógica para que ele execute. Exemplos disso são componentes compilados como Applets Java ou scripts no lado cliente como JavaScript; 6. Interface uniforme: Todo cliente obedece ao mesmo formato de requisição e recebe o mesmo formato de resposta. A arquitetura REST está fundamentada sob o protocolo HTTP e seus métodos. Clientes que acessam recursos informando sua intenção através do método que executam sob o recurso. A maioria dos sistemas hoje em dia segue a seguinte convenção de métodos HTTP, concebidos para simular operações de CRUD: GET: Leitura; POST: Escrita; PUT: Alteração ou Atualização; DELETE: Remoção. Muitas aplicações novas estão utilizando os princípios REST a fim de obterem um bom nível de escalabilidade. Normalmente essas aplicações disponibilizam a seus usuários uma API dos métodos REST disponíveis, suas entradas e suas saídas. Para compreender melhor, vejamos a API de um sistema referência em tecnologia REST: o Twitter. O Twitter disponibiliza em seu website uma extensa e detalhada documentação da API de seu sistema . uma plataforma de apoio aos desenvolvedores que desejam criar clientes para o Twitter com 5 5 Disponível em http://dev.twitter.com/ - Acesso em 12 outubro 2011 125 ANAIS ELETRÔNICOS V ENUCOMP páginas de ajuda onde são descritos os métodos da API, um guia ao desenvolvedor e ferramentas para ajudá-lo. Chamadas a alguns métodos da API podem ser feitas, para testes, através de um navegador web qualquer. Durante a escrita deste texto, a API do Twitter aceita a seguinte chamada: http://api.twitter.com/1/users/show.xml?screen_name=fat. Para chamar este método da API basta abrir esta URL em qualquer navegador web. Ao abrir esta URL em um navegador, o que é feito é uma chamada a API através do método HTTP GET. Chamadas a qualquer API REST na Web são compostas de 3 partes: 1. A URL correspondente ao método da API http://api.twitter.com/1/users/show 2. Os parâmetros da chamada ao método screen_name = fat 3. O método HTTP utilizado para chamada aquela URL Por padrão, toda transação HTTP dos navegadores atuais utiliza o método GET. A URL é uma chamada ao método “1/users/show” da API do Twitter. Uma particularidade dessa API é a possibilidade de escolha do formato de representação do recurso: XML ou JSON, representado pela “extensão do arquivo” na URL. 6.5.2. REST em Java Em Java chamadas a APIs REST são feitas utilizando chamadas HTTP simples, normalmente com objetos java.net.URL e java.net.HttpURLConnection. Nos exemplos a seguir utilizaremos a API do Twitter como exemplo. A forma mais simples de se executar uma chamada é a seguinte: String apiCall = "<url de chamada a API>"; URL url = new URL(apiCall); HttpURLConnection conn; conn = (HttpURLConnection) url.openConnection(); Ao invocar o método openConnection() uma requisição HTTP GET é feita a URL especificada em apiCall. Após essa chamada, é importante verificar o código de resposta dado pelo 126 ANAIS ELETRÔNICOS V ENUCOMP servidor. Normalmente um código de resposta 200 significa que tudo ocorreu como esperado. Outros códigos de resposta podem ser especificados pela API. if (conn.getResponseCode() == 200) { // Tudo ocorreu como esperado. } Dessa forma podemos tomar alguma providência caso ocorra algum erro, e garantir um bom funcionamento da aplicação. Após a confirmação do sucesso da chamada o próximo passo é ler os dados da resposta do servidor. É necessário um cuidado especial com o tipo de dado esperado pois a resposta da API pode ser uma imagem, ou um documento, ou até mesmo um Stream de dados. Vamos considerar que a resposta a nossa chamada está em formato textual, caso qual podemos utilizar a seguinte técnica para captar o resultado num formato mais cômodo para manipulação: BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuilder str = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { str.append(line); } reader.close(); Após o recebimento da resposta, é uma boa prática sempre fechar a conexão junto ao servidor invocando o método disconnect(): conn.disconnect(); Dessa forma podemos fazer chamadas a quaisquer API REST utilizando Java. 6.5.2.1 Interpretando Respostas Em Java podemos quase sempre considerar um recurso disponibilizado pelo servidor com um Objeto. Comumente recebemos respostas em XML o qual é uma serialização de um objeto que está no servidor. Devido a isso um ponto que requer especial atenção é a interpretação das respostas. APIs REST utilizam representações do estado de um recurso (um Objeto) do sistema. Nestes casos a forma mais comum de representação é textual, segundo um padrão determinado pela API, XML ou JSON. 127 ANAIS ELETRÔNICOS V ENUCOMP Existem várias bibliotecas disponíveis para se trabalhar com os formatos XML e JSON, algumas bastante sofisticadas e simples de usar. Para XML temos, por exemplo, uma biblioteca chamada jDOM6 que interpreta XML e dá ao desenvolvedor uma representação do documento XML na forma de um grafo de objetos com uma interface nativa Java que podem ser facilmente percorridos e manipulados. Para JSON há uma biblioteca chamada Gson7 disponibilizada pelo Google que pode transformar Objetos Java em sua representação JSON e vice-versa: Gson gson = new Gson(); String json = gson.toJson(meuObjeto); MeuObjeto obj = gson.fromJson(json, MeuObjeto.class); Através do uso de bibliotecas auxiliares é possível criar objetos concretos Java a partir de representações textuais dos mesmos. A utilização de JSON é recomendada nestes casos pois grande parte dos sistemas REST atuais são voltados para a interatividade entre sistemas de Websites, os quais são em sua maioria feitos utilizando JavaScript, linguagem-mãe da notação JSON e que dá suporte nativo a interpretação e construção de objetos a partir de sua representação textual e vice-versa. Referências ABLESON, W. Frank; Unlocking Android - A Developer’s Guide. Ed. Manning, 2007. BURNETTE, Ed.Hello, Android:Introducing Google`s Mobile Development Plataform. Pragmatic Bookshelf, 2008. Google Android. Disponível em <http://developer.android.com/guide/basics/what-is-android.html>. Acesso em 12 outubro 2011. LECHETA, Ricardo R. Google Android. São Paulo: Novatec, 2010, 2 ª ed. MEDNIEKS, Zigurd; MEIKE, Blake. Desenvolvimento de Aplicações Android. São Paulo: Novatec, 2009, 1ª ed. MEIER, Reto. Professional Android Application Development. Indianapolis: Wiley Publishing, 2009, 1ª. ed. PEREIRA, Lúcio C. Oliva. Android para Desenvolvedores. São Paulo: Brasport, 2009, 1ª ed. WEBBER, Jim; PARASTATIDIS, Savas; ROBINSON Ian. REST in Practice: Hypermidia and Systems Architecture. O’Reilly Media, 2010. 6 http://www.jdom.org/ - Acesso em 12 outubro 2011 7 http://code.google.com/p/google-gson/ - Acesso em 12 outubro 2011 128 ANAIS ELETRÔNICOS V ENUCOMP RICHARDSON, Leonard; RUBY Sam. RESTful web services. O’Reilly Media, 2007. FIELDING, Roy; Architectural Styles and the Design of Network-based Software Architectures. Dissertação de Doutorado, University of California, 2000. 129 ANAIS ELETRÔNICOS V ENUCOMP Desenvolvimento de um Museu Virtual 3D Utilizando Agentes Inteligentes Í. Moura, F. Mendes Neto, P. Sousa e J. Lima Resumo— Ambientes virtuais de aprendizagem em 3D proporcionam uma experiência educacional com grande riqueza de detalhes, sensação de imersão e interação com diversos recursos educacionais. Um museu virtual, a partir de sua plataforma virtual em 3D e dos recursos que esta plataforma pode oferecer, funciona como uma ferramenta educacional eficiente, pois disponibiliza informação aos seus visitantes de forma simples e de fácil compreensão. No entanto, uma limitação do uso de museus virtuais para a aprendizagem é que estes ambientes não levam em consideração as características individuais e contextuais dos visitantes, limitando sua aprendizagem. Assim, este artigo apresenta um museu virtual em 3D denominado Musert, que tem como diferencial a recomendação personalizada de conteúdo. Para isso, utiliza ontologias juntamente com agentes inteligentes para realizar a recomendação personalizada de conteúdo de forma satisfatória. Palavras-chave— Museu 3D, padrão X3D, browser Xj3D e recomendação personalizada de conteúdo. Abstract— virtual learning environments provide an educational experience with great detail, sense of immersion and interaction with various educational resources. A virtual museum, from its 3D virtual platform and resources that can offer this platform, works as an effective educational tool as it provides information to its visitors in a simple and easy to understand. However, a limitation of the use of virtual museums to learn is that these environments do not take into account the individual and contextual characteristics of visitors, limiting their learning. Thus, this paper presents a 3D virtual museum named Musert, whose differential is personalized content recommendation. It uses ontologies along with intelligent agents to perform personalized content recommendation satisfactorily. Keywords— 3D museum, X3D standard, Xj3D browser and content personalized recommendation. I. INTRODUÇÃO. A grande disponibilidade de computadores, tanto em escolas como nas residências e a facilidade de acesso a internet tem influenciado a utilização de recursos tecnológicos com o propósito de promover educação. Nos últimos anos, devido à facilidade de acesso a esses recursos, museus virtuais tem sido cada vez mais utilizados para fins educacionais. Um Í. Moura, Programa de Pós-Graduação em Cinência da Computação – PPgCC, Universidade do Estado do Rio Grande do Norte e Universidade Federal Rural do Semi-Árido, Mossoró-RN, Brasil, [email protected] F. Mendes Neto, Universidade Federal Rural do Semi-Árido, MossoróRN, Brasil, [email protected] P. Sousa, Universidade Federal Rural do Semi-Árido, Mossoró-RN, Brasil, [email protected] J. Lima, Universidade do Estado do Rio Grande do Norte, Mossoró-RN, Brasil, [email protected] museu virtual é um sistema complexo, com uma gama de possibilidades para os usuários e por isso, tem mostrado ser eficaz em uma série de projetos de ensino e estão sendo usados para facilitar o processo educacional de maneira diferente da convencional. A busca por alternativas para suprir a necessidade de preservação do patrimônio histórico e cultural de uma região são cada vez maiores, visto que este patrimônio é fundamental para a educação e contribui significativamente na definição da identidade cultural. Entretanto, apesar de sua relevância, uma série de artefatos e documentos de valor histórico imensurável têm sido perdidos ao longo do tempo devido à deficiência de recursos e técnicas de preservação que não conseguem evoluir com uma rapidez que evite tais perdas. Isto ocasiona prejuízos imensuráveis, provocados por diversos fatores, como tempo, manuseio e armazenamento inadequados [1]. Uma dessas alternativas é a utilização de técnicas de digitalização em três dimensões (3D) em projetos com grande apelo visual. A digitalização em 3D pode ser utilizada para preservar bens do patrimônio histórico e cultural em seus mínimos detalhes de forma segura, permitindo a construção de réplicas, mesmo quando o original não existe mais, bem como a criação de coleções virtuais acessíveis através da Internet [2]. Diante disso, é cada vez mais comum a utilização de conteúdo em 3D em Ambientes Virtuais de Aprendizagem (AVA), devido ao seu poder de promoção de sensação de imersão e disponibilidade de recursos visuais e educacionais. Mas, devido à riqueza de detalhes que as técnicas de digitalização em 3D proporcionam e da grande carga informacional que ambientes virtuais podem oferecer, em muitas situações os usuários são incapazes de identificar as suas reais necessidades de aquisição de informação na presença de uma grande quantidade de dados que lhes são disponibilizados [3]. Na tentativa de resolver este problema, uma das formas encontradas é o armazenamento do perfil dos usuários e das atividades realizadas nos ambientes virtuais, que pode ser realizado com o uso de ontologias, e atualização dinâmica destas informações, que pode ser feita por agentes inteligentes. A utilização de ontologias como meio de armazenamento de informações se torna interessante pelo fato de permitir uma melhor compreensão dos dados por parte de computadores, oferecendo uma maior precisão dos resultados que são retornados. Além disso, devido à sua forma de representação do conhecimento, a utilização de ontologias permite a comunicação eficiente entre pessoas, agentes de software e sistemas e promove muitas outras vantagens em relação aos mecanismos convencionais de armazenamento de dados [4] [5]. Com o propósito de superar estes desafios, este artigo 130 ANAIS ELETRÔNICOS V ENUCOMP apresenta um AVA na forma de um museu virtual, denominado Musert, que utiliza tecnologias como o padrão X3D, o browser Xj3D e técnicas de modelagem específicas para o desenvolvimento do museu e das peças que o compõe. Além disso, mostra como a utilização de agentes de software e ontologias pode promover a recomendação personalizada de conteúdos do acervo levando em consideração as características do perfil de cada visitante, além de monitorar as atividades do visitante no ambiente virtual. Assim, este trabalho está dividido em seis seções. A Seção 2 mostra os trabalhos relacionados e apresenta uma breve comparação entre estes trabalhos e o proposta descrita neste artigo. A Seção 3 traz conceitos relacionados a ambientes virtuais de aprendizagem e a utilização de técnicas de realidade virtual e aumentada neste tipo de ambiente. A Seção 4 aborda os conceitos e benefícios da utilização de ontologias juntamente com a utilização de agentes inteligentes na recomendação personalizada de conteúdos. A Seção 5 descreve a abordagem proposta neste artigo, que é o desenvolvimento de um museu virtual 3D com recomendação personalizada de conteúdo, e também apresenta as características e as etapas de modelagem e implementação do museu. Já a última seção apresenta as considerações finas e uma breve discussão sobre trabalhos futuros. II. TRABALHOS RELACIONADOS. No trabalho descrito em [6], é relatado o desenvolvimento de um framework para a modularização de um sistema de gerenciamento de conteúdo em museus virtuais no ambiente Second Life [7]. A principal questão é como gerenciar grandes quantidades de informações de um museu e disponibilizar de forma personalizada a informação apropriada para cada visitante deste museu. Com este propósito foi desenvolvido este framework que consiste em dois subsistemas e seis módulos, que são relacionados com o conteúdo a ser apresentado pelo museu e os perfis dos visitantes. As visitas e interação com o museu são o foco do framework, e proporciona a personalização do conteúdo disponibilizado aos usuários durante as visitas pelo museu. Para que o framework desenvolvido obtivesse o sucesso desejado foram adotadas técnicas já existentes e já utilizadas em sistemas baseados na Web e sistemas de recomendação. No entanto, estas técnicas ainda precisam ser devidamente ajustadas, e esta tarefa foi deixada como trabalho futuro. No trabalho apresentado em [8], é descrito um museu virtual imersivo, interativo e itinerante, denominado Museu 3I. Este museu tem como principal característica a possibilidade do visitante escolher quais obras deseja visitar. Outro fator importante é a possibilidade de que qualquer pessoa possa ser um curador do museu, sendo necessário apenas o envio de uma peça, modelada tridimensionalmente e que esteja no formato X3D, para o acervo do museu através do browser Xj3D, que já é nativo da aplicação. Além disto, o museu oferece uma interface gráfica em 3D e paralelamente são apresentados menus no qual o visitante poderá selecionar as funcionalidades que mais lhe interessam. Outro trabalho tem como abordagem principal o desenvolvimento de AVAs que utilizam recursos em 3D e que tem como objetivo principal acrescentar riqueza de detalhes na apresentação de conteúdo aos usuários. Desta forma, o trabalho apresentado por [9] mostra os aspectos de um museu virtual que tem como proposta a preservação de artefatos históricos através da utilização de recursos multimídia. Para isto, utiliza a narração digital do conteúdo apresentado, além de utilizar técnicas de realidade virtual e levar em considerações informações dos usuários e curadores para melhorar visualização das peças. Desta forma, em comparação aos trabalhos descritos acima, este trabalho apresentará nas seções seguintes as características de um museu virtual 3D com recomendação personalizada de conteúdo. Para alcançar este objetivo foram utilizadas diversas tecnologias, dentre elas o padrão X3D, o browser Xj3D e a linguagem de programação Java no módulo referente à visualização em três dimensões do museu. Já no módulo de recomendação personalizada de conteúdo, foram utilizados agentes inteligentes, ontologias e técnicas de recomendação de conteúdo. Com base nisso, a utilização do padrão X3D e do browser Xj3D em relação à utilização de mundos virtuais como Second Life, se deve ao fato da fácil interação entre estas tecnologias juntamente com ontologias e agentes inteligentes para se alcançar o objetivo deste trabalho que é a recomendação personalizada de conteúdo em ambientes virtuais em 3D. Assim, os detalhes, desafios e resultados alcançados são apresentados nas próximas seções. III. AMBIENTES VIRTUAIS DE APRENDIZAGEM. AVAs podem ser conceituados como sistemas de software que facilitam os processos de aprendizado individual ou coletivo, utilizando para isso meios eletrônicos [10]. Eles precisam basicamente da internet e fornecem muitas funções gerenciais, como, por exemplo, gestão do material educacional, além do acompanhamento e avaliação da aprendizagem dos alunos [10]. Desta forma, um ambiente virtual pode ser entendido como um espaço virtual que tem o poder de representar uma metáfora do mundo real [11]. Além disso, as simulações interativas disponibilizadas por ambientes virtuais podem desempenhar um papel significativo na facilitação da aprendizagem através do envolvimento dos alunos, pois fornecem contextos do mundo real [12]. A. AVAs com Recursos de Realidade Virtual e Aumentada A criação de ambientes virtuais 3D, para a representação de AVAs, permite fantasiar sobre infinitas possibilidades para a criação de ambientes que não podem existir fisicamente, ou que, por algum impedimento, não podem disponibilizar todos os recursos desejáveis fisicamente. Com isso, os AVAs 3D permitem o surgimento de muitas ideias inovadoras para a construção de personagens (avatares) e desenho arquitetônico de edifícios com fins educacionais. Além disso, a ausência de restrições físicas no desenvolvimento deste tipo de ambiente é bastante significativa em relação às dificuldades encontradas na construção de ambientes reais. Em AVAs 3D não existem as restrições da vida real, como restrições orçamentárias, testes de solo, limitações dos materiais, requisitos de infraestrutura, som ou até mesmo a gravidade. Assim, um simples procedimento 3D pode, por exemplo, transformar e 131 ANAIS ELETRÔNICOS V ENUCOMP enriquecer cores de paredes envelhecidas e melhorar tristes estilos arquitetônicos [13]. B. Museus Virtuais A popularidade dos ambientes virtuais na web permite o uso deste tipo de sistema para muitas aplicações, dentre elas a educação. Seguindo esta evolução, o desenvolvimento de museus virtuais tem avançado muito nos últimos anos e isso tem facilitado a disponibilização das peças aos visitantes. Além disso, outro fator de destaque é o poder de representatividade que este tipo de ambiente possui, podendo ocorrer através de diferentes tipos de mídias, tais como texto, imagem, áudio, vídeo, e outros tipos de dados mais complexos, como, por exemplo, objetos que usam técnicas de modelagem em 3D [11]. Um museu virtual pode ser caracterizado como uma coleção de artefatos eletrônicos e recursos informativos disponibilizados de forma digital. Uma das vantagens que um museu virtual pode apresentar, em relação aos tradicionais, é a reprodução digital de objetos reais, que ainda existem ou não, oferecendo a possibilidade de observar e interagir com as obras de arte, pertencentes ao museu virtual, que estão localizadas em outro lugar físico [14]. Outra vantagem é a possibilidade de disponibilizar diversos recursos multimídia, como textos, dados, gráficos e recursos de animação, enriquecendo ainda mais uma visita ao ambiente virtual [15]. Um museu virtual, a partir da utilização de tecnologias de realidade virtual juntamente com todos os outros recursos, funciona como uma ferramenta educacional eficiente, pois disponibiliza informação aos usuários de forma simples e de fácil compreensão [16]. Mas, mesmo diante de tantos recursos, pesquisadores concluem que um AVA não pode substituir a interação entre aluno e professor. Um problema que ocorre na maioria dos AVAs é que o conteúdo é passado para todos os alunos da mesma forma e não muda de acordo com as necessidades de cada um [1]. Assim, nos últimos anos, pesquisadores têm tentado modificar este comportamento passivo e têm apresentado uma série de práticas e tecnologias inovadoras para se chegar a uma nova geração de AVAs, onde é possível ter habilidades de interatividade reais e participação no processo de aprendizagem [17] [18]. Desta forma, este trabalho apresenta uma alternativa para que recomendação de conteúdo seja realizada de forma satisfatória. IV. RECOMENDAÇÃO DE CONTEÚDO COM UTILIZAÇÃO DE AGENTES INTELIGENTES E ONTOLOGIAS. Atualmente, há um crescimento exponencial das fontes de dados e este fato torna a aquisição de conhecimento cada vez mais complicada devido à dificuldade que os usuários têm no momento de identificar as suas reais necessidades de informação [3] [19]. A. Agentes Inteligentes Agentes inteligentes podem realizar diversas tarefas em um AVA, tais como monitorar as atividades do usuário, capturar de forma automática suas informações contextuais, como, por exemplo, a preferência por um determinado tipo de conteúdo e frequência de utilização dos recursos, além de realizar a recomendação personalizada de conteúdo educacional [20]. Seguindo esta linha, agentes inteligentes com características pedagógicas (AICPs), além das características de um agente convencional, têm como foco o alcance de objetivos que melhorem o aprendizado dos usuários de AVAs. Devido à esta característica, eles têm sido utilizados como tutores, utilizando modelos cognitivos dos usuários, além de proporcionarem um suporte para a aprendizagem personalizada [21]. Atualmente, há um esforço considerável no emprego de AICPs em ambientes tradicionais de aprendizagem. Isto se deve, principalmente, ao potencial destes agentes para proporcionar um aprendizado com uma maior riqueza de recursos e à exploração das habilidades sociais dos agentes, que podem proporcionar vários cenários de aprendizagem úteis para a colaboração no AVA [22]. Com base nisto, um sistema computacional em que dois ou mais agentes interagem ou trabalham em conjunto de forma a desempenhar determinadas tarefas ou satisfazer um conjunto de objetivos é considerado um sistema multiagente. A investigação científica e a implementação prática de sistemas multiagente está focada na construção de padrões, princípios e modelos que permitam a criação de pequenas ou grandes sociedades de agentes capazes de interagir convenientemente de forma a atingirem os seus objetivos. Estes agentes exibem duas características fundamentais, a primeira é a capacidade de agirem de forma autônoma tomando decisões que levem à satisfação dos seus objetivos, a segunda apresenta a capacidade de interagirem com outros agentes utilizando protocolos de interação social inspirados nos humanos e incluindo pelo menos uma das funcionalidades como coordenação, cooperação, competição e negociação [23]. Cada agente trabalha como um elemento capaz de resolver problemas de forma autônoma e que coopera com outros agentes. Para que um agente possa operar como parte do sistema, é necessária a existência de uma infra-estrutura que permita a comunicação ou interação entre os agentes que compõem o sistema [24]. Juntamente com agentes de software, ontologias podem ser utilizadas com diversas finalidades em AVAs, sendo uma das suas principais aplicações é a personalização, utilizando para isso as características específicas do perfil de cada usuário [25]. B. Ontologias Ontologias têm sido amplamente utilizadas em áreas como Engenharia do Conhecimento, Engenharia de Software, Web Semântica e muitas outras áreas da indústria da informação [25]. Neste trabalho, foi utilizada a OWL (Web Ontology Language), que tem sido pesquisada e desenvolvida pela W3C (World Wide Web Consortium). Esta linguagem é baseada no esquema XML, e é amplamente utilizado para descrever a ontologias. Os desenvolvedores e os pesquisadores criaram três tipos de sub-linguagens para atender diferentes tipos de necessidades. Elas são OWL Lite, OWL DL e OWL Full, e a capacidade de expressão dessas três sub-línguagens é crescente. Neste trabalho está sendo utilizada a sub-linguagem OWL DL (Description Logic), que visa atender aos usuários que necessitam de forte capacidade descritiva para a realização 132 ANAIS ELETRÔNICOS V ENUCOMP de inferência pela ontologia. Esta sub-linguagem contém todos os elementos da OWL [26]. Ao longo das últimas décadas, as organizações têm aplicado grandes esforços na criação e manutenção de modelos de dados para suportar aplicações de negócios. Embora diferentes tipos de modelos de dados existentes hoje como, por exemplo, relacional, objeto-relacional, orientado a objetos e hierárquico, o seu principal princípio permanece o mesmo: um modelo de dados captura ambos os principais elementos de dados em uma área de assunto e as características desses elementos de dados. Sabendo que tanto os modelos de dados como ontologias podem capturar informações semelhantes, o que os difere é a forma como esta informação é codificada e a extensão a qual é expressa. Atualmente, vários métodos têm sido desenvolvidos para gerar ontologias a partir de modelos de dados já existentes. Além disso, existem outras características que as diferem bastante [27]. O objetivo da utilização de ontologias é a modelagem de domínios levando em consideração as relações e conceitos semânticos com uma alta expressividade. Já a utilização de banco de dados é determinada pela modelagem de dados levando em consideração apenas a sua estrutura, ou seja, tabelas. Adicionado a estes fatores, tem-se que as ontologias podem ser utilizadas independentemente de aplicação e em contextos variáveis [28]. Atualmente AVAs armazenam, através da utilização de banco de dados, uma grande quantidade de materiais de ensino. Mas devido a este caráter de armazenamento, estes materiais possuem pouca expressividade semântica. Desta forma, um repositório de materiais didáticos baseado na utilização de ontologias fornece uma partilha global através de um vocabulário dos conceitos no domínio de ensino. Além disso, a utilização de uma grande quantidade de materiais de ensino pode tornar difícil a busca e compartilhamento de conhecimento a partir das demandas de ensino e aprendizagem em AVAs. A utilização de AVAs pode não só apoiar o ensino e a aprendizagem pela web, mas também consegue partilhar de forma efetiva conhecimento e oferece uma gestão personalizada para cada usuário [29]. Desta forma, pode-se destacar que uma das principais características de uma ontologia é a possibilidade de comunicação entre pessoas, agentes e sistemas, já que a ontologia permite o reuso, a representação formal de conceitos e o compartilhamento de conhecimentos [30]. Devido aos avanços da web semântica e a utilização de ontologias, problemas como armazenamento, organização, compartilhamento e reutilização de informações de forma eficiente podem ser superados. O uso de ontologias para descrever objetos de aprendizagem permite que diferentes aplicações educacionais compartilhem e reutilizem os mesmos conteúdos educacionais. Além disso, a capacidade de leitura de uma ontologia pelos computadores aumenta a velocidade de consulta às informações compartilhadas e a precisão dos resultados que são retornados [4]. Com isso, diante das vantagens que as ontologias possuem, neste trabalho foram utilizadas ontologias para armazenar todas as informações dos perfis dos usuários, as descrições das peças a serem recomendadas e as informações que influenciam dinamicamente o comportamento da aplicação. V. MUSERT. Nesta seção são apresentadas as principais características do museu virtual proposto neste artigo. A seguir são apresentados os detalhes referentes à arquitetura da proposta juntamente com as técnicas e tecnologias que juntas, viabilizam a recomendação personalizada de conteúdo. A. Arquitetura do Museu Virtual Este trabalho tem como diferencial a personalização de conteúdo em um museu virtual denominado Musert, tendo como base para isso, ontologias e AICPs. A ideia principal desta abordagem é identificar os requisitos do usuário, ou seja, suas preferências e suas características, e criar um modelo deste usuário. Nesse modelo deve constar o seu conhecimento expresso por meio de um conjunto de termos pertencentes a uma ontologia comum, possibilitando adaptar o conteúdo de forma individual. A arquitetura desta proposta pode ser visualizada na Figura 1, onde são representados os AIPCs, ontologias e a interação dos usuários com o museu. 133 ANAIS ELETRÔNICOS V ENUCOMP Figura 1. Arquitetura do museu virtual e utilização de agentes de software e ontologias na disponibilização personalizada de conteúdo. Como pode ser visto na Figura 1, é possível perceber que inicialmente há a autenticação do visitante junto ao museu. Após esta autenticação, a visualização das descrições das peças é acionada a partir da aproximação do visitante aos sensores das peças, que ficam localizados em locais prédeterminados do museu. Antes disto, no entanto, o visitante precisa realizar um cadastro para que suas características pessoais sejam armazenadas na ontologia de contexto estático, que contém informações como, por exemplo, nome, idade e escolaridade. Além desta ontologia, há a ontologia de contexto dinâmico, que é responsável por armazenar informações como quantidade de visitas, peças visitadas, dentre outras informações de caráter dinâmico que representam a interação do visitante com o ambiente virtual. B. Agentes de Software com Características Pedagógicas Na abordagem proposta foram implementados quatro agentes: Agente de Navegação (BAg - Browsing Agent), Agente Usuário (UAg - User Agent), Agente Recomendador (RAg - Recommender Agent) e o agente DF (Diretory Facilitator). Cada agente tem um objetivo específico, mas se relacionam com os demais para alcançar o objetivo principal, que é a recomendação personalizada de conteúdo. O UAg é responsável por monitorar as atividades dos visitantes e recuperar, das ontologias de contexto estático e dinâmico, as preferências de conteúdo que compõem os perfis dos visitantes e os seus respectivos históricos de peças visitadas. Com base no histórico de visitas, o UAg pode verificar o perfil de outros visitantes que possuem, em seus históricos, preferências similares. Os UAgs também capturam as informações do contexto dinâmico do estudante. Para isso, o UAg realiza sua ação no momento em que o estudante se autentica na aplicação. Em seguida, todas essas informações são cadastradas no agente DF. O RAg tem como propósito detectar a descrição das peças que são adequadas ao perfil do estudante, de acordo com as informações providas pelo Agente DF e as informações acerca do acervo do museu, obtidas da ontologia de descrições das peças. Assim, o RAg encontra, inicialmente, a descrição que seria mais adequada de acordo com perfil do visitante. Em seguida, com base nessas informações, o RAg verifica a quantidade de visitas que o usuário fez àquela peça, juntamente com a quantidade de visitas que ele fez ao museu, e cadastra estas informações no agente DF que serão consultadas pelo BAg. O BAg possui sensores de proximidade presentes por todo o museu, principalmente nas peças. A partir da aproximação de um visitante a uma peça, o sensor percebe a intenção do visitante em obter informações sobre a peça. Após isso, o BAg gerencia a disponibilização do conteúdo juntamente com os outros agentes. O agente DF provê, para outros agentes, o serviço de páginas amarelas. Esse serviço consiste em uma lista de todos os agentes e os respectivos serviços oferecidos por cada agente. Todo agente que desejar publicar seus serviços para outros agentes devem encontrar um agente DF apropriado e requisitar o registro da sua descrição de serviço. Além disso, os agentes podem retirar e modificar o seu próprio registro de um DF e buscar neste, de acordo com um critério de busca, por um registro de serviço fornecido por outro agente. Esse componente é de extrema importância para o Sistema Multiagente (SMA) proposto. Outro fator a ser observado é que o bom desempenho do RAg depende diretamente de um mecanismo eficiente para a representação do conhecimento. Assim, o mecanismo de recomendação desenvolvido considera as informações do perfil do visitante, como, por exemplo, idade, escolaridade, conhecimento sobre o tema do museu, dentre outras, contidas na ontologia de contexto estático, além da quantidade de visitas e as últimas peças visitadas, as quais estão contidas na ontologia de contexto dinâmico. Estas informações são ponderadas de acordo com as descrições disponíveis para cada peça e são utilizadas também para sugerir a ordem da visita e que peças devem ser visitadas, levando em consideração as atividades de usuários com perfis semelhantes. Com base nisto, objetiva-se alcançar uma recomendação eficiente do conteúdo descritivo das peças do museu. B.1 Comunicação, Gerenciamento e Modelagem dos Agentes de Software Com o surgimento do paradigma de Programação Orientada a Agentes, várias metodologias para a modelagem de SMAs foram propostas nos últimos anos. Analisando as vantagens e desvantagens de cada metodologia, a metodologia escolhida para modelagem dos agentes deste trabalho foi a metodologia MAS-CommonKADS+, que consiste em uma extensão à metodologia MAS-CommonKADS [31]. A metodologia MAS-CommonKADS+ mantém muitos dos modelos já propostos na metodologia MAS-CommonKADS, porém realiza algumas modificações e adiciona novos conceitos. Foram adicionados à metodologia os modelos de requisitos, de papéis e de recursos, enquanto que os modelos de organização, de interação e de projeto foram alterados, com o intuito de complementar a especificação dos diagramas da AML [31]. Diante disso, a modelagem dos agentes foi realizada utilizando, além da metodologia MAS-CommonKADS+, a ferramenta StarUML [32] que tem o intuito de promover mecanismos de modelagem de software e uma plataforma que possa substituir ferramentas UML comerciais. Assim, para que se tenha uma visão do comportamento dinâmico do SMA, utilizou-se o Modelo de Interação. O modelo de interação consiste na junção dos modelos de coordenação e de comunicação da MAS-CommonKADS. Nele são descritas, através da AML, todas as interações entre agentes. Cada interação deve obedecer a um protocolo de interação, o qual estabelece como os agentes podem se comunicar. A Figura 2 mostra o modelo de interação entre os agentes que compõem o SMA proposto. 134 ANAIS ELETRÔNICOS V ENUCOMP Figura 2. Modelo de interação entre agentes de software e ontologias. No modelo apresentado na Figura 2, é possível visualizar toda a interação que ocorre entre os agentes e os recurso que são consultados por cada um dos três agentes que compõem o sistema. O diagrama mostra desde o comportamento do UAg no momento em que o visitante se autentica no Musert até a informação chegar ao BAg, que irá buscar pelo conteúdo que mais se adéqua ao perfil do visitante. Também é possível perceber que as informações de contexto estático e dinâmico do estudante precisarão ser armazenadas. Uma forma possível de se armazenar essa informação seria com a utilização de um banco de dados. Porém, o uso de uma ontologia para a representação desse conhecimento mostra-se como uma alternativa mais útil, visto que esse conhecimento pode ser utilizado por outras partes da aplicação e, caso seja necessário modificar o comportamento desta, pode-se criar uma nova forma de representar a ontologia, sem modificar a codificação em si. Assim, é por este motivo que estão sendo utilizadas duas ontologias, sendo uma para representação do contexto estático e outra para representação do contexto dinâmico do estudante. Um dos componentes chaves de um SMA é a comunicação entre os agentes. Na realidade, agentes precisam se comunicar para que sejam capazes de cooperar, colaborar e negociar entre si. De uma forma geral, os agentes interagem entre si através de algumas linguagens de comunicação específicas, chamadas linguagens de comunicação entre agentes. Atualmente, a linguagem de comunicação entre agentes mais difundida e utilizada é a FIPA ACL (Agent Communication Language). As principais características da FIPA ACL são a possibilidade de utilizar linguagens de conteúdos diferentes e o gerenciamento de conversações através de protocolos de interação predefinidos [33]. A FIPA (Foundation for Intelligent Physical Agents) é um conjunto de padrões da IEEE Computer Society cujo objetivo é promover (i) tecnologias baseadas em agentes, (ii) a interoperabilidade desses padrões com outras tecnologias, (iii) a interoperação de agentes heterogêneos e (iv) os serviços que eles podem representar [34]. Outra tecnologia utilizada na comunicação e gerenciamento dos agentes foi o framework JADE (Java Agent Development Framework), que voltado para o desenvolvimento de sistemas multiagente e tem como uma de suas características, a sua total implementação em linguagem Java e fornece um conjunto de recursos técnicos para o desenvolvimento de sistemas multiagente. Além disso, provê uma plataforma de agentes distribuídos, gestão facilitada dos agentes e comunicação entre agentes com troca de mensagens [35]. A principal vantagem em utilizar o JADE reside no fato de que é possível utilizar todos os componentes da especificação FIPA, visto que o JADE atende todas as especificações deste padrão e ainda o estende, sendo que um desses componentes é o agente DF. Outra vantagem dessa plataforma consiste na possibilidade de consultar e utilizar, através do MTS (Message Transport Service), os agentes DFs que estejam sendo executados em outras plataformas de agentes. Assim, o DF utilizado na plataforma JADE deste trabalho pode, por exemplo, ser consultado, por meio da internet, por um agente que esteja sendo executado em outro local, através do protocolo MTP (Message Transport Protocol). Essa característica permite a criação de uma rede de colaboração entre os agentes, mesmo que estejam localizados, por exemplo, em universidades distintas [34]. A Figura 3 mostra, através da interface gráfica do JADE, como ocorre a comunicação entre os agentes descrita através dos modelos textuais dos agentes apresentados anteriormente. 135 ANAIS ELETRÔNICOS V ENUCOMP Figura 3. Comunicação entre agentes através do JADE Sniffer Agent. Como pode ser visto na Figura 3, inicialmente, o RAg solicita por informações de serviço ao agente DF. Em seguida, o DF responde com as informações de serviços disponíveis. Desta forma, a comunicação entre os três agentes e o agente DF é mantida durante toda a utilização do museu virtual. B.2 Características e Utilização do Perfil do Usuário O processo de personalização proposto pelo museu utiliza ontologias para o gerenciamento do perfil do usuário, sugestão de serviços e registro das interações com o intuito de garantir um processo de aprendizagem automática. A função principal que justifica a utilização da estrutura perfil do usuário é captura de todas as informações necessárias para promover a recomendação personalizada de conteúdo pelo museu. Com base nisso, a utilização das ontologias de contexto estático e dinâmico têm participação direta nesta recomendação. A ontologia de contexto estático provê informações mais gerais do usuário como nome, escolaridade, login e senha. Devida à natureza da utilização destes dados, é que esta ontologia tem caráter estático, ou seja, a utilização do museu e a disponibilização de conteúdo, não influenciam estes dados. Já a ontologia de contexto dinâmico, contém dados como quantidade de visitas e peças visitadas, e estes dados mudam no decorrer da utilização do museu. Com base nestas características, a recomendação de conteúdo é realizada levando em consideração as informações contidas nestas duas ontologias, ou seja, a recomendação é realizada levando em consideração o conhecimento prévio do usuário e a sua interação com o museu. Existem basicamente três tipos de recomendação, a recomendação de conteúdo descritivo das peças do museu, recomendação de rotas de visitas e as recomendações para conteúdos externos. A recomendação do conteúdo disponibiliza para o visitante as descrições das peças que, a partir de sua aproximação, ele demonstra interesse. Além disso, o conteúdo recomendado leva em consideração as informações de contexto estático e dinâmico. Já a recomendação de rotas de visitas, sugere rotas com base nas peças que ainda não foram visitadas e rotas que possam maximizar o conteúdo, apresentado informações de forma encadeada. As recomendações externas são realizadas com base nas peças já visitadas e no perfil do usuário como alternativa para complementar o aprendizado sobre determinada peça ou temática envolvida. Diante disto, as informações contidas no perfil do usuário, ou seja, as informações de contexto estático e dinâmico oferecendo uma recomendação de forma direcionada para cada visitante, proporcionando um maior aproveitamento do conteúdo abordado pelo museu. C. Aspectos de Implementação do Museu Virtual Para o desenvolvimento do AVA proposto foram estudadas diversas ferramentas e tecnologias. O objetivo principal era permitir a navegação no ambiente virtual, bem como permitir a interação com seus diversos elementos de forma personalizada, utilizando para isso ontologias e agentes de software. Foram consideradas diversas tecnologias e mundos virtuais, como o Second Life [7] e o OpenSim [36], pela facilidade de tratamento gráfico, navegabilidade e interatividade. Entretanto, além da necessidade de disponibilização do conteúdo na Web, a recomendação de conteúdo de forma personalizada exige a utilização de 136 ANAIS ELETRÔNICOS V ENUCOMP tecnologias específicas e, por esta razão, para este trabalho foram escolhidos o padrão X3D e o browser Xj3D. O X3D (Extensible 3D) é um padrão adotado internacionalmente para 3D na Web. Ele é utilizado para construir ambientes virtuais tridimensionais complexos. Tratase de um padrão aberto que permite descrever em um arquivo formas e comportamentos de um ambiente virtual. As formas são descritas por figuras geométricas e os comportamentos da cena podem ser controlados internamente pelo arquivo X3D e externamente por linguagens de programação ou script. A escolha do X3D como ferramenta de implementação deveu-se a facilidade de utilização com a linguagem de programação Java juntamente com a facilidade de comunicação com o browser Xj3D. Além do fato do X3D oferecer suporte a diversas mídias e formas de interação, inclusive contendo APIs que adicionam diversas funcionalidades às já existentes [37]. Browsers X3D consistem em aplicações capazes de interpretar e processar as cenas, que na verdade são arquivos X3D, apresentando os modelos tridimensionais, animados ou não, e permitindo interações do usuário com os objetos do cenário. A escolha do browser deve ser feita de acordo com as necessidades do AVA a ser construído. Com isso, foi escolhido o browser Xj3D, que se trata de um software de código aberto e que possibilita a integração do ambiente com scripts na linguagem de programação Java, que é a linguagem utilizada na implementação dos agentes e na comunicação destes com as ontologias [8] [38]. C.1 Modelagem Tridimensional Para o desenvolvimento do Musert foram definidas três etapas: a modelagem tridimensional do museu, denominada de etapa de modelagem, a etapa desenvolvimento da interface gráfica a ser utilizada pelo visitante, denominada etapa de interface e, por último, a etapa de implementação dos agentes e ontologias, que são os reais responsáveis pela recomendação personalizada de conteúdo, denominada etapa de inferência de conteúdo. A etapa de modelagem foi concebida como primeira atividade a ser executada. Para isso foi utilizado o Blender, que é um software livre e de código aberto para modelagem 3D, que possui exportador para o formato X3D e que é amplamente utilizado pela comunidade de desenvolvedores de aplicações 3D [1] [16]. O resultado da utilização desta ferramenta pode ser visualizado na Figura 4, onde é apresentada uma peça 3D em fase de modelagem. Figura 4. Peça 3D do Musert em fase de modelagem com utilização da ferramenta Blender. Como o museu será disponibilizado na Internet, a modelagem foi otimizada em um nível que a qualidade gráfica do ambiente virtual não inviabilizasse o uso devido à quantidade de informações trocadas entre o servidor onde a aplicação se encontra e seus visitantes. Deste modo, foram utilizadas texturas otimizadas em relação à quantidade de dados, mas que ao mesmo tempo promovem uma aparência realista ao ambiente. Adicionalmente foram utilizadas técnicas de implementação peculiares do X3D, que evitam a replicação desnecessária de código e que, consequentemente, aumentam a velocidade de transmissão das informações oferecidas pelo ambiente [16]. No projeto da interface foi utilizada a linguagem de programação Java juntamente com o browser Xj3D. O Xj3D é um browser em conformidade com as especificações do X3D, implementando, inclusive, funcionalidades não especificadas pelo padrão, o que facilita o desenvolvimento de ambientes virtuais 3D com interatividade complexa e alta qualidade gráfica. No Musert, o visitante terá acesso ao museu e poderá navegar por todas as salas do museu e visitar as peças contidas em cada sala. A utilização de sensores e o monitoramento dos agentes permite a interação com as peças de forma inteligente, ou seja, fornecendo uma descrição das peças de forma personalizada. O resultado da modelagem do museu pode ser visualizado na Figura 5, onde é mostrada a tela inicial apresentada aos visitantes. Figura 5. Visualização externa do Musert. No Musert, a inferência é provida pela interação entre os agentes e as ontologias com as descrições das peças e com as informações dos visitantes. A ontologia de contexto estático contém informações cadastrais básicas de cada visitante, enquanto que a ontologia de contexto dinâmico contém as informações referentes à interação do visitante com o museu, ou seja, nesta ontologia são armazenadas informações como as peças que já foram visitadas, a quantidade de visitas ao museu, a quantidade de visitas a cada peça e as salas visitadas. Com isto, por meio da inferência realizada pelos agentes nestas duas ontologias, é possível recomendar uma rota de visita e uma descrição mais apropriada de cada peça para cada perfil de usuário. Esta recomendação proporciona uma experiência educacional ímpar e, ao mesmo tempo, eficaz para a necessidade de cada visitante. C.2 Sensores A utilização de sensores foi adotada com o objetivo de permitir a geração de eventos de acordo com a ação do visitante no museu. Um exemplo de sensor utilizado é o ProximitySensor. Este sensor gera eventos ao chegar próximo de um determinado objeto, neste caso, peças do museu e pontos específicos que acionam mecanismos para maximizar a 137 ANAIS ELETRÔNICOS V ENUCOMP experiência educacional do visitante do museu. Esses sensores estão sendo utilizados para que o visitante possa visualizar as informações a respeito das peças de forma interativa. Assim, eles estão sendo empregados para ativar a exibição das descrições das peças, para recomendar salas a serem visitadas e rotas a serem adotadas, além de informações sobre o próprio museu [38]. Na Figura 4 é possível observar a interação do visitante com o museu a partir da aproximação de uma região específica do museu. REFERENCIAS [1] [2] [3] [4] [5] [6] [7] Figura 6. Interação entre visitante e o museu a partir da atuação de agentes de software. [8] Como pode ser visto na Figura 6, além da existência de sensores de proximidade nas peças do museu, existem sensores de proximidade em pontos específicos do museu com o propósito de promoverem uma experiência educacional diferente por meio de sugestão de salas a serem visitadas e a ordem em que elas são visitadas. [9] [10] [11] VI. CONCLUSÕES Neste artigo, foi descrita a implementação de um museu virtual 3D que utilizou tecnologias como a ferramenta de modelagem Blender para a modelagem do museu e das peças que o compõe, além do padrão X3D e do browser Xj3D para disponibilizar o conteúdo do museu na web. Além disso, também utilizou a linguagem de programação Java, agentes inteligentes e ontologias para a realização da recomendação inteligente de conteúdos do acervo. Desta forma, a solução proposta objetiva tornar a aprendizagem, a partir das visitas ao museu, adequada às necessidades de cada visitante. Desta forma, como trabalhos futuros, pretende-se submeter o ambiente desenvolvido à avaliação de um museólogo, para que a aplicação tenha uma melhor abordagem no que tange o aspecto do conteúdo descritivo das peças recomendadas. Temse também como proposta futura a integração do sistema com redes sociais ou outros mecanismos de identificação para ajudar no levantamento do perfil do usuário e ajudar a melhorar a formar como os dados de cada usuário são obtidos, evitando o preenchimento de formulários antes de utilizar o ambiente. Além disso, objetiva-se mensurar o quanto a abordagem é eficaz na realização da recomendação sob a ótica educacional, tendo em vista que testes preliminares mostram que o ambiente realiza a recomendação de forma satisfatória obedecendo todos os critérios apresentados anteriormente. Com base nisso, objetiva-se realizar um estudo de caso com uma turma de um curso de ensino a distância para verificar o impacto da abordagem proposta na adequação do conteúdo. [12] [13] [14] [15] [16] [17] [18] [19] [20] 138 Í. B. G. Moura, J. D. Lima, P. S. M. Sousa, e F. M. Medes Neto, “Musert: Um Museu Virtual em 3D com Recomendação Personalizada de Conteúdo”, In Anais do XXIII Simpósio Brasileiro de Informática na Educação, SBIE, Rio de Janeiro, RJ, 2012. I. J. A. Soares, L. Silva, O. R. P. Bellon e A. Vrubel, “3D Virtual Museum for Digital TV”, In WebMedia ’09, Fortaleza, CE, 2009. M. A. Zeb and M. Fasli, “Adaptive user profiling for devianting user interests” In: 3rd Computer Science and Electronic Engineering Conference (CEEC), p. 65-70, 2011. P. Q. Dung and A. M. Florea, “An Architecture and a Domain Ontology for Personalized Multi-agent e-Learning Systems”, In Third International Conference on Knowledge and Systems Engineering (KSE), p. 181-185, 2011. C. S. Bhatia and S. Jain, “Semantic Web Mining: Using Ontology Learning and Grammatical Rule Inference Technique”, In: International Conference on Process Automation, Control and Computing (PACC), p. 1-6., 2011. K. Sookhanaphibarn and R. Thawonmas, “A Conten Management System for User-Driven Museums in Second Life”, In: International Conference on CyberWords (CW), p. 185-189., 2009. C. J. Liu and G. Wang, “Using Second Life in ESL/EFL Teaching and Reacher-Training in the Web2.0 Environment”, In IEEE Symposium on Eletrical & Eletronics Engineering (EEESYM), p. 717-720, 2012. E. L. Falcão e L. S. Machado, “Museu 3I: Publicação e Visitação Online de Acervos Tridimensionais”, In Anais do VII Workshop de Realidade Virtual e Aumentada (WRVA),São Paulo, SP, 2010. S. Rivic e A. Sadak, “Multimedia Techniques in Virtual Museum Applications in Bosnia and Herzegovina”, In International Conference on Systems, Signals and Image Processing (IWSSIP), p. 1-4, 2011. M. H. Bahiraey, “Quality of collaborative and individual learning in virtual learning environments”, In Second International Conference on E-Learning and E-Teaching (ICELET), p. 33-39, 2010. R. R. Dantas, J. C. P. Melo, J. Lessa, C. Schneider, H. Teodósio e L. M. G. Gonçalves, “A Path Editor for Virtual Museum Guides”, In IEEE International Conference on Virtual Environments Human-Computer Interfaces and Measurement Systems (VECIMS), 2010. Z. O. Kostic, A. D. Jevremovic, D. S. Markovic e R. M Popovic, “Virtual Educational System and Communication” In 10th International Conference on Telecommunicatio in Modern Satellite Cabble and Broadcasting Servies (TELSIKS), p. 373-376, 2011. N. Saleeb e G. Dafoulas, “Pedagogical immigration to 3D virtual worlds: A critical review of underlying themes and their concepts”, In International Conference on Information Society (i-Society), p. 401-409, 2010 G. Guidi, R. Trocchianesi, G. Pils, G. Morlando, e A. Seassaro, “A Virtual Museum for Design: New forms of interactive fruition”, In 16th International Conference on Virtual Systems and Multimedia (VSMM), p. 242-249, 2010. Y. Chengwei, Y. Chengle, L. Shijun, M. Xiangxu e W. Rui, “An Approach of Personalized 3D Scene Customization Based on Multimedia Resources” In International Conference on Multimedia and Signal Processing (CMSP), p. 131-135, 2011. Í. B. G. Moura, J. D Lima, F. M. Mendes Neto, P. S. M. Sousa, “MUSERT: Um Museu Virtual em 3D para a Preservação do Patrimônio Histórico e Cultural do Semiárido Brasileiro”, In Anais da V Escola Regional de Computação dos Estados do Ceará, Maranhão e Piauí (ERCEMAPI), 2012. M. H. Bahiraey, “Quality of collaborative and individual learning in virtual learning environments”, In Second International Conference on E-Learning and E-Teaching (ICELET), p. 33-39, 2010. J. Z. Jun e W. Z. Bin, “Ideas transforming in the public arts education of virtual museum”, In 6th International Conference on Computer Science & Education (ICCSE), p. 649-653, 2011. T. T. Primo, R. M. Vicari, J. M. C. Silva, “Rumo ao Uso de Metadados Educacionais em Sistemas de Recomendação”, In Anais do XXI Simpósio Brasileiro de Informática na Educação, SBIE, João Pessoa, PB, 2010. L. C. N. Silva, F. M. Mendes Neto e L. Jácome Júnior, “MobiLE: Um ambiente Multiagente de Aprendizagem Móvel para Apoiar a Recomendação Sensível ao Contexto de Objetos de Aprendizagem”, ANAIS ELETRÔNICOS V ENUCOMP [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] Artigo Completo, In Anais do XXII Simpósio Brasileiro de Informática na Educação, SBIE, Aracaju, SE, 2011. L. Qu, N.Wang e W. L. Johnson, “Choosing When to Interact with Learners”, In Proceedings of the 9th international Conference on Intelligent User Interfaces, 2004. E. Soliman e C. Guetl,“Intelligent Pedagogical Agents in immersive virtual learning environments: A review”, In Proceedings of the 33rd International Convention, MIPRO, p. 827-832, 2010. V. R. Lesser, “Cooperative multiagent systems: a personal view of the state of the art”, In IEEE Transactions on Knowledge and Data Engineering, v. 11, n. 1, p. 133-142, 1999. L. P. Reis, “Coordenação em Sistemas Multi-Agente: Aplicações na Gestão Universitária e Futebol Robótico”, In PhD Thesis, FEUP, Julho 2003. H. Zhao, S. Zhang e J. Zhao, “Research of Using Protégé to Build Ontology”, In 11th International Conference on Computer and Information Science (ICIS), p 697-700, 2012. N. Prat, J. Akoka e I. Comyn-Wattiau, “Transforming multidimensional models into OWL-DL ontologies”, In 6th International Conference on Research Challenges in Information Science (RCIS), p 1-12, 2012. K. M. Albarrak, E. H. Sibley, “A Survey of Methods that Transform Data Models into Ontology Models”, In International Conference on Information Reuse and Integration (IRI), p 58-65, 2011. “Ontological Foundations for Structural Conceptual Models”, In PhD Thesis, Centre for Telematics and Information Technology CTIT, Enschede, The Netherlands, 2005. R. Zhao e C. Zhang, “An Ontology–Based Knowledge Management Approach for E-Learning System”, In International Conference on Management and Service Science (MASS ‘09), p 1-4, 2009. W.Min, C.Wei, e C. Lei, “Research of ontology-based adaptive learning system”, In International Symposium on Computational Intelligence and Design, ISCID ’08, v. 2 , p. 366 –370., 2008. M. J. D. O. MORAIS II, “MAS-CommonKADS+: Uma Extensão à Metodologia Mas-CommonKADS para Suporte ao Processo Detalhado de Sitemas Multiagentes Racionais”,Dissertação de Mestrado. Universidade Estadual do Ceará - UECE. Fortaleza, CE. 2010. STARUML. StarUML - The Open Source UML/MDA Platform. Página Sourcefourge do STARUML, 2011. Disponivel em: <http://staruml.sourceforge.net/en/>. Acesso em: outubro de 2012. L. C. M. Silva, “MobiLE – Um Ambiente Multiagente de Aprendizagem Móvel para Apoiar a Recomendação Ubíqua de Objetos de Aprendizagem.”,Dissertação de Mestrado. Universidade do Estadual do Rio Grande do Norte – UERN e Universidade Federal Rural do SemiÁrido - UFERSA. Mossoró, RN. 2012. FIPA. Welcome to the Foundation for Intelligent Physical Agents. Site Oficial do Padrão FIPA, 2011. Disponivel em: <http://www.fipa.org/>. Acesso em: outubro de 2012. JADE, “Java development framework: an open-source platform for peerto-peer agent based applications”. Online: http://jade.tilab.com/. Acesso em: setembro/2012. W. Ridgewell, V. Kumar, O. Lin and Kinshuk, “OpenSim Virtual as Platform for Enhanced Learning Concepts”, In IEEE International Conference on Advanced Technologies (ICALT), p.623-624, 2011. D. P. S. Medeiros e L.S. Machado, “X3D e Integração Multimídia para Representação de um Sítio Arqueológico”, In Anais do VII Workshop de Realidade Virtual e Aumentada (WRVA),São Paulo, SP, 2010. Í. B. G. Moura, F. M. Medes Neto, P. S. M. Sousa e J. D. Lima, “Utilização do Padrão X3D no Desenvolvimento de um Museu Virtual Imersivo com Recomendação Personalizada de Conteúdo Através do Uso de Agentes Inteligentes e Ontologias”, In Anais do IV Workshop de Realidade Virtual e Aumentada (WRVA), Paranvaí, PR, 2012. Francisco Milton Mendes Neto possui graduação em Ciência da Computação pela Universidade Estadual do Ceará (1997), mestrado em Informática pela Universidade Federal de Campina Grande (2000) e doutorado em Engenharia pósgraduação em Ciência da Computação da Universidade Federal Rural do Semi-Árido (UFERSA). Tem experiência na área de Ciência da Computação, com ênfase em Engenharia de Software, atuando principalmente nos seguintes temas: ensino a distância, aprendizagem colaborativa com suporte de computador, engenharia do conhecimento, gestão do conhecimento e sistemas multiagentes. Paulo Sérgio Maia de Sousa é Bacharelando em Ciência da Computação pela Universidade Federal Rural do Semi-Árido (UFERSA). Atualmente faz parte do Núcleo Tecnológico de Engenharia de Software (NTES). Atua principalmente na área de Engenharia de Software, principalmente nos seguintes temas: ensino a distância, gestão do conhecimento e sistemas multiagentes. João de Deus Lima possui graduação em Licenciatura em Matemática pela Universidade do Estado do Rio Grande do Norte (1983), mestrado em Matemática pela Universidade Federal do Ceará (1996) e doutorado em Engenharia Elétrica pela Universidade Estadual de Campinas (2002). Atualmente é professor adjunto 4 da Universidade do Estado do Rio Grande do Norte, lotado no Departamento de Matemática e Estatística e do quadro permanente de professores do mestrado em Ciência da Computação UERN-UFERSA. A área de interesses é Sistemas de Telecomunicações, com enfases em modulações, códigos corretores de erros, canais e processamento digital de imagens. Para tanto utiliza ferramentas matemáticas como a Topologia Algébrica, Geometria Riemanniana e Teoria dos Grafos. Íthalo Bruno Grigório de Moura é Tecnólogo em Análise Desenvolvimento de Sistemas pelo Instituto Federal do Piauí (IFPI), Teresina (2010). Atualmente faz parte do Núcleo Tecnológico de Engenharia de Software (NTES) na Universidade Federal Rural do Semi-Árido (UFERSA). Ingressou em 2011 no Programa de Pós-Graduação em Ciência da Computação ofertado pela Universidade do Estado do Rio Grande do Norte - UERN e pela UFERSA. 139 ANAIS ELETRÔNICOS V ENUCOMP Transmission of Images Captured in Real Time through Wireless Network using the Python Language: A possible way of Wireless Transmission M. Z. B. Araujo and F. M. A. Araujo Abstract– 1In order to send images over the network from one computer to another in a Telerobotic system more adequately, it has developed a way to transmit images over the network adapting it to the programming language chosen in this system. The work, therefore, is to capture a frame of a camera through a library for games, turn it into text and send over the network to another computer using socket programming, in the target are made of inverted steps, gets converted to text in image again to use on any purpose. From the experimental research, several tests were performed to reach the synthesis scheme presented in this paper. Keywords—Wireless Networks, Python, Images, Wireless Transmission. I. INTRODUÇÃO N os dias atuais, o vídeo é considerado parte fundamental na interação com o usuário quando se fala em sistemas web, monitoração ou em projetos de Telerobótica. Assim que a Internet surgiu, no final da década de 80, sua velocidade era muito limitada, onde a conexão entre Brasil e Estados Unidos oferecia uma banda que suportava, no máximo, 9 kbps [8]. Acreditava-se que a transmissão de imagens congestionaria toda a rede entre os dois países. Esse é o motivo pelo qual quando a interligação mundial das redes surgiu, a transmissão de dados era limitada, afetando diretamente o layout dos sites da época, onde estes eram compostos somente por texto [9], mídia mais leve de ser transmitida. Um site composto somente por texto, implica em um visual extremamente rústico, tornando pouco o interesse dos usuários ao navegar e permanecerem na página acessada. Diante deste impasse, viu-se que realmente era crucial o envio de mídias mais pesadas, como imagens com resolução cada vez mais altas, ou até vídeos a longas distâncias. Esse problema foi resolvido com o avanço da tecnologia, que passou a disponibilizar bandas de transmissão de dados mais largas, integradas a linguagens de programação que passaram a disponibilizar bibliotecas específicas, também facilitadoras da interatividade com o usuário. Em suma, capturar uma imagem para depois convertê-la em texto foi uma das soluções encontradas para a transmissão de imagens através da rede, diminuindo até, o nível de congestionamento no tráfego dos dados. Com base nisto, objetiva-se enviar imagens entre dispositivos pela rede usando Python. Para isto será apresentada a seguinte metodologia: pode-se usar a linguagem Python por ter um fácil entendimento [10] usando sua biblioteca para jogos Pygame, pois dá suporte a captura de frames da webcam, além de ter algumas funções para manipulação de imagens, trabalhando junto a biblioteca socket, que se responsabiliza pela comunicação entre dispositivos através da rede, já inclusa na biblioteca padrão do Python. A partir desta metodologia, os resultados esperados irão depender diretamente da taxa de transferência do equipamento utilizado no meio de transmissão, seja wireless ou não. Neste artigo serão abordados a metodologia usada, exemplo e configuração de um código em Python, testes realizados com um programa mais elaborado desenvolvido usando esta mesma metodologia, seguidos dos resultados obtidos. II. METODOLOGIA Python, em um propósito geral, é uma linguagem de programação de computador de código aberto. É otimizada para qualidade de software, a produtividade do desenvolvedor, a portabilidade do programa e integração de componentes [4]. O Python, ao ser instalado, leva consigo sua biblioteca padrão, centenas de módulos que contêm ferramentas que permitem ao programador uma interação com o sistema operacional, interpretador e internet [1]. Seu conteúdo extenso, escrito na linguagem C, permite um melhor uso de funcionalidades do sistema, bem como dispositivos de entrada e saída de dados. Partindo do ponto em que, funciona em qualquer plataforma que tenha compilador de C, assim que o Python é instalado, dá suporte para a programação de socket. O socket é um meio para programação de redes com funcionamento baseado na tecnologia Cliente/Servidor, possibilitando a comunicação entre dispositivos conectados a rede como: celulares, tablets, computadores entre outros. Nesse sentido, percebe-se que o Python, desenvolvido basicamente em C/C++, resulta em uma boa manipulação de dispositivos de entrada/saída como, por exemplo, uma M. Z. B. Araujo, Universidade Estadual do Piauí (UESPI), Parnaíba, Piauí, webcam. Pygame é uma biblioteca para desenvolvimento de Brasil, [email protected] jogos usando Python que dá suporte também ao uso da F. M. A. Araujo, Instituto Federal de Educação, Ciência e Tecnologia do webcam, bem como, algumas funções para manipulação de Piauí (IFPI), Parnaíba, Piauí, Brasil, [email protected] 140 ANAIS ELETRÔNICOS V ENUCOMP imagens, sendo possível, até mesmo, transformar uma imagem em texto ou vice versa. Usa-se uma função tostring dessa biblioteca, capaz de converter uma imagem em string. Já a função fromstring é usada para realizar a tarefa inversa, transformando o texto em imagem novamente. Em seguida, o socket é criado e configurado com mesmo endereço IP, mais precisamente o IP do servidor, em dois ou mais dispositivos, porta de comunicação e protocolo para que a conexão seja estabelecida, captura-se um frame da câmera e transformando-o em texto, sendo assim, possível enviá-lo entre os hosts da rede com a linguagem Python. A Figura 1 mostra o trecho final de uma imagem convertida em texto, composta por cabeçalho onde possui informações sobre a imagem como largura, altura, entre outros, seguido por uma sequência de caracteres que substitui os pixels. Cada pixel é composto por três cores: vermelho, verde e azul dependente do padrão de cores usado na configuração da webcam. Cada cor recebe um valor que está compreendido entre 0 e 255, representando sua intensidade que quando misturadas, pode compor imagens de 24 bits de cores. Figura 2. Arquitetura do Sistema. A Figura 2 ilustra a funcionalidade do programa desenvolvido neste trabalho, que consiste em transferir imagens a partir de um computador. Esse esquema mostra o caminho percorrido pelos dados transferidos, que inicia-se com a captura da imagem através da função get_image da biblioteca Pygame, onde retorna um objeto Surface, que é convertido em texto pela mesma biblioteca. Com a classe image são passados como parâmetros um objeto Surface e um padrão de cores RGB, usado neste estudo. Com a classe socket, que dá suporte a comunicação entre hosts usando texto e/ou buffer, a imagem transformada em texto pode ser enviada pela rede, tendo em vista que, ao ser criado, o socket precisa de um endereço IP, porta de comunicação, especificação do protocolo, entre outros. A próxima seção do artigo, serão abordados a configuração do socket, bem como um exemplo simples de como se pode enviar uma imagem através da rede usando a metodologia apresentada. III. CONFIGURAÇÃO Figura 1. Trecho final da string retornada pela função tostring, seguida de seu tamanho mostrado pela função len. Câmera Objetivo Pygame Pygame Figura 3. Programa em Python que captura um frame de uma Webcam e o envia convertido em texto através de socket. socket socket Ubuntu Ubuntu Rede Rede A Figura 3 exemplifica um código escrito em Python que representa o Servidor. A partir da linha 9 até a linha 11, destacadas em azul, é configurada a webcam, onde são especificadas resolução e padrão de cores a ser usado. Da linha 12 até a linha 17, no interior do retângulo verde, ilustra o momento em que se instancia o objeto socket, são explicitados a porta de comunicação, endereço de IP, protocolo de comunicação e a quantidade de hosts que o servidor deve ouvir. Para que a conexão seja estabelecida, devem-se criar os sockets de maneira sincronizada, com a mesma porta de 141 ANAIS ELETRÔNICOS V ENUCOMP comunicação e mesmo endereço de IP, mais especificamente o IP do servidor. Podem ser usadas no socket as faixas IPV4 e IPV6, protocolos FTP e UDP paralelamente a porta de comunicação que pode assumir valores de 0 a 65535, porém alguns serviços já possuem portas específicas como requisições HTTP através da porta 80 ou SSH pela porta 22, mas, portas com valores inferiores a 1024 necessitam da permissão de super usuário, caso contrário, o sistema operacional interrompe o processo de criação do socket. Um ponto muito importante e decisivo para o funcionamento satisfatório de um sistema de vídeo é a velocidade do meio em que é feita a transmissão dos dados, uma vez que o desempenho está diretamente ligado à qualidade das imagens capturadas, resolução, quantidade de frames por segundo (fps) e o plugin usado na renderização e compressão do arquivo. A largura de banda máxima é de 344 Mbps, o que corresponde a imagens estereoscópicas com 70 quadros por segundo e uma resolução de 640x480 pixels por imagem [2]. Esta metodologia teve como norte os testes que buscavam uma análise comportamental do programa desenvolvido. Tais testes serão explanados mais detalhadamente no tópico que se segue. Logo abaixo, são exemplificados dois testes de desempenho da rede ao se transmitir imagens pela rede usando uma aplicação desenvolvida. Os equipamentos utilizados foram um computador Desktop Intel® Core 2 Duo 2.8Ghz com 2Gb de memória (Cliente), conectado a um roteador Wireless TP-LINK de 150 Mbps por um cabo de ethernet, conectado a um netbook CCE Intel® Atom® 1.33Ghz com 2Gb de memória (Servidor), ambos os computadores com o Ubuntu 11.04 como sistema operacional. IV. TESTES E RESULTADOS Figura 4. Network History demonstra um grafíco do Cliente com a velocidade constante necessária para transmissão de imagens com resolução de 320x240 pixels. TABELA I TABELA DE VELOCIDADE DA CONEXÃO POR RESOLUÇÃO DE VÍDEO Tipos de sinais TV vídeo (PAL/NTSC) TV vídeo compactado (Qualidade de DVD) Vídeo stereo (Não compactado) Vídeo stereo compactado (Qualidade de DVD) Tamanho do quadro Frames por segundo 720x480 25 – 30 fps 720x480 25 – 30 fps 5,2 Mbps 640x480 30 – 70 fps 147 – 344 Mbps 640x480 30 – 70 fps 6,3 – 14,6 Mbps Na Figura 4, em Network History do gerenciador do sistema do Ubuntu, é exibido um gráfico que representa uma velocidade estável em 1,5 Mbps na transmissão de imagens com resolução de 320x240 pixels usando a aplicação que originou este artigo. A estabilidade da velocidade da rede implica em um desempenho satisfatório, com uma taxa de fps próxima ao ideal, que quanto maior esta taxa, maior será a sensação de movimento que uma sequência de imagens pode propor e maior a quantidade de dados que serão enviados. Largura de banda 165,9 Mbps A Tabela 1 ilustra um comparativo entre qualidade das imagens associada a velocidades da conexão no meio de transmissão. Conforme os testes feitos, comprova-se que a taxa de bits necessária para a transmissão de vídeo, utilizandose um codec de compressão DivX®, com a resolução de 320x240 pixels, mantém-se por volta de 1,5 Mbps, onde a conversão de cada imagem retorna um texto com tamanho exato de 230400 bytes. Contudo, se a resolução for estendida para 640x480 pixels, o tamanho do arquivo é de 921600 bytes, entretanto, para transmitir o vídeo com um desempenho satisfatório, é necessário uma rede que proporcione no mínimo 10 Mbps de velocidade em transferência de dados. Figura 5. Network History demonstra um grafíco do Cliente com a velocidade irregular, resultando em perda de desempenho do vídeo. 142 ANAIS ELETRÔNICOS V ENUCOMP [6] Instabilidade na rede pode ocasionar em perda significativa de desempenho na hora de se transmitir grandes volumes de dados. A Figura 5 mostra, em Network History, irregularidades no gráfico de velocidade da rede. Este teste foi realizado usando as mesmas características do teste anterior: aplicação, resolução da imagem e equipamento de transmissão sem fio. Esta instabilidade foi propositalmente provocada ao se remover a antena do roteador wireless, resultando na perda do sinal, acarretando na demora na transmissão, e por fim, na redução da qualidade do vídeo, com a quantidade de fps podendo girar em torno de menos de 1 frame a cada segundo. V. CONCLUSÕES Convém ressaltar a funcionalidade dos sockets para transmissão de dados e a simultaneidade entre os dispositivos onde este é executado. Um host ao receber uma string através do socket, transfere as informações para o módulo Pygame, que por sua vez, converte o texto em imagem novamente, possibilitando, assim, que haja interação entre usuários de computadores remotos. Mas, observou-se um problema de incompatibilidade entre a biblioteca Pygame e o sistema operacional Windows no momento em que se tenta usar a webcam [7]. Baseado neste pressuposto, a versão Servidor da metodologia apresentada deve executar incondicionalmente no sistema Ubuntu, mesmo porque o Windows passa por uma transição de versão e não se tem resultados de execução do Python em sua versão nova. No desenvolvimento deste artigo, encontrou-se dificuldade em obter-se embasamento teórico de artigos científicos com trabalhos de mesmo princípio de funcionamento ou que envolvesse a integração de Python, Pygame e Opencv com objetivos similares. Conclui-se então, que esta metodologia foi estabelecida inicialmente com o objetivo de satisfazer uma necessidade encontrada em um sistema Telerobótico, mas adaptações tornam esta maneira de envio de imagens cabível a qualquer situação que seja necessário monitoramento através de câmeras com uso de sinais Wireless disponíveis, desde exploração de outros planetas, monitoramento urbano, residencial, industrial, militar até sistemas de TeleCirurgia ou arquiteturas onde cliente e servidor podem estar a distâncias continentais tendo redução de custo com equipamentos, cabos, instalações no interior de paredes, entre outros, e até aproveitamento de serviços disponíveis como a própria Internet. A. Anderson, R. Benedetti, Head First Networking. O’Reilly, Sebastopol, 2009. [7] http://www.pygame.org/news.html. [8] http://www.olhardigital.com.br/produtos/central_de_videos/webcompleta-20-anos-veja-toda-a-historia. [9] http://info.cern.ch/. [10] T. A. Budd, Exploring Python. McGraw-Hill, Maidenhead, 2009. Marlo Zeni Braga de Araujo é graduando em Bacharelado em Ciências da Computação pela Universidade Estadual do Piauí (UESPI), Parnaíba, Piauí, Brasil. Suas pesquisas se concentram na área da Telerobótica, Computação, Eletrônica e almeja mestrado e doutorado nessas áreas. Francisco Marcelino Almeida de Araújo é Bacharel em Engenharia Elétrica com ênfase em Eletrônica pela Universidade Estadual do Piauí (UESPI) em Teresina, Piauí, Brasil. Mestrando em Biotecnologia pela Universidade Federal do Piauí em Parnaíba, Piauí, Brasil, trabalhando com nanocompósitos para nanofilmes aplicados à Engenharia Biomédica e materiais anticorrosivos. Suas principais áreas de pesquisas são: Processamento Digital de Imagens, Hardware Livre, Robótica, Tecnologias Assistivas à Deficientes e Portadores de Necessidades Especiais, Nanotecnologia, Engenharia Biomédica e Engenharia de Materiais. REFERÊNCIAS [1] [2] [3] [4] [5] D. Hellmann, The Python Standard Library by Example. Pearson Education, Boston, 2011. R. Aracil, M. Buss, S. Cobos, M. Ferre, S. Hirche, et al, The Human Role in Telerobotics. Berlim, v.31, p.11-24, 2007. B. Rhodes, J. Goerzen, Foundations od Python Network Programming: The Comprehensive guide to building network applications with Python. Apress, New York, 2010. M. Lutz, Programming Python, Fourth Edition. O’Reilly, Sebastopol, 2011. P. Barry, Head First Python. O’Reilly, Sebastopol, 2011. 143 ANAIS ELETRÔNICOS V ENUCOMP Project OurDown: Collaborative System for Download Management in Overlay Network R. G. Sousa Abstract— 1This paper brings a new model to solve the problem of downloads in social networks. In particular the waste of bandwidth by downloading one same file multiple times. The Internet Architecture provides the best effort and it forward each package individually, but it doesn’t provide a good performance, neither deals with redundant downloads. In this case the problem is known and there are some solutions, for instance Proxy Caching and FTP servers, but those don’t work with colaboration between users in a local network, and they are not built by the point of view of groupware and distributed systems. The objective of the project Ourdown is to remove redundant downloads and add conscious/aware components, built on a Peer to Peer (P2P) network. P2P has been involved on building experimental and sophisticated components, and those components can talk to each other and consequently avoid duplicated downloads. This paper demonstrates the model, the specification and the development of the project Ourdown. Keywords — Peer to Peer, Download Manager, JXTA. I INTRODUÇÃO S egundo projeções para 2015, realizado pela instituição de consultoria IDC (Internacional Data Corporation), o tráfego mensal médio de quem usa a Internet será em torno de 24,8 gigabytes, para enviar esta quantidade de informação por escrito, seria necessário 1 milhão de cartas de uma página cada uma, ou 10 (dez) toneladas de papel [1]. Segundo pesquisas feita pela Internet World Stats [2] a Internet possui cerca de 2 (dois) bilhões de usuários, cerca de 32% da população mundial tem acesso a Internet, o crescimento de usuários de 2000 até 2011 foi de 528% (quinhentos e vinte e oito). Com o crescimento da Internet torna-se atraente o compartilhamento de arquivos via WWW (Word Wide Web), atualmente é comum às organizações disponibilizar seus arquivos digitais através de portais. Este procedimento torna-se atrativo, pois economiza com gravações de mídias e o interessado obtém o arquivo sob demanda e com todas as vantagens que a Web pode proporcionar. Antes do ambiente WWW para compartilhamento de arquivo o serviço FTP (File Transferer Protocol) foi o principal meio de troca de arquivos, o FTP viabiliza o compartilhamento de arquivos na Internet permitindo que um usuário em um computador: transfira; mova; ou remova arquivos remotos [3]. Em organizações onde o tráfego na rede necessita de extremo controle o administrador da rede executa uma conexão remota ao servidor FTP que disponibiliza o 1 R. G. Sousa, Universidade Federal do Piauí (UFPI), Piauí, Brasil, [email protected] arquivo desejado e deixa-o disponível para os usuários na rede local. O procedimento é muito atrativo, pois limita a quantidade de downloads entre a rede local e a externa. O serviço FTP foi criado numa época em que o uso da Internet era limitado e os usuários não realizavam downloads constantemente [4]. Atualmente, controlar o tráfego em uma rede torna-se muito difícil por vários aspectos: (i) nova geração de usuários acostumados com acesso irrestrito; (ii) liberdade dos usuários em utilizar a Internet; (iii) pouco conhecimento sobre as características do “conjunto” que o permitem o acesso à Internet. Com o passar do tempo a transferência de arquivos através da Web supriu o serviço FTP. Recentemente, vários downloads são via navegadores acessíveis por meio de hyperlinks em páginas Web. Para obter um arquivo o usuário encontra o que deseja e clica no hyperlink, de forma simples e transparente. O comportamento individual de cada internauta não leva em consideração o comportamento do grupo de usuários na rede em comum. Para facilitar a atividade de download, existem diversos gerenciadores disponibilizados na Internet, sejam pagos, como o Internet Download Manager [5], ou gratuitos, p.ex: Orbit [6] e JDownloader [7]. Estes e outros aplicativos que se situam no lado do cliente, ao contrário dos servidores FTP, ficam no âmbito do computador do usuário e fogem da administração centralizada. Ambos os tipos de gerenciadores de downloads, servidor FTP ou aplicativos do lado do cliente não usufruem do compartilhamento peer-to-peer para otimizar o link de acesso à Internet. Uma dificuldade muito grande para qualquer administrador de rede é evitar downloads redundantes dentro de uma rede local. Servidores FTP precisam de uma administração rígida e centralizada e aplicativos gerenciadores de downloads que são executados do lado do cliente funcionam no escopo restrito da máquina dos usuários e não são acessíveis para outros usuários dentro da mesma rede. A redução de downloads paralelos do mesmo arquivo é de grande importância para economia de banda de rede, uma vez que as cópias transmitidas concorrem e consomem recursos preciosos da rede, como: buffers de recepção, buffers de transmissão, links de dados, processador e memória dos roteadores e comutadores de rede. Este trabalho propõe a criação de componentes de softwares distribuídos [8,9,10] que são instanciados numa rede local. O objetivo é trabalhar de forma cooperada e em conjunto com o navegador do usuário para gerenciar os downloads dentro da rede local. Os componentes comportamse de forma a monitorar e promover a comunicação entre eles do início de eventuais downloads e alertando outros 144 ANAIS ELETRÔNICOS V ENUCOMP componentes da existência do download. A vantagem deste sistema é suprimir redundâncias de downloads, evitando-se novas conexões entre a rede local e a externa. Toda a interação segue o modelo de comunicação peer-to-peer [11], ou seja, sem a necessidade de configurar um servidor central para o controle, cuja característica é um dos pontos de destaque do projeto Ourdown. As próximas seções deste artigo estão organizadas da seguinte maneira: na seção 2 apresentam-se os trabalhos relacionados, a seção 3 aborda a fundamentação teórica do projeto e o modelo conceitual do projeto Ourdown, figura-se os diagramas de classe e sequencia para compreensão do modelo concebido. Na seção 4 apresentam-se as tecnologias e a infraestrutura de rede usada no projeto. Sequencialmente, a seção 5 destaca dois pontos importantes na codificação do modelo. A seção 6 descreve um resumo dos motivos de adoção da plataforma JXTA. Por fim, na seção 7 estão as considerações finais com vários pontos aprendidos durante o desenvolvimento e a descrição de melhorias almejadas. II. TRABALHOS RELACIONADOS Com o intuito de posicionar o trabalho perante o assunto de distribuição de arquivos, propõem a seguinte divisão para os serviços de compartilhamento de arquivos: a. Centralizados e não transparente: FTP; b. Centralizados e transparentes: WEB Cache; c. Distribuídos, transparentes, sem controle de admissão: Squirrel; d. Distribuídos, transparentes, com controle de admissão: Ourdown. 2.1 FTP O FTP (File Transfer Procolol) [12] é o protocolo destinado a transferência de arquivos de um hospedeiro ao outro na Internet. Projetado em 1971, tem como missão criar uma ambiente de manipulação de arquivos remotos através de primitivas parecidas com as utilizadas nos sistemas de arquivos locais. Para tanto, é possível através do FTP um cliente realizar as seguintes operações: listar, renomear, remover, criar, transferir e outras. deste serviço. O servidor proxy utiliza o ambiente WEB para transmissão de dados. Em 1998 o tráfego WEB correspondia a 75% de todo o tráfego na Internet [14]. O servidor proxy é utilizado por um cliente através de uma prévia configuração no navegador, ou no sistema operacional, ou no gateway da rede através de um recuso chamado de proxy transparente. O tempo de armazenamento na cache depende de uma prévia configuração realizada pelo administrador da rede [15]. Cabe ao administrador da rede: a) instalar o servidor proxy na rede; b) decidir o que deve ser armazenado; c) quanto tempo será armazenado as páginas e os objetos; e d) o tamanho da cache que será reservado. 2.3 Squirrel Squirrel [16] é um sistema de WEB cache distribuído que usa o protocolo Pastry na busca de recursos e no roteamento de mensagens. O Squirrel é um serviço executado no mesmo host que o navegador WEB e ele compartilha o diretório de cache do navegador. Após o cliente solicitar uma URL a solicitação é encaminhada ao proxy Squirrel. Inicialmente o Squirrel verifica se o objeto está na cache local e caso o objeto não exista localmente é feita uma busca na rede P2P formada por outros nós. A URL é utilizada para gerar um identificador através de uma função de hash, e com este identificador a solicitação é encaminhada a um nó da rede P2P que tem o identificador mais próximo do identificador do objeto. Este principio é a base da DHT (Dynamic Hash Table). Squirrel é um projeto maduro com resultados factíveis e implementa o protocolo Pastry para realizar a identificação de objetos e o roteamento para o encaminhamento de mensagens. 2.4 Ourdown Ourdown é um projeto construído sobre uma arquitetura Peer-to-Peer (P2P). Esta arquitetura é caracterizada pela distribuição horizontal das entidades, assim, cada entidade é um servente, assumindo funções de cliente e servidor, este comportamento simétrico é desejado para sistemas sem a presença de um servidor central. Segundo Tanenbaum [4], as arquiteturas P2P são de dois tipos: estruturadas ou não estruturadas. As arquiteturas estruturadas utilizam de mecanismos complexos, p.ex: variações da DHT (Dynamic Hash Table), para nomeação e localização, muito estudo foi realizado neste assunto deste o Napster 2007 [4]. Balakrishnan (2003) [17] em seu trabalho “Looking up Data in P2P System” apresenta vários algoritmos como: CAN, Pastry, Tapestry e Chord como evoluções do percursor Napster para distribuição de arquivos sob arquitetura P2P. As arquiteturas não estruturadas são sistemas em que não se utiliza de complexos sistemas de nomeação e localização para construir uma rede de sobreposição. Quando um nó precisa localizar um item, a única coisa que ele faz é inundar a rede com uma consulta de busca. O projeto Ourdown é construído sobre uma arquitetura não-estruturada. A Tabela 1 apresenta as diferenças entre os sistemas FTP (seção 2.1), WEB Cache (seção 2.2), Squirrel (seção 2.3) em relação ao Ourdown. As respostas da primeira pergunta mostra que o Squirrel e o Ourdown são sistemas descentralizado. A 2.2 WEB Cache Servidor WEB Cache, também conhecido como servidor proxy, é o servidor que realiza cache de objetos WEB da Internet, assim além de armazenar páginas HTML (HyperText Markup Language) também pode armazenar objetos (imagens, áudio e vídeos) referenciados nas páginas requisitadas via o protocolo HTTP (Hyper Text Transfer Protocol). É utilizado para reduzir o tráfego na Internet, pois armazena temporariamente os arquivos [13]. Geralmente é um serviço dedicado e colocado entre a rede local e a externa. A ideia do servidor proxy é trazer o conteúdo de um servidor WEB para mais próximo do cliente e assim diminuir o tempo de espera. A vantagem é alcançada na segunda requisição HTTP emitida pelo cliente que inicialmente fez a requisição HTTP ou por outro cliente que compartilha o mesmo servidor proxy. O tamanho da cache versus páginas estáticas e dinâmicas é um ponto de conflito nas configurações 145 ANAIS ELETRÔNICOS V ENUCOMP resposta da segunda pergunta mostra que o Squirrel e o Ourdown não necessitam de um administrador de rede para sua execução. As respostas da terceira pergunta mostra que somente o WEB Cache e o Ourdown fazem controle da admissão de novas conexões para arquivos, o WEB Cache utiliza da primitiva HEAD do HTTP para este controle. A resposta da quarta questão mostra que somente o FTP não esconde do usuário os parâmetros de rede como: endereço, porta, usuário e senha, diretórios e nome dos arquivos remotos. A resposta da quinta questão mostra que no FTP e na WEB Cache o usuário para encontrar um recurso precisa necessariamente saber sua localização. As respostas da sexta questão apresentam que somente o Squirrel e o Ourdown, por serem construídos sobre uma arquitetura distribuída, possuem uma maior robustez por não possuir um ponto de vulnerabilidade. A resposta da última pergunta da Tabela 1 destaca o ponto de divergência conceitual do projeto Squirrel e Ourdown. O Ourdown evita que conexões a um mesmo objeto sejam feitas em tempo real, o controle da banda é pró-ativa. No Squirrel os arquivos são obtidos através de diretórios temporários dos navegadores Web após o download ser completado, não há intervenção do sistema durante o download, dois clientes usando o Squirrel podem realizar o download de um mesmo arquivo ao mesmo tempo, este comportamento é evitado pelo Ourdown. se preocupam em detectar nenhum download, e assim é comum que um arquivo seja descarregado por vários usuários ao mesmo tempo. Visualiza-se que o “Arquivo A” na Fig. 1 é duplicado no espaço de armazenamento do Usuário 1 e Usuário 2.O tempo de download de um arquivo (Fórmula 1) é proporcional ao tamanho do mesmo e a Largura de Banda. Calcula-se o tempo de download através da fórmula: F (t )= t v (1) São variáveis da Fórmula 1: t denota o tamanho do arquivo; v denota a largura de banda. Quanto maior a quantidade de downloads paralelos menor será a largura de banda sensível disponível na rede. Apesar da largura de banda corresponder a uma faixa de frequência fixa, a taxa de transmissão é alterada de acordo com diversas variáveis, entre elas a quantidade de downloads. Enquanto as requisições de downloads gerarem um consumo na rede menor que a largura de banda disponível nenhum usuário irá competir e atrapalhar a atividade do outro. À medida que o número de downloads aumente o tempo de download de um arquivo irá aumentar. n S (t )= ∑ F (t ) TABELA 1 COMPARAÇÃO ENTRE VÁRIOS MEIOS DE COMPARTILHAMENTO DE ARQUIVOS Questões 1. Necessita de um Servidor? 2. Necessita de um administrador de rede: 3. Gerencia a admissão de downloads duplicados? 4. Transparente para o usuário? 5. Transparente quanto a localização de rede? 6. Ponto único de falha? 7. Gerencia o download sobdemanda em tempo real? FTP Sim Sim Web Cache Sim Sim Squirrel Não Não Ourdown Não Não Não Não Sim Sim Sim Não Parcialmen te Parcialmen te Não Sim Sim Sim Não Sim Não Não Não Não Sim Não (2) 0 III. SISTEMAS COLABORATIVOS E MODELAGEM A Fig. 1 apresenta um modelo básico de uma rede local de uso genérico. Figura 1. Duplicação de Download. Em uma extremidade da rede se encontram os usuários que neste contexto são os responsáveis pelos downloads. Entende-se neste modelo que os usuários utilizam de diversos tipos de equipamentos (computador, notebook, smartphones e outros) para realizar o download. As redes locais (LAN) não A Fórmula 2 apresenta a somatória total de tempo gasto na rede com todas as transmissões: São variáveis da Fórmula 2: t denota o tamanho do arquivo; 0 e n limites, 0 instante inicial e n tempo final; t denota o tamanho do arquivo. Existem várias técnicas de suprir a demanda por banda em uma rede de computadores. Uma visão mais simples e estática é o aumento de recursos de rede, como p. ex.: enlaces mais velozes. Porém esta medida gera um ciclo vicioso, uma vez que o aumento de largura de banda provoca proporcionalmente o aumento na demanda gerando um círculo vicioso, mais banda mais consumo. Neste campo de estudo, nas últimas décadas pesquisaramse várias maneiras de gerenciar os enlaces de rede. Dentre diversas abordagens a Arquitetura DiffServ se destaca. Arquitetura dos Serviços Diferenciados (DiffServ) [18,19,20] posiciona entre o serviço padrão da Internet (BestEffort Serviço de Melhor Esforço) e a Arquitetura IntServ (Serviços Integrados) [21]. DiffServ e IntServ são arquiteturas baseadas no conceito de QoS (Quality of Service) e são abordagens fundamentadas no controle do uso da rede baseadas na sinalização do tráfego para prover garantias na rede, dentre ela a largura de banda. Merece destaque que a proposta deste trabalho diferentemente das Arquiteturas IntServ e DiffServ está baseada na colaboração invés da concorrência que as outras 146 ANAIS ELETRÔNICOS V ENUCOMP arquiteturas promovem. Neste contexto o projeto adota o paradigma da colaboração. Existem várias teorias e modelos de colaboração, entre elas Teorias dos Jogos, a Teoria da Atividade, o Modelo 3C de colaboração, Padrões de Colaboração e o Modelo Tuckman. Teorias e modelos são utilizadas para entender, comparar, abstrair e generalizar o ambiente e os cenários nos quais elementos colaborativos estão inseridos [22]. Dentre os vários modelos, este projeto alinha-se a ideia do Modelo 3C. O Modelo 3C é esquematizado na relação entre as ações de: comunicar, cooperar e coordenar. A seguir, estas três ações são identificadas no Modelo Conceitual do Projeto Ourdown. Figura 2. Cooperação entre os componentes. Segundo a Fig. 2, nota-se que a rede é adicionada com novas funcionalidades incorporadas na máquina do usuário para o gerenciamento de downloads. A dinâmica da rede é alterada para que antes do início do download haja uma interação entre os componentes distribuídos. Cada componente é construído de várias funcionalidades sendo realizadas em paralelo e em comum dentre todos. Uma grande diferença entre as Fig. 1 e a Fig. 2 está na quantidade de arquivos “Arquivo A” transmitida da rede externa (Internet) para a rede local (LAN). Uma vez que o novo ambiente proposto neste projeto comporta-se como esperado as requisições duplicadas de um mesmo arquivo serão canceladas e o requisitante aguardará o download de quem iniciou primeiramente o arquivo. Importante ressaltar que no mercado atual, a largura de banda comum entre o Gateway e a rede externa é da grandeza dos kilobits por segundo (Kbps) ou megabits por segundo (Mbps), enquanto as redes locais (LAN) operam na grandeza dos gigabits (Gbps) por segundo. 3.1 Objetos do Componente Após uma visão geral do projeto, onde se focou na vantagem desta abordagem em relação ao modelo tradicional de download, além da demonstração simples da modelagem matemática do sistema, esta seção apresenta a proposta computacional de modelagem de objetos utilizados na implementação dos componentes. Figura 3. Objetos do Componente. O componente (ver Fig. 3) atua como servente e assume os papeis de cliente e servidor. O componente pode ser decomposto em várias partes, são elas: WebServer, WaitingFile, UDPServer e o Downloader. A Fig. 3 apresenta o componente, seus principais objetos e sua localização no ambiente. Na figura observa-se que o componente tem acesso a LAN e a Internet ao mesmo tempo. Nos quatro parágrafos a seguir são delineadas as funcionalidades de cada um. WebServer é responsável pela captura do início de um download, existem várias possibilidades tecnológicas para esta detecção. Na seção 4 é desvendada a técnica adotada no desenvolvimento do componente neste projeto. Uma vez detectado o início de um download é necessário extrair o nome do arquivo, sua localização e salvar as informações para uso futuro. O WaitingFile (ver Fig. 3) tem a função de entrar em contato com os outros componentes para descobrir se outro componente realiza o download do arquivo requisitado pelo usuário. A taxa de requisição pode ser maior que a taxa de download realizado pelo sistema, assim, há necessidade de armazenar as requisições em um buffer e tratá-las sequencialmente. Caso nenhum componente na rede esteja realizado o download do arquivo requisitado, o Downloader inicia o download pela Internet. Esta tarefa implica em atualização de variáveis locais para sinalizar esta ação. A qualquer momento um componente pode receber uma mensagem de outro componente questionando pela existência do download de um arquivo. Se o componente que recebe a mensagem realiza o download do arquivo desejado este deve enviar uma mensagem ao componente que fez o questionamento. O UDPServer é o responsável por esta tarefa, de enviar um arquivo local a outro componente na rede. Neste contexto, há um protocolo de alto nível e as mensagens enviadas pelos componentes são: a) Mensagem de Requisição e b) Mensagem de Resposta. A Mensagem de Requisição é enviada para todos os componentes contendo o nome e a localização do arquivo desejado, após o envio desta mensagem o componente aguardará um timeout, quando este timeout esgota o próprio componente inicia o download, ou seja, não aguarda mais nenhum tempo por espera. A Mensagem de Resposta é uma mensagem unicast enviada diretamente para quem originou o pedido, o componente que originou o pedido após receber a mensagem de resposta deve aguardar o envio do arquivo. Alguns objetos contidos no componente (ver Fig. 3) são assíncronos e outros são síncronos. O WEBServer é assíncrono, ele intercepta uma requisição a qualquer momento, 147 ANAIS ELETRÔNICOS V ENUCOMP uma vez interceptado ele armazena a requisição em um buffer, as requisições são feitas diretamente pelo usuário e são guardas para futuras requisições despachadas na rede local. O WaitingFile responsável por enviar as mensagens de requisições na rede é síncrono, ele aguarda um intervalo de tempo e caso não receba uma reposta sinaliza ao Downloader a realizar o download, que consequentemente também é síncrono. 3.2 Diagrama de Classe Segundo os requisitos do sistema e o modelo do componente (seção 3.1), o sistema projetado é composto de cinco classes principais e mais duas classes auxiliares. A Fig. 4 apresenta a relação entre elas. Uma vez sinalizado o envio pelo outro componente na rede é criado um objeto da classe ReceiveFile para receber o arquivo. Portanto, observa-se a possibilidade e a preocupação de recebimentos simultâneos na rede. A classe ReceiveFile também é uma generalização da classe Thread. Downloader é a classe responsável por realizar o download de um arquivo da Internet. Seu método principal é uma rotina circular de checagem do vetor FilaDownloads, quando o vetor esta vazio o objeto desta classe é bloqueado (Thread.wait()). Se o vetor contiver elementos, cada elemento representa uma requisição dispara pelo Usuário que não foi atendida pelos outros componentes, entretanto este elemento descreve o arquivo a ser obtido da Internet. UDPServer é a classe que modela o comportamento do objeto responsável por escutar da rede local pedidos de download. Seu método principal apenas abre uma porta de comunicação UDP e aguarda a chegada de pacotes de broadcast. Uma vez recebido um pacote a mensagem é extraída e analisada. A análise consiste em procurar no vetor FilaDownloads se o arquivo requisitado faz parte da lista de arquivos obtidos pelo Downloader, se sim então é extraído do pacote o endereço de comunicação do requerente e salvo no vetor de FilaPedidos para futuro processamento. 3.3 Diagramas de Sequência A seguir são apresentados dois diagramas de sequência ilustrando a interação entre os objetos dos componentes. Figura 4. Diagrama de classes. A classe Componente é a classe principal que possui o método para o início da execução da aplicação. Esta classe é composta por quatro objetos, cada um da classe WebServer, WaitingFile, Downloader e UDPServe. Todos os quatro objetos associados são únicos e executados em paralelo, portanto as classes são especializadas da classe Thread. Por questão de clareza da Fig. 4 a não apresenta estas generalizações. A classe Componente possui dois vetores: FiladeDownloads e FiladePedido. O vetor FiladeDownloads é utilizado para armazenar as requisições disparadas pelo usuário. O vetor FilaPedidos é utilizado para armazenar as requisições enviadas pelos componentes da LAN e que serão atendidas. Os quatro parágrafos a seguir explicam a responsabilidade de cada uma das classes (ver Fig. 4). WebServer é a classe responsável pela implementação da interação entre as interfaces de detecção do evento do downnload e o componente. Sua outra função é de registrar as requisições para futuro processamento, por fim, é de sua responsabilidade enviar uma mensagem ao usuário avisando-o do sucesso da operação. Como há possibilidade do disparo de várias requisições de downloads pelos usuários a classe WebServer cria um objeto da classe WebClientRequest . WaitingFile é a classe responsável pela recepção de um arquivo antes requisitado e prometido por outro componente. Figura 5. Diagrama de sequência de um pedido de um Arquivo. O diagrama de sequência (Fig. 5) apresenta a sequência de mensagens entre os elementos. O Navegador e o WebServer se encontram no mesmo host. O UDPServer é o objeto pertencente a outro componente de outro host. Entre o WebServer e o UDPServer está a LAN que neste diagrama representa simplesmente uma rede local de computadores. Esta figura representa a fase inicial de um pedido e os passos até que o pedido seja enviado de um componente para a rede e da rede para outro componente. Após o recebimento de um pedido pelo UDPServer outra sequência de mensagens é realizada, ver Fig. 6. 148 ANAIS ELETRÔNICOS V ENUCOMP Figura 6. Diagrama de sequência do recebimento de um arquivo. Após a recepção de um pedido, o UDPServer (ver Fig. 5) verifica se faz o download do arquivo requisitado, se sim ele armazena o pedido e envia uma mensagem avisando que está fazendo o download. Neste caso, o outro componente não irá iniciar o download e aguardará o envio pela rede local. Se nenhum UDPServer espalhado na rede local responder o Downloader entrará em ação. O Downloader é responsável pelo download do arquivo pela Internet. Após o fim do download ele deve pesquisar os pedidos enfileirados e transmitir o arquivo para o WaitingFile que se encontra em outro host. O WaitingFile fica aguardando o envio e após a conexão ele cria o objeto ReceiveFile para cada envio, uma vez que pode existir a transmissão de várias fontes diferentes e de arquivos diferentes. Na Fig. 6 apresenta o objeto Internet para ilustrar a Internet, na verdade não há um componente de software Internet. Os diagramas de sequencia Fig. 5 e Fig. 6 mostram a série de mensagens e o envolvimento de vários objetos na rede. Esta seção apresentou os principais aspectos funcionais do modelo de classes e a interação entre elas, a seguir na seção 4 apresenta-se os aspectos tecnológicos para implementação deste modelo. IV. TECNOLOGIAS E INFRAESTRUTURA DE REDE Após a modelagem do sistema, das classes e suas respectivas funcionalidades, das relações e dependências, o próximo passo do projeto consiste na implementação. Neste ponto, várias tecnologias foram avaliadas e nesta seção apresentam-se as tecnologias preteridas na fase inicial que se encontra o trabalho. Na seção 5 é apresentada a JXTA como outra tecnologia no, sua adição só foi possível através de experimentos realizados com as ferramentas apresentadas nesta seção. 4.1 Firefox O navegador Web, ou browser, permite ao usuário acessar o conteúdo presente em outras máquinas, o usuário requisita o conteúdo através de um endereço e por meio deste é iniciada uma conexão com a outra máquina, alem da visualização de páginas utiliza-se o navegador para download de arquivos. Existem várias técnicas para capturar o início do download, uma alternativa é alterar o comportamento do Sistema Operacional, esta alternativa envolve uma codificação particular para cada Sistema Operacional. Afim de uma independência do Sistema Operacional projetou-se um componente para o Firefox[17]. O Firefox permite à adição de complementos que alteram seu comportamento padrão, além desta flexibilidade a vantagem dele ser gratuito foi fundamental na escolha. O Firefox é escrito com a linguagem de marcação XUL desenvolvida pelo próprio Mozilla. Firefox é um software livre de código aberto, todavia o usuário poderá alterar suas características e funcionamento através de extensões. De acordo com o Mozilla [15] as extensões do Firefox, são pacotes contendo arquivos que podem modificar o comportamento e a interface do Firefox. Podem ainda monitorar eventos do browser, como por exemplo, o clique do mouse sobre algum link. As extensões assim como o próprio navegador são codificadas com a linguagem XUL. A extensão é um arquivo composto por documentos que descrevem seu funcionamento e contem um arquivo manifesto o qual o Firefox sabe sobre uma extensão e o que deve ser instalado. Também uma extensão possui a pasta chrome na qual estão inseridos os conteúdos que personificam a aparência, idioma e scripts em JavaScript que definem o funcionamento. Para que o WebServer (seção 3.1) identifique uma requisição a partir do browser foi codificado um componente para o Firefox. É utilizado o AJAX para prover a comunicação entre o browser e o objeto WebServer. 4.2 Java e Sockets A codificação do componente foi feita por meio da plataforma de desenvolvimento Java. A linguagem Java foi escolhida por apresentar facilidade na programação para Internet, suporte a Threads, controle de concorrência e paralelismo e suporte a Sockets TCP e UDP. Além destas vantagens focadas no projeto a linguagem Java se destaca por ser robusta, flexível, e suportar mobilidade e portabilidade. A portabilidade é de suma importância para o projeto. A possibilidade de construir o componente e o mesmo ser executado em diferentes Sistemas Operacionais vai ao encontro da natureza distribuída dos componentes. Sockets em redes de computadores são abstrações de canais de comunicação, todo servidor que deseja ser acessado deve criar Socket Server. Uma vez criado um Socket Server este pode ser acessado por outro programa que inicie um Socket com o servidor. A conexão é formada por uma dupla de sockets, o do cliente e do servidor. A dupla de sockets é caracterizada por uma quádrupla formada por endereço IP de origem e endereço IP de destino, porta de origem e porta de destinos. Neste projeto algumas portas foram pré-definidas para a criação de sockets. A Fig. 7 é início do Arquivo Configure.java retirado do projeto. 149 public class Configure{ static int portOurDownWebServer = 2121; static int portOurDownWaitingFil = 2222; static int portOurDownWaitingFil = 9000; } Figura 7. Arquivo Configure.java. ANAIS ELETRÔNICOS V ENUCOMP Nota-se que no arquivo é definido o identificador de três portas de rede. A porta TCP 2121 é utilizada para o Navegador enviar uma requisição ao WebServer. A porta TCP 2222 é utilizada pelo WaitingFile para receber a sinalização do envio de um arquivo. E por fim, a porta UDP 9000 é utilizada para envio de datagramas multicast. desconhecido o datagrama é enviado para o endereço de broadcast da rede. O código a seguir mostra esta tarefa: ds = new DatagramSocket(); byte[] bufout = new byte[1024]; DatagramPacket dp = new DatagramPacket(bufout, bufout.length); bufout = ("PEDIDO:" + request).getBytes(); dp.setData(bufout); dp.setAddress( InetAddress.getByName("255.255.255.255")); dp.setLength(bufout.length); dp.setPort(Configure.portOurDownUDPServer); ds.send(dp); V. DESENVOLVIMENTO E CODIFICAÇÃO 5.1 Componente no Firefox Todo o processo da construção do componente para o Firefox é extenso. Abaixo é apresentado o código do arquivo browser.xml responsável pela mudança visual do Firefox quando se clica com o botão direito encima de um link. <overlay id="ourdown" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script src="ourdown.js" /> <popup id ="contentAreaContextMenu"> <menuitem label="OurDown" oncommand="linkTargetFinder.run()"/> </popup> </overlay> A incorporação do código acima no componente faz que ao clicar com o botão direito do mouse construa um “menu” com a opção Ourdown como mostrado na Fig. 8. O código acima mostra a construção de um datagrama representado pelo objeto Java dp. O método setAddress é utilizado para armazenar o endereço de destino 255.255.255.255. Este número representa o endereço de broadcast numa rede local. O código elucida uma parte importante do funcionamento do componente WebServer responsável pelo envio do datagramas UDP em broadcast na rede local. Esta solução implica que o código é dependente da Arquitetura TCP/IP e seu escopo de atuação restringe a uma rede local, uma vez que os datagramas UDP de broadcast são descartados nos roteadores. O artifício utilizado para enviar uma mensagem para todos os componentes da rede é uma característica particular da camada de rede da Arquitetura TCP/IP. Assim, este código depende de como a camada de rede trata os datagramas com endereço de broadcast. O uso do UDP também se fundamenta por ser um protocolo com baixo overhead de rede e preferível em relação ao TCP neste aspecto. VI. NOVO CÓDIGO COM JXTA Figura 8. Imagem da opção Ourdown no menu do Firefox. O arquivo ourdown.js contido no complemento possui a função do envio da requisição via AJAX. O trecho abaixo mostra este processo. ... try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) ... xmlHttp.open("GET","http://localhost:2121?="+arquivo,true); xmlHttp.send(null); ... O método open do objeto xmlHttp faz uma conexão para a porta 2121 cujo destino é a própria máquina. Antes do uso do componente do Firefox é necessária a instalação da outra parte do sistema responsável pela recepção destas conexões. A conexão mostrada no código acima é um recurso do Javascript muito utilizado em requisições AJAX. 5.2 Componente UDPServer A mensagem destinada a todos os componentes é encapsulada por um datagrama UDP, como o destino a priori é Toda codificação do componente, incluindo as classes WebServer, WaitingFile, UDPServer e Downloader está em processo de alteração para funcionar segundo a plataforma JXTA. O objetivo é aprimorar o projeto com novos recursos providos por esta plataforma [24]. JXTA cujo significado é juxtapose (unidos), é um conjunto aberto de protocolos específicos para construção de redes Peer-to-Peer que permite qualquer dispositivo de rede, tais como: sensores, smartphones, notebooks e servidores, comunicarem-se mutuamente como seus parceiros. O protocolo JXTA é independente de linguagem de programação, porém Java possui pacotes para suporte ao JXTA. A substituição da API Socket Java por JXTA foi orientada ao desejo de tornar o projeto mais interoperável, independente de plataforma, independe de arquitetura de rede e a possibilidade de construir serviços mais ubíquos. Várias funções implementadas neste projeto, tais como: descoberta de componentes, organização em grupo, aviso e descoberta de recursos (neste caso arquivos compartilhados), comunicação entre eles, e monitoração da rede será suprida pelo JXTA, resultando na diminuição da codificação. VII. CONSIDERAÇÕES FINAIS E TRABALHOS FUTUROS Ourdown é um sistema distribuído cuja função é exercida cooperativamente por componentes constituídos de objetos 150 ANAIS ELETRÔNICOS V ENUCOMP com funções bem definidas. Seu propósito geral torna a rede local de computadores conscientes da dinâmica de download de forma descentralizadas. A descentralização está em consonância com o novo modo de utilização pelos os novos usuários acostumados com o compartilhamento e a descentralização de serviços. Este artigo apresenta um novo modelo de gerência de download cuja sua vantagem foi formalmente apresentada. O projeto apresenta um paradigma que rompe com o modelo tradicional de download. A forma tradicional de downloads não tira aproveito da grande diferença entre a largura de banda das redes LAN em relação às WANS e não preocupam com o download enquanto estão ocorrendo. Este artigo relata a fase inicial do projeto desenvolvido sobre o aval do programa de Iniciação Científica da Universidade Federal do Piauí (ICV 2012/2013 UFPI/CSNHB). Descreve várias etapas do projeto ressaltando a concepção, a modelagem, e a codificação. Quanto à codificação destacaram-se algumas partes cruciais do código para execução do sistema, entre elas a componentização para o Firefox, a interceptação de downloads e a comunicação em broadcast via UDP. Durante o desenvolvimento do código novos requisitos surgiram e serão implementados no decorrer do período do ICV 2012/2013. Dentre os principais requisitos levantados são: a) adicionar aspectos de segurança na comunicação entre os componentes; b) estabelecer o conceito de grupos para restringir as mensagens na rede; c) permitir a busca de downloads ativos através de coringas de pesquisa de nomes, endereços e estados; d) implementar um sistema de cache local nos componente para que os mesmos executassem o papel de proxy de cache; d) adicionar a possibilidade de cooperação para downloads simultâneos de um mesmo arquivo, pois a atual codificação implica que um componente deve aguardar o encerramento do download para que o mesmo seja retransmitido na LAN; e) Atualmente existe apenas o componente Ourdown para o Firefox, almeja-se desenvolver para outros navegadores, especialmente o Google Chrome. A plataforma JXTA foi escolhida em substituição de API Socket do Java por permitir que as novas funcionalidades segundo os requisitos levantados possam ser implementados com maior agilidade, pois muitas das funcionalidades já estão embutidas no JXTA, entre elas: agrupamento de componentes, segurança e comunicação em grupo. Assim que o sistema adquirir maior estabilidade, robustez e interfaces mais amigáveis deseja-se sua distribuição gratuitamente. O intuito é a divulgação do curso de Sistema de Informação da Universidade Federal do Piauí como produtora de softwares inovadores e assim fomentar o interesse na área de pesquisa, desenvolvimento e empreendedorismo na região. REFERÊNCIAS [1] [2] [3] VEJA. Abril, 2011, ISBN 2221, Ano 44, publicada em 15 jun. 2011. IWS. Internet World Stats, Disponível em: http://www.internetworldstats.com, acessado em 10 ago 2012. SOARES, Luiz Fernando G. Redes de Computadores: Das [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] LANs,MANs e WANs às Redes ATM. 2ª Edição. Rio de Janeiro: Elsevier, 1995. TANENBAUM, A. S. Sistemas Distribuídos: princípios e paradigmas. 2ª Edição. São Paulo: Pearson Prentice Hall, 2007. IDM, Disponível em http://www.internetdownloadmanager.com. ORBIT, Disponível em acessado em 01/08/2012. http://www.orbitdownloader.com/br/index.htm, aces. em 10 ago. 2011. JDOWNLOAD, Disponível em http://jdownloader.org/ , acessado em 10 ago. 2011. DEITEL, H. M. Java TM: como programar. 6ª Edição. São Paulo, Pearson Prentice Hall, 2005. FUNDAÇÃO MOZILLA. Disponível em: http://www.mozilla.org Acesso em: 10 out. 2011. OAKS SCOTT, Travaset Bernard, Gong Li, JXTA in a Nutshell, O'Reilly, 2002. TANENBAUM, A. S. Redes de Computadores. 4ª Edição. Rio de Janeiro: Elsevier, 2003 POSTEL. J e REYNOLDS J. File Transfer Protocol (FTP), RFC 977, fev. 1986. http://www.rfc-editor.org/rfc/rfc977.txt. KUROSE J. F. e Ross K. W. Redes de Computadores e a Internet, Pearson: São Paulo: 2004. CLAFFY K., MILLER G. E THOMPSON K. The Nature of the Beast: Recent Traffic Meassurement from an Internet Backbone. Proceedings of Inet`98. Geneva, jul. 1998. http://www.caida.org/outreach/resources/papers/Inet98/. Squid Web Proxy. Disponível em: http://www.squid-cache.org. Acessado em: 04 nov 2012. Sitaram Iyer, Antony Rowstron, and Peter Druschel. 2002. Squirrel: a decentralized peer-to-peer web cache. In Proceedings of the twenty-first annual symposium on Principles of distributed computing (PODC '02). ACM, New York, NY, USA, 213-222. DOI=10.1145/571825.571861 http://doi.acm.org/10.1145/571825.571861 Hari Balakrishnan, M. Frans Kaashoek, David Karger, Robert Morris, and Ion Stoica. 2003. Looking up data in P2P systems. Commun. ACM 46, 2 (February 2003), 43-48. DOI=10.1145/606272.606299 http://doi.acm.org/10.1145/606272.606299 Almesberger, W., Salim, J., Kuznetsov, A., and Knuth, D. (1999). “Differentiated Services on Linux”. Tecnical Report ietf internet draft, Internet Enginnering Task Force. URL at http://www.almesberger.net/cv/papers/18270721.pdf. Blake, S., Black, D., Carlson, M., Davies, E., Wang, Z., and Weiss, W. (1998). “An architecture for Differentiated Services ”. Tecnhinal Report RFC 2475, Internet Engineering Task Force. URL at http://www.ietf.org. Nichols, K., Blanke, S., Baker, F., and Black, D. (1998). ”Definition of the Differentiated Services Field (DS Fiel d) in the IPv4 and IPv6 Headers”. Tecnhinal Report RFC 2474, Internet Engineering Task Force. URL at http://www.ietf.org. Braden, R., Clack, D., and Shenker, S. (1994). “Integrated Services in the Internet Architecture: an Overview”. Tecnhinal Report RFC 1633, Internet Engineering Task Force. URL at http://www.ietf.org. Pimental M, Fuks H, et al, Sistemas Colaborativos, Rio de Janeiro: Elsevier, 2011. MDN. Disponível em: <https://developer.mozilla.org/pt-BR/> Acesso em: 10 out. 2011 http://www.jxta.org Rayner Gomes Sousa possui graduação em Ciência da Computação pela Fundação Integrada Municipal de Ensino Superior (1998) e mestrado em Ciência da Computação pela Universidade Federal de Uberlândia (2005). Atualmente é Professor Titular da Universidade Federal do Piauí e Professor Contratado da Universidade Aberta do Piauí. Tem experiência na área de Ciência da Computação. Atuando principalmente nos seguintes temas: Internet, Qualidade de Serviço, CORBA, DiffServ, JXTA e Android. 151 ANAIS ELETRÔNICOS V ENUCOMP SenseRDF: Towards a Linked Data Conversion Tool B. Communications Modeling A. Silva, N. França, B. Paulino, D. Souza and W. Travassos, Member, Instituto Federal de Educação, Ciências e Teconologia da Paraíba - IFPB leitura dos dados conectados semanticamente, de forma automática, por agentes de software. Para aplicar essas práticas e alcançar a visão da Web de Dados, é necessário trabalhar com algumas etapas básicas: (i) conversão de dados disponíveis em formatos diversos, como, por exemplo, PDF, XML e HTML, em modelo de representação padrão RDF; (ii) associação dos objetos presentes nos diversos conjuntos de dados por meio de links; (iii) publicação dos conjuntos de dados na nuvem (Linked Data Cloud) [4] e o (iv) consumo dos dados publicados por meio de aplicações construídas para este fim. Este trabalho abrange a primeira etapa do processo. Para viabilizar a publicação de dados no padrão Linked Data, a ferramenta SenseRDF vem sendo desenvolvida com o objetivo de converter dados atualmente em formatos PDF e XML em modelos RDF, seguindo os princípios propostos [4]. Para escolher os formatos a serem contemplados na primeira versão da ferramenta, fizemos um estudo dos dados atualmente disponibilizados no portal do governo brasileiro1. Constatamos que boa parte deles se encontra em XML e PDF e que existem ainda poucas ferramentas que contemplam os mesmos [5]. Diante disso, a SenseRDF vem sendo implementada e, neste artigo, apresentamos a versão que converte arquivos PDF (seus metadados) em RDF. A ferramenta oferece um ambiente simples de ser utilizado e permite atualização dos metadados PDF, caso seja de interesse do usuário. Os dados (metadados) convertidos atendem aos princípios formulados no projeto Linked Data: (i) usa URIs para nomear recursos; (ii) utiliza vocabulários recomendados para identificar os recursos e (iii) permite que as URIs sejam acessadas através do protocolo HTTP. Este trabalho está organizado da seguinte forma: a Seção 2 introduz a abordagem SenseRDF; a Seção 3 apresenta a ferramenta na prática por meio de exemplos; a Seção 4 descreve os trabalhos relacionados, e a Seção 5 tece algumas considerações e indica trabalhos futuros. Abstract— Underlying the development of the Semantic Web, the project Linked Data aims to define a set of best practices for publishing and connecting structured data on the Web with the purpose of creating a Web of Data. To this end, at first, existing data should be converted to a standard model in such a way that they can be understood by software agents and be used by diverse applications. In this light, the tool named SenseRDF has been developed to allow the conversion of data in formats such as PDF and XML to a representation model in RDF. The generated data (in RDF) follow the Linked Data principles and adhere to commonly accepted vocabularies. Keywords — data conversion, Linked Data, vocabularies, RDF. I. INTRODUÇÃO A Internet contemporânea, nos moldes da World Wide Web (ou simplesmente Web), vive um constante processo de evolução e tem revolucionado a forma como criamos conteúdo e trocamos informações. A Web organizou as informações na Internet por meio de hipertexto e tornou a interação do usuário com a rede mundial mais amigável. Entretanto, esses conteúdos publicados normalmente seguem regras apenas sintáticas, com objetivos de apresentação, não permitindo que se consiga extrair semântica dos mesmos, nem ligá-los, sem que para isso seja feito um grande esforço de implementação. Considerando isso, a Web atual pode ser classificada ainda como sintática e o processo de interpretação dos conteúdos disponibilizados fica a cargo dos usuários [1]. Diante dessa constatação, uma nova visão da Web vem sendo buscada e tem sido denominada de Web Semântica (Semantic Web) [2]. Os documentos na Web Semântica possuiriam, além das informações que descrevem a estrutura sintática do seu conteúdo, outras informações que dariam o entendimento semântico a esse conteúdo. Como base ao desenvolvimento da Web Semântica, surgiu o projeto Linked Data que delimita um conjunto de práticas para publicar e conectar dados estruturados na Web, com o intuito de criar um espaço global de dados ou uma “Web de Dados” [3]. Estas práticas são fundamentadas em tecnologias Web, como HTTP (Hypertext Transfer Protocol) e URI (Uniform Resource Identifier), e no uso do modelo RDF (Resource Description Framework), com o objetivo de permitir a II. A ABORDAGEM SENSERDF A sistemática para disponibilizar dados na Web, segundo o padrão Linked Data, envolve um processo no qual os dados de diferentes fontes são selecionados e depois convertidos 1 152 http://dados.gov.br/ ANAIS ELETRÔNICOS V ENUCOMP para representações em um modelo padrão. Esta conversão segue o conjunto de princípios estabelecidos, descritos resumidamente a seguir [4]: (i) o uso de URIs para identificação dos objetos/recursos; (ii) a utilização de tecnologias, como RDF2 e SPARQL3, para descrição e consulta a estes recursos, respectivamente e (iii) o reaproveitamento de URIs, de forma que seja possível estabelecer ligações entre os dados disponíveis, com a finalidade de possibilitar a navegação por meio destas ligações. Um desses princípios defende o uso de RDF como modelo de representação de dados estruturados na Web [6]. O RDF é um modelo de dados que descreve recursos ou objetos, ou seja, entidades que possuem uma identidade na web [6, 7]. Os recursos são descritos como uma tripla (S, P, O), interpretada como “S possui P com valor O”, onde S é o sujeito da tripla, designado por um recurso, P é o predicado da afirmação, designado por um recurso e O é o objeto da afirmação, designado também por um recurso ou por um literal [7, 8]. Com o RDF, o uso de links e de vocabulários recomendados, é possível descrever significado sobre os objetos ou recursos. Mais especificamente, um link RDF pode ser uma tripla RDF em que o sujeito da tripla é uma referência URI no namespace de um conjunto de dados, enquanto o predicado e/ou objeto da tripla são referências URI apontando para o namespace de outro conjunto de dados. “Derreferenciando” essas URIs, produzimos uma descrição do recurso vinculado fornecido pelo servidor remoto. Essa descrição irá geralmente conter um link RDF adicional que aponta para outra URI que, por sua vez, pode ser também “derreferenciada”. Isto é como a descrição de recursos individuais é tecida dentro da Web de Dados. Isto é também como a Web de Dados pode ser navegada usando um navegador Linked Data ou rastreado por um robô de um engenho de busca. Dentro desse panorama, o objetivo da SenseRDF é permitir converter dados, a princípio PDF e XML, em modelo RDF, fazendo uso de informações do domínio dos dados e referenciando os termos dos vocabulários pertinentes a este domínio. A Figura 1 apresenta uma visão geral da arquitetura da ferramenta SenseRDF. 2 http://www.w3.org/RDF/ 3 http://www.w3.org/TR/rdf-sparql-query/ Extraçãode Metadados Extraçãode PDF Instâncias RDF GeradorRDF XML Identificaçãode Termos Identificaçãode Correspondências FOAF Arquivo de Correspondências SKOS Ontologia Res DC Repositório de Vocabulários Figura 1. Arquitetura da Ferramenta SenseRDF A ferramenta SenseRDF permite a conversão de dados em formato PDF e XML. Como forma de prover a semântica do domínio a partir de terminologias recomendadas (vocabulários), a ferramenta mantém um repositório de vocabulários, como, por exemplo, o FOAF 4 e o DC5, além de ontologias de domínio que possam ser usadas como referência de termos. Para a conversão, inicialmente a ferramenta identifica os metadados existentes na fonte de dados de entrada, metadados estes que podem ser de arquivos PDF ou XML. Um arquivo PDF contém metadados como Author e Title, já o XML pode conter diversos tipos que dependem do criador da fonte. Em seguida, a ferramenta gera um alinhamento de correspondências entre estes metadados e os termos (conceitos) existentes nos vocabulários recomendados. O objetivo do alinhamento é explicitar relações de similaridade entre os metadados da fonte de dados e os termos dos vocabulários existentes. Para os objetivos da ferramenta, estamos buscando relações de igualdade entre esses termos, para identificar o que pode ser referenciado dos vocabulários existentes. O alinhamento é persistido e, a cada novo arquivo a ser convertido, é verificado se a correspondência entre o metadado e o termo do vocabulário já existe. Caso não exista, ela é inserida neste arquivo de correspondências. Considerando arquivos PDF como fontes de dados, exemplos de correspondências de igualdade presentes no alinhamento são: Criador dc:creator Autor res:author Onde Criador e Autor são metadados de um arquivo PDF, o prefixo dc é referente ao vocabulário DC (Dublin Core) e o prefixo res é referente a uma ontologia de domínio sobre autores de publicações. Caso não haja nenhum termo de vocabulário equivalente a um metadado, este poderá ser adicionado a 4 5 153 http://www.foaf-project.org/ http://dublincore.org/documents/dcmi-terms/ ANAIS ELETRÔNICOS V ENUCOMP uma ontologia existente no repositório. Caso esta ontologia não exista, ela será criada e armazenada no repositório para ser utilizada na geração/atualização de futuros alinhamentos e nas conversões subsequentes. Depois de extraídos os metadados, as instâncias (indivíduos), no caso de arquivos XML, são também extraídas. A ferramenta, então, gera um arquivo RDF que contém os metadados referenciados por meio dos termos dos vocabulários e os objetos identificados provenientes das instâncias extraídas. Um resumo dos componentes que fazem parte da arquitetura do SenseRDF é apresentado a seguir: Repositório de Vocabulários: repositório onde se encontram armazenados os vocabulários e ontologias de domínio que são utilizados pela ferramenta. Caso seja necessário, o usuário pode adicionar uma ontologia ou vocabulário específico de seu domínio. Arquivo de Correspondências: armazena o alinhamento obtido no processo de matching entre os metadados da fonte de dados e os termos dos vocabulários existentes. Extração de Metadados: extrai os metadados da fonte de dados escolhida pelo usuário. Extração de Instâncias: é usado no caso do usuário escolher uma fonte de dados XML. Este módulo extrai os dados (instâncias ou indivíduos) existentes na fonte de dados. Identificação de Correspondências: gera ou atualiza um alinhamento de correspondências entre os metadados da fonte de dados e os termos existentes nos vocabulários recomendados. Identificação de Termo do Vocabulário: usando as correspondências identificadas, este módulo referencia um metadado da fonte quanto ao seu termo correspondente no momento da geração do RDF. Geração RDF: módulo principal que recebe os termos identificados nas correspondências, os metadados e as instâncias da fonte de dados, gerando assim um RDF final. III. A FERRAMENTA SENSERDF NA PRÁTICA SenseRDF contempla todo o processo de conversão para arquivos PDF. A conversão é realizada sobre seus metadados e um link para o arquivo é mantido. Como nem sempre um arquivo PDF é criado definindo os seus metadados (isso não é uma prática comum), a ferramenta permite que o usuário defina um conjunto mínimo de metadados para o arquivo em questão. O usuário pode atualizar os mesmos também. Nesta seção, apresentamos a ferramenta, de forma prática, por meio de exemplos, considerando arquivos PDF. A Figura 2 apresenta a interface da SenseRDF que mostra algumas de suas opções: (I) campo para identificação do arquivo (pode ser um arquivo em disco ou uma URL indicando o mesmo); (II) área de exibição dos metadados do arquivo, que podem ser alterados no caso de arquivos PDF (como mencionado, nem sempre os arquivos PDF originais possuem metadados); (III) opção de geração de RDF - o usuário pode escolher entre gerar o RDF em sintaxe XML ou em N3 e (IV) área onde será exibido o RDF gerado. A ferramenta SenseRDF foi implementada em linguagem Java, utilizando as APIs Jena6, JDOM7, Itext8, Alignment API9 e OWL API10. A primeira versão da 6 http://jena.apache.org/ http://www.jdom.org/ 8 http://api.itextpdf.com/ 9 http://alignapi.gforge.inria.fr/align.html 10 http://owlapi.sourceforge.net/ 7 154 ANAIS ELETRÔNICOS V ENUCOMP Figura 2. Interface da SenseRDF com algumas Opções Dessa forma, quando um alinhamento é gerado ou atualizado, obtemos correspondências com diferentes níveis de similaridade. Isso é reportado através de uma medida de confiança. Neste exemplo, temos uma correspondência com medida igual a 1.0 que indica, com precisão, uma equivalência entre o metadado e o termo. A medida 0.86 indica um grau de similaridade muito alto. Realizando testes, percebemos que asjk correspondências com medida acima de 0.8 indicam equivalência entre os termos. Utilizamos então este threshold, para limiar a identificação das correspondências de equivalência. Assim, nesta versão, aquelas correspondências com Como a ferramenta precisa das correspondências entre os metadados e os termos dos vocabulários, antes de gerar o RDF, ela cria ou atualiza o alinhamento existente. Para isso, ela usa um processo de matching que faz uma análise linguística [9] e verifica a proximidade dos nomes dos metadados do arquivo PDF e os nomes dos termos dos vocabulários (diferença de apenas alguns caracteres, análise de possíveis radicais, etc). O alinhamento gerado é 1:1 e indica um grau de similaridade (medida de confiança) entre os elementos associados. Um fragmento do alinhamento de correspondências é mostrado como exemplo na Figura 3. Figura 3. Fragmento do Alinhamento obtido entre os Metadados e os Construtores dos Vocabulários. 155 ANAIS ELETRÔNICOS V ENUCOMP threshold acima de 0.8 são definidas como equivalência entre o metadado e o termo. Caso algum metadado não possua termo equivalente, a ferramenta solicita do usuário que selecione nos vocabulários existentes algum termo que possa ser usado (Figura 4). Se não existir um compatível, a ferramenta gera este novo termo adicionando o mesmo a uma ontologia no repositório. Para isso, o usuário marca que não encontrou nenhum termo correspondente ao metadado exibido. Este novo termo será adicionado a uma ontologia “othersTerms”, que incorpora os termos que não pertencem aos vocabulários existentes. O usuário indica a que superclasse deve ser vinculada este novo termo ou conceito (subclasse). Figura 5. Exemplo de RDF gerado em Sintaxe XML. Figura 4. Seleção de Termos de Vocabulários para Correspondência com Metadados. Para geração do RDF, a ferramenta lê o alinhamento de correspondências, para que sejam identificados os termos dos metadados da fonte. Com os metadados e termos de referência em mãos, de acordo com a opção de sintaxe RDF escolhida pelo usuário (RDF/XML ou N3), a ferramenta gera o RDF final, como mostrado na Figura 5 (em XML) e na Figura 6 (em N3). Figura 6. Exemplo de RDF Gerado em sintaxe N3. IV. TRABALHOS RELACIONADOS Para a publicação de dados RDF, podem ser usadas ferramentas específicas de conversão. Atualmente, existem ferramentas para conversão de planilhas, arquivos CSV, dados relacionais e outros documentos [10]. Um exemplo é a ferramenta ConvertToRDF [11], desenvolvida pela MINDSWAP (Maryland Information and Network Dynamics Lab Semantic Web Agents Project) que tem como principal objetivo converter arquivos em formato XLS para RDF. A aplicação permite ao usuário executar o mapeamento através de uma ontologia própria da ferramenta, mas também permite o uso de outras ontologias para utilização nos mapeamentos. A ferramenta demonstra ser limitada na 156 ANAIS ELETRÔNICOS V ENUCOMP automação, uma vez que exige que o usuário faça todo o mapeamento manualmente, sem possuir um repositório que armazene estes mapeamentos manuais, para que possa reutilizá-los mais tarde. Outro exemplo de ferramenta é A TopBraid Composer [5] que oferece editores gráficos visuais para RDF e diagramas de classe, incluindo a capacidade de gerar consultas SPARQL. Ela também permite a conversão automática de XML, XSD, Excel, UML e outras fontes de dados. Há também o DBpedia [12], um projeto colaborativo que extrai dados do Wikipedia e os converte em dados estruturados usando o padrão RDF. O DBpedia está disponível, permitindo aos usuários utilizar e colaborar com o enriquecimento de seu repositório de datasets. A TripFS [13] é uma ferramenta que representa os diretórios e arquivos como recursos RDF. TripFS extrai metadados e cria links para outros conjuntos de dados e fornece um end-point SPARQL que permite aos clientes executar consultas sobre o sistema de arquivo inteiro. A Bio2RDF por outro lado converte documentos da área de biomedicina [14]. Visa também criar uma nuvem de dados sobre medicina. Lebo e Williams [15] apresentam uma abordagem para converter os dados CSV em Padrão Linked Data, de forma que permita melhoramentos incrementais. Aplicando esta abordagem, eles foram responsáveis por converter uma grande quantidade de dados governamentais dos EUA em RDF. Apesar dos esforços e das ferramentas existentes, ainda existe uma demanda não atendida por serviços que facilitem o processo de conversão de dados, especialmente aqueles em formato PDF e XML. Em geral, as ferramentas se concentram no aspecto sintático da geração RDF, enquanto que a questão semântica, referente ao uso de anotações ou referências a mecanismos de controle terminológico (vocabulários), se torna incompleta. Diante disso, como forma de facilitar a conversão de dados no contexto brasileiro e buscando desenvolver uma solução que faça uso da semântica do domínio dos dados e dos padrões existentes, a ferramenta SenseRDF foi especificada e vem sendo desenvolvida. Analisando nosso trabalho e comparando com os demais, destacamos que, ao converter os metadados PDF para RDF, nossa ferramenta, com o auxílio do usuário, identifica termos dos vocabulários existentes no repositório ou pode também criar novos termos, caso faça sentido ao domínio dos dados e não exista uma ontologia ainda para este domínio. Esta nova ontologia é persistida no repositório e será reutilizada em futuras conversões de arquivos que pertençam àquele domínio. O conjunto de ontologias e vocabulários existentes no repositório, juntamente com as correspondências já identificadas, automatiza futuras conversões e evita que o usuário tenha que fazer as correspondências entre metadados e termos de vocabulários manualmente. Assim, novas conversões serão mais rápidas e precisas. Nossa ferramenta também se diferencia por estar sendo desenvolvida de modo a permitir a conversão de dados disponibilizados pelo governo brasileiro em seu portal. V. CONSIDERAÇÕES E TRABALHOS FUTUROS Este trabalho apresentou a ferramenta de conversão de dados denominada SenseRDF. A SenseRDF provê um ambiente intuitivo e transparente onde o usuário escolhe formatos de fontes de dados que deseja converter para o modelo RDF segundo o padrão Linked Data. Para isso, a ferramenta utiliza um processo de matching que gera um alinhamento de correspondências entre os metadados da fonte e os termos existentes nos vocabulários do domínio dos dados. Utilizando estas correspondências, a SenseRDF gera o RDF, referenciando os termos identificados. O resultado pode ser obtido tanto em RDF/XML quanto no formato N3. Nesta primeira versão, a ferramenta trabalha com dados no formato PDF, gerando o modelo RDF apenas com seus metadados. Encontra-se em andamento a implementação da opção de arquivos XML, que irá gerar o modelo RDF tanto para os metadados identificados quanto para as instâncias (indivíduos). Como trabalho futuro, a ferramenta será estendida para permitir a identificação de links entre dois conjuntos de dados RDF diferentes. REFERÊNCIAS [1] Costa A., Yamate F. 2009. Semantic Lattes: uma ferramenta de consulta baseada em ontologias. Trabalho de Graduação em Engenharia de Computação - Escola Politécnica. IME/USP. [2] Berners-Lee T., Hendler J., Lassilia O. 2001. The semantic web. Scientific American. 284(5):34–44, Mai 2001. [3] Bizer C., Heath T., Berners-Lee T. 2009. Linked data - the story so far. Int. J. Semantic Web Inf. Syst. 5(3):1–22, 2009. [4] Heath, T., Bizer, C. 2011. Linked Data: Evolving the Web into a Global Data Space (1st edition). Synthesis Lectures on the Semantic Web: Theory and Technology, 1:1, 1-136. Morgan & Claypool, 2011. [5] TopBraid Documentation. Available at http://www.topquadrant.com/products/TB_Composer.html. [6] Klyne, G., Carroll, J. J., McBride, B. 2004. Resource description framework (RDF): Concepts and abstract syntax. DOI= http://www.w3.org/TR/rdf-concepts/ [7] Lóscio, B., Cunha, D.; Souza, D. 2011. Linked Data: da Web de Documentos para a Web de Dados. Escola Regional Ceará, Maranhão e Piauí 2011. Teresina: ERCEMAPI. 2011, v. 1, p. 7999. [8] Travassos W., Silva A., França N., Dantas R., Souza D. 2011. RDF, RDF(S) e OWL: Uma Análise Comparativa Visando Atingir o Padrão Linked Data. In: Anais Ciências Exatas e da Terra do VI Congresso de Pesquisa e Inovação da Rede Norte e Nordeste de Educação Tecnológica – CONNEPI. Pg. 413-423. Natal, RN. 157 ANAIS ELETRÔNICOS V ENUCOMP [9] Euzenat J., 2004. An API for ontology alignment. Proceedings of of some research projects at UFPE and at the Federal Institute of Education, Science and Technology of Paraíba (IFPB), Brazil. His main research interests are concerned with Semantic Web, Data Quality and Data Conversion. the International Semantic Web Conference (ISWC), pages 698– 712, 2004. [10] Auer, S., Dietzold, S., Lehmann, J., Hellmann, S., and Aumueller, D. 2009 Triplify: Light-weight linked data publication from relational databases. In Quemada, J., León, G., Maarek, Y. S., and Nejdl, W., editors, Proceedings of the 18th international Conference on World Wide Web, WWW 2009, Madrid, Spain, April 20-24, 2009, pages 621–630. ACM. [11] ConvertertoRDF Documentation. Available at http://www.w3.org/wiki/ConverterToRdf. [12] Kobilarov G., Bizer C., Auer S., Lehmann J. 2009. DBpedia - A Linked Data Hub and Data Source for Web and Enterprise Applications. Web Semantics Science Services and Agents on the World Wide Web. Volume: 7, Issue: 3, Publisher: Elsevier, Pages: 154-165. [13] Schandl, B., & Popitsch, N. 2010. Lifting File Systems into the Linked Data Cloud with TripFS. 3º International Workshop on Linked Data on the Web, Raleigh, North Carolina, USA. DOI= http://eprints.cs.univie.ac.at/69/ [14] Bio2RDF Documentation. Available at http://bio2rdf.org/ [15] Ding, L., Lebo, T., Erickson, J. S., DiFranzo, D., Williams, G. T., Li, X., Michaelis, J., Graves, A., Zheng, J. G., Shangguan, Z., Flores, J., McGuinness, D. L., and Hendler, J. 2010. TWC LOGD: A Portal for Linked Open Government Data Ecosystems. In JWS special issue on semantic web challenge’10. Ayrton Nádgel is an undergraduate student at the Federal Institute of Education, Science and Technology of Paraíba (IFPB), Brazil. He is also a member of a research project at IFPB. His main research interests regard Semantic Web and Linked Data. Naftali França is an undergraduate student at the Federal Institute of Education, Science and Technology of Paraíba (IFPB), Brazil. He is also a member of a research project at IFPB. His main research interests regard Semantic Web and Linked Data. Bruno Paulino is an undergraduate student at the Federal Institute of Education, Science and Technology of Paraíba (IFPB), Brazil. He is also a member of a research project at IFPB. His main research interests regard Semantic Web and Linked Data. Damires Souza obtained her PhD (doctorate) in Computer Science from the Federal University of Pernambuco (UFPE), Brazil. She is currently an Associate Professor at the Federal Institute of Education, Science and Technology of Paraiba (IFPB), Brazil. She is also the coordinator of some research projects at IFPB. Her main research interests are concerned with the areas of databases and semantic web. Walter Travassos is a master student in Computer Science at the Federal University of Pernambuco (UFPE), Brazil. He is a member 158 ANAIS ELETRÔNICOS V ENUCOMP Utilização de Realidade Aumentada e Dispositivos Móveis para Auxiliar na Manutenção de Instrumentos de Medição de Barragens T.A.Nardi; F. F. F. Peres Abstract— This paper presents a prototype for a solution using Augmented Reality (AR) and mobile devices technologies to resolve a problem occurred in Itaipu, where new employers has no knowledge about how to do maintenance in old measuring instruments. The goal is present the system that was proposed, and show the reported difficulties found in development by the tests in laboratory,and defining a proposal of how to resolve this difficulties with the help of knowhow from the technical engineers ifItaipu. formas de realizar a identificação de objetos reais (tracker) por meio desta ferramenta. Por fim a seção VI e VII apresentam respectivamente as informações sobre o sistema proposto através da identificação das principais considerações da construção do mesmo e dos principais aspectos de arquitetura definidos para construção do mesmo e os resultados obtidos até o momento. A seçãoVIII apresenta as conclusões obtidas. II. REALIDADE AUMENTADA Keywords—Augmented Reality, Mobile Devices, Measuring Instruments. I. INTRODUÇÃO E M canteiros de obras e construções de barragens de concreto e enrocamento existe uma preocupação constante com o estado do solo, de sua fundação principalmente por questões de segurança. Para isto a engenharia utiliza de diversos recursos para realizar monitoramento constante do solo através de instrumentos que medem vibrações, deslocamentos, densidade, etc[1]. Em Itaipu, funcionários necessitam realizar manutenções em diversos instrumentos de mediçãonecessitando de conhecimento para tal. Estas manutenções são, muitas vezes, com periodicidade longa e podem envolver a troca de peças caras, sendo que seu manuseio correto é muito importante para não danificar a peça e encarecer a manutenção. Para diminuir tal problema Itaipu, através da gestão de conhecimento, procura formas para disseminaro conhecimento aos novos funcionários. Este artigo apresenta estudos realizados sobre a tecnologia de realidade aumentada e dispositivos móveispara elaboração de sistemas para auxiliar a manutenção de extensômetros de haste múltipla, um dos instrumentos utilizados para medição em barragens. Sendo assim este artigo apresenta na seção II, informações sobre a tecnologia de realidade aumentada, informando seus principais elementos e aplicações. A seção III apresenta informações de uso dos extensômetros de haste múltipla, em Itaipu, alvo do estudo de casos deste artigo. A seguinte (seção IV) diz a respeito da construção de sistemas de realidade aumentada em dispositivos móveis, trazendo informações sobreo Android e sobre sua arquitetura em camadas para construção de aplicativos. A seção V apresenta informações sobre o núcleo da SDK QualcommVuforia, ferramenta escolhida para implementar este sistema, e sobre as possíveis T. A.Nardi, Acadêmico da Universidade Estadual do Oeste do Paraná (Unioeste), Foz do Iguaçu, Paraná. F. F. F. Peres, Docente da Universidade Estadual do Oeste do Paraná (Unioeste), Foz do Iguaçu, Paraná. A realidade aumentadapode ser entendida como uma tecnologia que realiza o meio campo entre a realidade virtual e a telepresença (totalmente real). Para considerarmos um sistema como sendo de realidade aumentada o mesmo deve conter três elementos chave: combinar real e virtual, ser interativo em tempo real e deve ser registrado em 3D [2]. As principais áreas potenciais para criação de aplicações usando esta tecnologia segundo Azuma são [2]: Medicina:suporte para visualização médica em geral na sala de cirurgia. Realidade aumentada pode ser usada para reduzir o tamanho das incisões médicas geradas em pequenas cirurgias, através do mapeamento 3D dos órgãos e partes afetadas do paciente; Manufatura e reparo:úteis em atividades de fabricação de peças e materiais, além de reparo nos mesmos através da criação de tutoriais interativos.Esta é a área onde aplica-se a realidade aumentada neste artigo; Anotações e Visualização: compartilha informações em ambientes públicos, por exemplo,um sistema de realidade aumentada pode apresentar informações sobre livros de uma biblioteca; Planejamento de trajetória de Robôs: existem casos no qual existem atrasos consideráveis de tempos e consumo de recursos no controle de robôs a distância. Neste caso utiliza-se a realidade aumentada para realizar simulações e analisar o ambiente antes de se efetuar o comando. Por exemplo: robôs em expedições espaciais no planeta Marte; Entretenimento: exemplo clássico de aplicação da realidade aumentada. Como grande ponto de estimulo para o seu uso tem-se o fato de que a indústria de cinema considera em determinados casos mais barato construir objetos de cenário em 3D e mistura-los a uma cena real do que construir de fato o objeto; Aviação Militar: arealidade aumentada auxilia o piloto em cálculos de trajetórias de mísseis e colisões. 159 ANAIS ELETRÔNICOS V ENUCOMP A. Principais elementos de um sistema de RA A construção de sistemas de realidade aumentada requer três principais subsistemas. O primeiro subsistema é o gerador de cenas, responsável por misturar elementos reais e virtuais e gerar a cena de realidade aumentada. O segundo subsistema é o display, estes por sua vez é dividido em display ótico e display de vídeo. A diferença destes displays está no fato de que através do display ótico o usuário pode ver o mundo real diretamente e no display de vídeo o usuário vê o mundo através de um monitor. E por fim, o rastreamento e detecção, também denominados trackers, são utilizados pelos sistemas de realidade aumentada paramapear posições no mundo real, definindo informações como ângulo, campo de visão, etc [3]. III. EXTENSÔMETRO DE HASTE MÚLTIPLA Extensômetros de haste são instrumentos utilizados pela engenharia para auxiliar de forma geral em medições do solo em fundação de barragens. São compostos por uma cabeça que é fixada sob a superfície e hastes metálicas de diversos comprimentos chumbadas na rocha. Através da cabeça medese a tensão aplicada pelo solo à haste, possibilitando a medição de deslocamentos. Extensômetros podem ser demedição manual ou automática. Quando automática, sua cabeça é composta por um conjunto de transdutores (um para cada haste), que são dispositivos que convertem os sinais da tensão para o formato digital, permitindo o armazenamento em intervalos de tempos. Em Itaipu, existem 146extensômetros instalados em sua fundação, barragens de concreto e enrocamento, auxiliando no monitoramento de deslocamentos verticais (medição de recalques do solo) e deslocamentos horizontais (cisalhantes). O sistema proposto pelo artigo pretende ser usado por profissionais para auxiliar na manutenção destesextensômetros, ajudando no processo de substituição detransdutores. Segundo levantado por Moreira [7], para realização da manutenção nos extensômetros de Itaipu, os técnicos realizam os seguintes passos: 1. Remover a tampa protetora; 2. Realizar leitura manual e automática do extensômetro para servir como base para comparação com a leitura realizada no final da troca do transdutor; 3. Retirar circulo protetor; 4. Retirar o parafuso lateral que regula a altura utilizando uma chave Allen de 5,5mm (7/32”); 5. Retirar a porta de suporte do Transdutor, utilizando uma chave de boca; 6. Rotacionar o transdutor para ambos os lados simultaneamente até encontrar o ponto de encaixe. Obs.: o transdutor deve estar travado neste momento e caso o mesmo não esteja travado, pode romper a corda vibrante que realiza as medições no extensômetro; 7. Remover o cabo que contecta o transdutor; 8. Remover o transdutor; 9. Inserir novo transdutor no local do antigo.Obs:deve-se remover o lacre do novo Transdutor antes da instalação; 10. Travar transdutor na base, rotacionando em sentido horário; 11. Passar o cabo pelo anel protetor da base; 12. Travar a porca de suporte; 13. Regular a altura; 14. Realocar parte protetora; 15. Realizar nova leitura e comparar com a anterior para verificar a calibragem do equipamento. IV. DESENVOLVIMENTO DE SISTEMAS DE RAEMDISPOSITIVOS MÓVEIS Para que sistemas de realidade aumentada possam ser construídos é necessário hardware capaz de capturar: vídeo, realizar processamento de dados e que possua alguma forma de exibir informações, como um display. Azuma[2] apresenta sistemas de realidade aumentada concebidos sob Head mounted Displays (HMDs), por serem na época os dispositivos que preenchiam estes requisitos e permitiam a mobilidade requerida pelos tecnologia. Atualmente os celulares evoluíram de forma que se tornou possível a construção de sistemas de realidade aumentada nos mesmos. Atualmente existem basicamente quatro plataformas que dominam o mercado de dispositivos móveis: Android, Black Barry, Symbian OS e IOS. O artigo foca na construção de aplicativos para Android, que está entre as plataformas mais populares atuais e possui desenvolvimento livre de custo com licenças[3]. Visão geral da Arquitetura Android Android é um Sistema Operacional (SO) desenvolvido pelo Google. É organizado em camadas (figura 1). Cada camada agrupa um conjunto de programas com objetivos e funcionalidades em comum. Estas camadas são organizadas como uma pilha e sua base é o Kernel. Para construção deste Kernel baseou-se na versão 2.6 do Kernel do Linux. O conjunto de programas do próximo nível contém as bibliotecas básicas do SO (exemplo: gravação e reprodução de áudio, aceleração tridimensional, vídeo, etc.). A próxima camada contém frameworks de aplicações.Inclui programas que gerenciam funções básicas do telefone e dão suporte à aplicações de forma geral. E por fim, está a camada de aplicativos, onde estão todos os aplicativos que o usuário final pode acessar [6]. Estrutura básica de aplicativos Os aplicativos construídos para Android devem levar em consideração quatro tipos básicos de estruturas: Atividades, toda tela que a aplicação exibe ao usuário; Objetivos, eventos disparados dentro da aplicação para troca de Ativiades; caso o programa tenha tenha alguma estrutura de Serviço associada, o mesmo pode continuar sendo executado mesmo tendo sua Atividade fechada pelo usuário; por fim, temos o Provedor de Conteúdo, responsável por compartilhamento de conteúdo entre as aplicações. 160 ANAIS ELETRÔNICOS V ENUCOMP ImageTracker: Cada novo marcador deste tipo é ranqueado de zero a cinco pontos pela ferramenta, dependendo da complexidade dos elementos contidos na imagem. O website de ferramenta destaca uma nota de instrução informando que não é aconselhável o uso de imagens que apresentam ranqueamento inferior a três. Para uma imagem ser considerada boa ela deve possuir: alto número de elementos ao longo de toda a imagem e bem distribuídos (sem espaços em branco), forte contraste entre os mesmos e os padrões contidos na imagem devem ser variados. A figura 2 apresenta uma imagem em sua versão original e sua versão após o mapeamento da ferramenta, apresentando um ranking cinco. Figura1. Organização da pilha de programas do SO Android. V. QUALCOMMVUFORIA A Qualcomm é um instituto de pesquisa que atua desenvolvendo soluções paradiversos tipos de tecnologias voltadas a informação. [4]. Dentre suas áreas de atuação está a RA, através do projeto denominado Vuforia. Esta sessão dedica-se em apresentar os principais aspectos desta SDK disponibilizada pela Qualcomm. A. Elementos do núcleo Vuforia Este tópico apresenta todos os elementos que caracterizam o núcleo de elementos da Vuforia [4]: Câmera: Comunica com hardware de câmera e assegura que as imagens capturadas foram transferidas eficientemente ao tracker. O desenvolvedor apenas tem controle de informar quando iniciar e quando pausar a captura de vídeo. Image Converter: Converte a imagem obtida pela câmera em um formato padronizado que seja compatível com o render utilizado. Tracker: Algoritmos de visão computacional que detectam objetos do mundo real analisando os frames da câmera. Podem ser dos tipos Target, Markers ou Buttons. Vídeo Background Render:Renderiza a imagem da câmera. Código da Aplicação: Deve instanciar e inicializar todos os elementos básicos do núcleo (descritos nesta sessão) além de manipular os marcadores, a lógica da aplicação e atualizar o render da camada gráfica (virtual) do sistema. Target Resources: Criados utilizando uma plataforma online disponível no site da Qualcomm. São estruturas utilizadas para representar os marcadores dentro do sistema. Trackables: Classe base que representa todo objeto do mundo real que a Vuforia pode rastrear. Todo marcador suportado pela SDK origina desta classe. B. Tipos de Trackers A SDK Vuforia permite desenvolver sistemas de realidade aumentada utilizando três tipos de marcadores: ImageTargets, Frame Markers e Buttons. O primeiro tipo de tracker reconhece qualquer imagem fornecida ao mesmo. O Segundo tipo reconhece marcadores fiduciais com códigos e o terceiro reconhece formas dentro de ImageTargets como botões de interação virtual com o usuário. A seguir apresentamos cada tipo de tracker. (a): Imagem original (b): Resultado do algoritmo para gerar o ImageTracker da Vuforia. Figura 2.Rankeamento da vufória com nível 5. Imagem apresenta todas as características consideradas fortes para reconhecimento pela ferramenta. Fonte: Qualcomm [8]. FrameMarker:Este tipo de tracker não é gerado online. A SDK disponibiliza 512 padrões diferentes de marcadores organizados de 0 à 511. A Figura 3 apresenta o padrão de design de todos os FrameMarkets, o ID deste exemplo é 0. A parte de cor laranjada da figura representa informações que podem ser customizadas no marcador e todo o resto deve ter o mesmo formato do original para que possa ser reconhecido. Buttons:Desenho de botões que podem ser adicionados em ImageTrackers e reconhecidos individualmente pela SDK. 161 ANAIS ELETRÔNICOS V ENUCOMP criada uma biblioteca compartilhada contento todas as funcionalidades necessárias utilizadas pelo sistema. Estas bibliotecas são carregadas na aplicação e acessadas via Java Native Interface (JNI). O JNI é um padrão de programação que permite com que a máquina virtual do Java (JVM) manipule códigos nativos de outros sistemas [5]. Para criar estas bibliotecas compartilhadas está sendo utilizado o AndroidNativeDevelopment Kit (NDK)[3], que fornece um conjunto de ferramentas para compilação independentes de plataforma (Windows, Linux, etc). Figura 3. Exemplo de FrameMarker padrão da ferramenta QualcommVuforia. Fonte [8]. VI. SISTEMA PROPOSTO Esta sessão dedica-se em apresentar o sistema proposto para auxiliar na manutenção do instrumento de medição Extensômetro de Haste Múltipla de Itaipu e suas principais características em termos de tecnologia utilizada para construção. Princípios da construção do sistema Para que este sistema possa ser utilizado de fato pelo técnico que realiza manutenção em extensômetros ele deve idealmente levar os seguintes fatores em consideração em sua construção: Tutorial passo a passo que auxilia no processo de manutenção do extensômetro; O extensômetro deve ser reconhecido in-situ; O extensômentro deve ser reconhecido preferencialmente sem adição de marcadores fiduciais; Como visto anteriormente, o código da aplicação de RA deve ter 3 preocupações básicas: manipular os marcadores, lógica particular da aplicação e manipular o render gráfico. Os tópicos a seguir descrevem a solução considerada para desenvolver cada parte do trabalho. Descrição das configurações de trabalho com a OpenGl ES OpenGL ES é a versão da OpenGL (API multiplataforma padrão da indústria de computação gráfica), especializada em aplicações embarcadas (EmbeddedSystems). Ela fornece funções na linguagem C/C++ e para sua utilização no sistema proposto foi adotada a mesma estratégia proposta para uso dos elementos da QualcommVuforia, que é a criação de uma biblioteca compartilhada através da Android NDK, utilizando JNI como padrão de comunicação. Objetos 3D:Os objetos 3D carregados no sistema (tais como setas indicadoras, ferramentas e o próprio extensometro 3D), são provenientes das ferramentas Blender 3D e SolidWorks. A biblioteca OpenGL gerada para realizar animações erenderizar os gráficos da cena do sistema utilizam Array com coordenadas para representar cada objeto, estas coordenadas representam os vértices, as normais, a coordenada das texturas e os índices do objeto. Construção dos marcadores Para construção de marcadores foi optado inicialmente pelos ImageTargets. A figura 4 apresenta o resultado do processo de detecção dos marcadores ImageTargets gerados pela ferramenta da Vuforia para detecção do extensômetro exemplo utilizado na aplicação. Para ambas as imagens o ranking do sistema foi zero. Descrição do ambiente de trabalho para desenvolvimento de aplicações Android Para desenvolvimento de sistemas para a plataforma Android é utilizado por padrão a linguagem de programação Java. Para construção deste sistema foi configurado o ambiente de desenvolvimento utilizando a ferramenta Eclipse, onde foi instalado oAndroidDevelopment Tools (ADT), que permite configuração de máquinas virtuais de teste e geração de aplicativos para Android e instalado o Android SDK, para suporte às funcionalidades básicas da plataforma. Para testes unitários na criação do sistema está sendo utilizado um dispositivo Galaxy Y Samsung, com Android 2.3.6 instalado. A API disponibilizada para programaçãoAndroid é contabilizada em níveis conforme atualização da mesma. Para a construção deste sistema está sendo utilizada como base a API nível 10, suportada porAndroid 2.3 e superiores. Descrição das configurações para trabalho com a SDK QualcommVuforia A SDK da Vuforia é escrita nas linguagens C/C++. Para ter acesso as suas funções na aplicação escrita em Java está sendo 162 (a) ANAIS ELETRÔNICOS V ENUCOMP (b) Figura 4.Imagens (a) superior e (b) lateral da cabeça do extensômetro de haste múltipla utilizado para realizar os testes. Figura 5.Screenshoot da aplicação rodando em sistema Android, reconhecendo o marcador FrameMarker. VII. RESULTADOS OBTIDOS O sistema está em fase final de desenvolvimento, onde estão sendo finalizadas animações 3D e implementados os passos do tutorial de acordo com levantado por Moreira [7] junto a especializas.Os marcadores estiloImageTargetsutilizados na construção de um protótipo inicial de teste da SDK apresentou baixo desempenho em testes de uso em laboratório devido a simplicidade das imagens (o algoritmo da Vuforia reconhece melhor imagens complexas) e devido ao fato de que utilizar imagens sólidas (fotografia 2D) limitam fortemente a faixa de angulação na qual o dispositivos de vídeo reconhece o objeto 3D. Estes problemas aconteceram por que a tecnologia ImageTargets da QualcommVuforia é fortemente voltada para o reconhecimento do ambiente via marcadores, ou seja, é necessário que o ambiente seja modificado com a adição de marcadores para que o mesmo possua desempenho relevante. Para correção deste problema e dar continuidade ao desenvolvimento do sistema, optou-se por utilizar os marcadores do estilo Frame Markers. Tal decisão irá introduzir os benefícios de apresentar melhor desempenho em laboratório e consequentemente in-situ (ambientes externos ao laboratório possuem maior número de condições adversas como, por exemplo, iluminação e clima, que dificultam a detecção da imagem) e irá introduzir como ponto negativo a necessidade de adicionar ao extensômetro um marcador fiducial padronizado para reconhecimento pelo sistema. A figura 5 apresenta telas de uso do sistema em testes de laboratório. VIII. CONCLUSÃO Os esforços realizados para o desenvolvimento do trabalho até então identificaram que é necessário um entendimento maior sobre a diferença de uso pelo técnico de Itaipudo sistemas utilizandomarcadores fiduciais e os que não necessitam. Foi descoberto que a SDK da QualcommVuforia em sua atual versão não suporta reconhecimento sem marcadores, denominados pelo mercado marklesstracking, que permitem reconhecimento de objetos 3D do mundo real. Durante todo o processo tentamos utiliza a solução ImageTargets como tecnologia para substituir o uso de marcadoresmarcadores, o que resultou em um sistema que não reconhecia o aparelho, obrigando a mudança para FrameMarkers, que são marcadores fiduciais tradicionais. Como proposta para evolução está sendo proposto o estudo da diferença das abordagens, algoritmos envolvidos e casos de uso. O resultado final também possibilitou constatar que a ferramenta QualcommVuforia não implementa algoritmos de oclusão de objetos, fazendo com que no efeito final o objeto 3D sempre apareça sob a imagem real, neste caso, propõe-se o estudo de algoritmos de oclusão para adição futura na ferramenta. A maior dificuldade encontrada durante a produção foi definir de forma sistemática a posição relativa do objeto 3D com o objeto real. Através da Vuforia o programador apenas tem acesso a posição no espaço 3D do marcador e pode posicionar objetos 3D partindo desta posição relativa, não levando em consideração particularidades do extensômetro. Neste caso foi posicionado através de tentativa e erro os objetos no espaço 3D até se alcançar uma posição relativa aceitável pelo usuário. Esta questão pode ser foco de desenvolvimento de novas tecnologias pois é uma demanda de incremento que se fosse implementada pouparia grande esforço no desenvolvimento (cerca de 30% do tempo gasto no 163 ANAIS ELETRÔNICOS V ENUCOMP desenvolvimento da ferramenta foi sob o posicionamento de forma aceitável pelo usuário final). REFERÊNCIAS [1] [2] [3] [4] [5] [6] [7] [8] J. F. A. Silveira,Instrumentação e Segurança de Barragens de Terra e Enrocamento,Oficina de Textos, 2006. R. Azuma, “A Survey of Augmented Reality”, Teleoperators and Virtual Enviroments, Vol. 6, 1997. Google,“Android Website”,Disponível em: www.android.com, 2012. Qualcomm, “QualcommVuforia Website”,Disponível em: www.qdev.net. Sun Microsys, “Java Website”, Disponível em: www.java.com. J. Strickland. A Arquitetura do Android. Disponível em: http://informatica.hsw.uol.com.br/google-phone2.htm,.2012. T. Moreira, “Auxílio na Manutenção de um Extensômetro Utilizando Realidade Aumentada”,Unioeste, 2011. Qualcomm, “QualcommVuforia Website”, Disponível em: https://ar.qualcomm.at/qdevnet/developer_guide/Target%20Manageme nt%20System, 2012. 164 ANAIS ELETRÔNICOS V ENUCOMP QoSTVApp:Uma Aplicação Semântica para o SBTVD M. S. Couto, V. L. da Silva, C. Mª F. A. Ribeiro Abstract— The warranty of a certain level of Quality of Service (QoS) is a key requirement in many interactive applications used in Brazilian Digital TV System (SBTVD). This study aims to analyze the QoS requirements, and for this, we created a semantic model for knowledge representation through an ontology covering the various elements that can impact on the quality levels set by interactive applications. The created model focuses on SBTVD, and we believe it can help in the automated reasoning on the feasibility of tasks and interactive applications, considering the work on different technological circumstances. Keywords— Digital Television, Interaction, Quality of Service. I. INTRODUÇÃO O modelo da TV Digital oferece aos usuários a oportunidade de novas experiências relacionadas à troca de informações, principalmente por meio da interatividade, o que possibilita o desenvolvimento de novos aplicativos e serviços. De acordo com [1], para prover comunicação através do canal de retorno é necessária a escolha de algum meio de transmissão (fibra óptica, rádio, satélite entre outros), considerando as características específicas de cada tecnologia e parâmetros limitantes do canal de comunicação (vazão, atraso e perda de pacotes). A seleção desses parâmetros em detrimento de outros, pode variar de um lado pela aplicação e, por outro lado, pelas tecnologias de comunicação disponíveis e seus fatores limitantes. No Brasil, dada as suas características de dispersão geográfica e assimetria na oferta de serviços de telecomunicação, é fundamental avaliar previamente o nível de interatividade que uma determinada aplicação pode proporcionar aos seus usuários. Concebido dentro de uma política nacional de oferta de serviços ao cidadão, o Sistema Brasileiro de TV Digital (SBTVD) precisa disponibilizar meios de validação prévia da exequibilidade de aplicações interativas enquanto instrumento essencial de políticas sociais nacionais. Para a validação do modelo QoSTVModel utilizado neste trabalho, foram consideradas duas estratégias complementares. A primeira baseia-se nos dados apurados pelo simulador de rede, para identificar valores limitantes na utilização de tecnologias de retorno em cenários bem definidos. Esta estratégia esbarra na baixa escalabilidade e baixo desempenho para simulação de cenários mais realistas, que consideram, por exemplo, a quantidade provável de usuários em um bairro ou cidade. Para enfrentar este desafio, foram utilizados métodos estatísticos para análise e projeção de valores para cenários reais, de forma a permitir a avaliação do impacto da degradação do nível de qualidade de serviço (QoS) sobre as aplicações, mais especificamente sobre a interatividade. Considerando-se a heterogeneidade dos elementos envolvidos e a complexidade e dinamismo das relações entre os mesmos, optou-se por representar este conhecimento por meio de ontologias de domínio com a aplicação QoSTVApp. Tal tecnologia possibilitará, dentre outros benefícios, o raciocínio automatizado para verificação da exequibilidade de aplicações interativas em um dado contexto. Estes e outros conceitos que fundamentam a proposta estão descritos nas seções a seguir. II. CONTEXTO DO TRABALHO A evolução trazida pela TV Digital substitui o antigo modelo unidirecional e oferece ao telespectador um canal de interatividade para sua comunicação, possibilitando, desta forma, a troca de informações. O canal de interatividade ou canal de retorno é o meio através do qual os usuários conseguem interagir com o sistema. Os aplicativos interativos com recursos multimídia ainda estão em processo de desenvolvimento, com o surgimento de novos conteúdos e a construção de novos modelos e linguagens [2]. Portanto, é preciso gerenciar esse tipo de aplicativo em relação aos parâmetros necessários para a sincronização entre diferentes mídias e limites tecnológicos da comunicação. De acordo com [3], os aplicativos interativos que são disponibilizados na TV Digital precisam atender algumas características como usabilidade e aplicabilidade, para a aceitação dos usuários. A avaliação desta aceitação envolve questões subjetivas de difícil validação, tais como interesse pelo assunto. Contudo, a aplicação é um elemento importante que deve ser considerado para validação do modelo utilizado. III. SOLUÇÃO Com base neste cenário e nos desafios que o mesmo apresenta, foi utilizado o modelo denominado QoSTVModel, que conjuga os requisitos de QoS da aplicação interativa com os requisitos da tecnologia de acesso [4]. Os diversos elementos envolvidos no modelo são apresentados graficamente na Figura 1. No modelo QoSTVModel são explicitados os componentes ________________________ diretamente envolvidos com a interatividade, suas M. S. Couto, Instituto Federal do Sertão Pernambucano (IF Sertão), propriedades ou funções específicas e o relacionamento entre Ouricuri, Pernambuco, Brasil, [email protected] V. L. da Silva, Universidade do Estado do Rio Grande do Norte (UERN), os mesmos. Natal, Brasil, [email protected] A dinâmica entre os elementos sugere o envio do aplicativo C. Mª F. A. Ribeiro, Universidade do Estado do Rio Grande do Norte pela Estação de TV Digital, responsável pela difusão da (UERN), Natal, Brasil, [email protected] programação. O receptor, que possui propriedades específicas, 165 ANAIS ELETRÔNICOS V ENUCOMP tais como poder de processamento, capacidade de memória e portas de comunicação, é o equipamento que recebe e armazena o aplicativo que será disponibilizado ao usuário. Conforme [5], o usuário pode interagir com o aplicativo de forma local, intermitente ou permanente. Para a troca de informações, o receptor precisa estar conectado a uma determinada tecnologia de acesso, que restringe os requisitos de QoS (vazão, atraso e perda de pacotes) e possui características que a diferencia de outra, tais como: alcance, largura de banda, disponibilidade da rede e custo da infraestrutura. O provedor de canal de retorno é o responsável pela tecnologia de acesso a ser utilizada na última milha para o canal de retorno, e o provedor de conteúdo oferece acesso a serviços e conteúdos especializados aos usuários, por meio do provedor de canal de retorno. O termo ontologia passou a ser adotado por grupos de pesquisas para referenciar os conceitos e termos que podem ser utilizados para apresentar alguma área do conhecimento ou desenvolver uma representação. Uma ontologia determina um domínio, ou, mais formalmente, define uma conceitualização acerca dele [6]. Para o desenvolvimento da ontologia em relação aos conhecimentos sobre QoS em TV Digital, utilizou-se a ferramenta Protégé1. Essa ferramenta open source é baseada em Java e integrada ao framework Jena2, para construir aplicações da Web Semântica. O modelo criado é representado por meio de classes, apresentadas na Figura 2. Fig. 3. Representação das Classes e suas Relações IV. ESTUDO DE CASO E RESULTADOS Como estratégia de validação do modelo proposto, foram realizadas simulações por meio do Network Simulator-2 [7], para analisar os parâmetros da rede no cenário descrito. O NS2 é uma ferramenta poderosa para simulação de redes que cobre um grande número de aplicações, protocolos, tipos de redes, elementos de rede e modelos de tráfego. A noção de tempo no NS-2 é obtida através de unidades de simulação que podem ser associadas, para efeitos didáticos, a segundos. A rede é construída usando nós os quais são conectados por meio de enlaces. Quando é simulada uma rede cabeada, como é o caso deste trabalho, os parâmetros de um enlace precisam ser ajustados. Os agentes utilizados podem ser associados aos nós e eles são responsáveis pela geração de diferentes pacotes. A fonte de tráfego é uma aplicação à qual é associado um agente particular. Os agentes precisam de um receptor que receberá seus pacotes. A Figura 4 mostra a estrutura padrão dos objetos de simulação. Fig. 2. Representação das Classes O modelo também foi formalizado em uma ontologia de domínio, sendo este, representado por meio de classes e propriedades. A representação das classes da ontologia e as suas relações são vistas na Figura 3. Para representar o papel de cada componente do modelo de QoS utilizado na ontologia, foram utilizadas as propriedades de objetos, onde cada propriedade possui um domínio e uma imagem que são as classes que representam os componentes aos quais cada propriedade está relacionada. 1 2 http://protege.stanford.edu/ http://protege.stanford.edu/plugins/owl/jena-integration.html Fig. 4. Objetos de Simulação do NS-2 Neste trabalho, o cenário que serviu de base para as simulações representa o bairro Neópolis, na cidade de Natal, Rio Grande do Norte, a menor cidade em termos populacionais, dentre as sedes da Copa 2014. Neópolis possui aproximadamente 6481 residências, segundo os dados da Prefeitura do Natal [8]. A tecnologia escolhida foi a ADSL, uma das mais usadas para o acesso à Internet. O tráfego foi gerado entre os receptores e o provedor de canal de retorno, composto pelo link de dados do tipo assimétrico. Segundo [9], foi adotado um link de 1 Mbps para download e 300 Kbps para upload, valores geralmente ofertados pelas operadoras. A 166 ANAIS ELETRÔNICOS V ENUCOMP partir dessa transferência de dados, foi realizada a análise dos parâmetros de QoS: vazão, atraso e perda de pacotes. Foi gerado um tráfego entre os receptores e o provedor de canal de retorno, sendo que os dados como o tamanho dos pacotes e atraso do link para aplicações multimídia foram definidos como mostrado na Tabela I, para obter os dados mais próximos de uma aplicação interativa da TV Digital [10]. A partir dessa transferência de dados, foi realizada a análise dos parâmetros de QoS. TABELA I VARIÁVEIS CONSIDERADAS NA AVALIAÇÃO DE TÉCNICAS DE INTERAÇÃO DESCRIÇÃO VALORES Nº de nós Até 1000 Tamanho do Pacote 1500 bytes Atraso 20ms Taxa de Transmissão (download) 1 Mbps Taxa de Transmissão (upload) 300 Kbps O objetivo principal deste trabalho é, portanto, investigar e analisar requisitos de QoS no SBTVD por meio da aplicação semântica QoSTVApp, com a ênfase nos aplicativos e nas tecnologias de acesso para o canal de retorno. A. RESULTADOS Foi desenvolvida uma aplicação semântica, denominada QoSTVApp, que utiliza ontologia como base para o raciocínio automatizado. Esse aplicativo busca responder aos questionamentos de viabilidade técnica para provimento da interatividade, tanto por parte dos provedores quanto dos desenvolvedores de aplicações, como mostrada na Figura 5. A aplicação QoSTVApp utiliza as informações do QoSTVModel para definir a rota de comunicação dos elementos que compõem o SBTVD. Conforme previsto, o NS-2 apresentou queda progressiva de desempenho, a partir de 1000 aparelhos receptores. A partir de então, foi utilizada a técnica estatística da Regressão Linear Simples [11], que pode prever valores futuros de uma variável, para estimar um número maior de receptores utilizados para o cálculo das médias dos parâmetros de QoS em um cenário real utilizado na simulação. Por meio dos resultados obtidos nas simulações para a tecnologia ADSL, a análise de cada um dos parâmetros de QoS indica que após um determinado número de receptores não é mais possível garantir a entrega do serviço com qualidade. Mais especificamente, a interatividade do aplicativo tem o seu desempenho afetado quando a vazão da rede fica abaixo dos 100 Kbps [4]. De acordo com [12], em relação ao atraso, quanto maior for o seu valor, maior deverá ser o tamanho do buffer para garantir uma determinada reserva de dados. O valor desse parâmetro começa a prejudicar a aplicação quando fica superior a 0,5s, ou seja, em torno de 330 usuários conectados. Na Figura 6, a aplicação semântica apresenta os resultados para 200 receptores, sendo possível perceber que cada parâmetro de QoS está relacionado diretamente ao número de receptores conectados a tecnologia ADSL, utilizando o aplicativo interativo. De acordo com esse cenário, o provedor de acesso só poderia disponibilizar essa conexão para aproximadamente 330 receptores, sendo este, o número máximo de conexões com a garantia de que esse serviço não comprometeria os parâmetros de QoS, já que o atraso foi o maior limitador do número de receptores. Fig. 6. Resultados dos Parâmetros do QoSTVApp Fig. 5. Tela Inicial do Aplicativo QoSTVApp Estes resultados parciais, embora careçam de maior investigação, apontam claramente para a existência de um gargalo tecnológico. Tal fato pode limitar seriamente a adoção deste tipo de tecnologia em novos modelos de negócios e para o suporte às políticas públicas, indicando a necessidade de investimento na área. Se for considerada a assimetria na oferta de serviços de comunicação nas várias regiões do Brasil, é correto afirmar que este fato pode aprofundar o problema de exclusão digital existente atualmente. 167 ANAIS ELETRÔNICOS V ENUCOMP [6] V. CONCLUSÃO As mudanças trazidas pela TV Digital não se resumem apenas aos ganhos em relação à qualidade de áudio e vídeo. As aplicações interativas já estão sendo trabalhadas dentro do novo padrão de TV, associada às tecnologias de acesso, que criam um caminho para a troca de informações suscitando maior participação do telespectador. A aplicação semântica QoSTVApp, permite inferir sobre a exequibilidade da interatividade considerando requisitos da aplicação e do ambiente de execução. Utilizou-se o conhecimento representado no modelo e os dados obtidos na fase de validação para a construção de uma ontologia de domínio, a partir da qual os desenvolvedores de aplicativos interativos ou provedores de serviços podem usar os resultados do QoSTVApp para avaliar os parâmetros de QoS da comunicação. Como trabalho futuro pretende-se fazer a inclusão de regras de inferência para ampliar o raciocínio e a precisão das informações apresentadas pela aplicação semântica. REFERÊNCIAS [1] [2] [3] [4] [5] Campista, Miguel Elias M.; Moraes, Igor M.; Esposito, Pedro Miguel; Amodei Jr., Aurélio; Cunha, Daniel de O.; Costa, Luís Henrique M. K.; Duarte, Otto Carlos M. B.“The Ad Hoc Return Channel: a Low-Cost Solution for Brazilian Interactive Digital TV”. Grupo de Teleinformática e Automação, PEE/COPPE – DEL/POLI. Universidade Federal do Rio de Janeiro, Brasil. 2006. Gosciola, V. Roteiro para as novas mídias: do game à TV Interativa. São Paulo: Editora Senac, 2003. Margalho, M., Frances, R. and Wely, J. “Return path in Brazilian digital television with interactivity based on continuous signalization mechanism and qos bandwidth control”, Latin America Transactions, IEEE (Revista IEEE America Latina), 5(5):367 –372, Sep. 2007. Couto, M.S.; da Silva, V.L.; da Rocha, B.G.; Ribeiro, C.M.F.A. QoSTVModel: A semantic model for analysis of QoS in interactive applications for SBTVD. Information Systems and Technologies (CISTI), 2012 7th Iberian Conference on Publication 2012. Montez, C.; Becker, V. TV Digital Interativa: conceitos, desafios e perspectivas para o Brasil. Florianópolis: Ed. Da UFSC, 2005. 2ª edição. Gruber, T. R. Towards Principles for the Design of Ontologies Used for Knowledge Sharing. International Journal of Human and Computer Studies, v. 43, p. 907-928, 1995. [7] Issariyakul, T; Hossain, E. Introduction to Network Simulator NS2. Springer Publishing Company, 2008. ISBN: 0387717595. [8] Natal. Bairros de Natal / Secretaria Municipal de Meio Ambiente e Urbanismo. 2ª ed. SEMURB. Natal, 2010. [9] Caires, G. O. J. “Explorando a Tecnologia ADSL: Uma Ferramenta de Suporte ao Ensino Presencial e a Distância”. In Dissertação (Engenharia Elétrica). Universidade Salvador, Bahia. 2003. [10] Couto, M. S.; Costa, F. S.; Ribeiro, C. M. F. R. Simulação do Canal de Retorno na TV Digital via Network Simulator: uma proposta com a tecnologia ADSL. II Workshop Técnico Científico de Computação (WTCC), Mossoró - RN, p. 127 - 133, jun. 2011. [11] Charnet, R.;Charnet, E.M.R.; Freire, C.A.F.; Bovino, H. Análise de modelos de regressão linear com aplicações. Campinas, Editora da Unicamp, 1999. [12] Guojun, LU. Communication and Computing for Distributed Multimedia Systems. Artech House. 1996. Mailson Sousa Couto é graduado em Ciência da Computação pela Universidade Estadual do Sudoeste da Bahia (UESB), Vitória da Conquista, Bahia, Brasil, em 2009. Obteve o título de mestre em Ciência da Computação pela Universidade do Estado do Rio Grande do Norte (UERN), Natal, Rio Grande do Norte, em 2012. Atualmente é professor do Instituto Federal de Educação, Ciência e Tecnologia do Sertão Pernambucano (IF Sertão) e suas pesquisas se concentram na área de Qualidade de Serviço, Geoprocessamento e TV Digital. Vandeclécio Lira da Silva é estudante do curso de Ciência da Computação na Universidade do Estado do Rio Grande do Norte (UERN), integrante do Laboratório LUMEN trabalhando em projetos de TV Digital. Atualmente estagiando na SEPLAN-RN como programador. Suas áreas de interesse são: ASP, VB, SQL Server e TV Digital. Cláudia Mª Fernandes Araújo Ribeiro possui graduação em Ciência da Computação pela Universidade Estadual do Ceará (1987), mestrado em Sistemas e Computação pela Universidade Federal do Rio Grande do Norte (1999) e doutorado em Ciência da Computação pela Universidade Federal de Pernambuco (2004). Atualmente é professora adjunta da Universidade do Estado do Rio Grande do Norte (UERN) e do Instituto Federal do Rio Grande do Norte (IFRN). Tem experiência na área de Ciência da Computação, com ênfase em Sistemas Distribuídos, atuando nos seguintes temas: SOA, Web Semântica e Especificação Formal de Sistemas. Fig. 1. Modelo de Interatividade - QoSTVModel 168