ERCEMAPI_2010

151
ERCEMAPI 2010 Escola Regional de Computação Ceará - Maranhão - Piauí Editora Sociedade Brasileira de Computação - SBC Livro Texto dos Minicursos Livro Texto dos Minicursos Organizadores Iális Cavalcante de Paula Júnior Andréa Carneiro Linhares

Transcript of ERCEMAPI_2010

Escola Regional de Computao Cear - Maranho - Piau

ERCEMAPI 2010

Livro Texto dos MinicursosEditora Sociedade Brasileira de Computao - SBC Organizadores Ilis Cavalcante de Paula Jnior Andra Carneiro Linhares

Escola Regional de Computao Cear - Maranho - Piau

ERCEMAPI 2010

IV Escola Regional de Computao Cear - Maranho - Piau 11 e 12 de novembro de 2010 Sobral - CE

Livro Texto dos MinicursosEditora:Sociedade Brasileira de Computao - SBC

Organizadores:Ilis Cavalcante de Paula Jnior Andra Carneiro Linhares

Realizao:Universidade Federal do Cear - UFC

Promoo:Sociedade Brasileira de Computao - SBC

Escola Regional de Computao Cear, Maranho, Piau (2010: Sobral, CE) Escola Regional de Computao Cear, Maranho, Piau: livro texto dos minicursos, 11 e 12 de novembro de 2010. [livro eletrnico] / organizadores, Ilis Cavalcante de Paula Jnior, Andra Carneiro Linhares. Sobral: Sociedade Brasileira de Computao SBC, 2010. 142p. : il. ; livro eletrnico. Realizao: Universidade Federal do Cear - UFC. Promoo: Sociedade Brasileira de Computao SBC. ISBN 978-85-7669-251-5 1. Computao; Cincia da Computao; I. Paula Jnior, Ilis Cavalcante de. II. Linhares, Andra Carneiro. III. Ttulo. CDD 004.1

PrefcioA Escola Regional de Computao Cear - Maranho - Piau (ERCEMAPI) um evento anual, realizado desde 2007, cujo objetivo promover a disseminao de conhecimentos e experincias agregando isso s instituies de ensino superior dos estados do Cear, Maranho e Piau. Apesar de sua nfase regional, desde sua primeira edio, contou com a participao de convidados e palestrantes de diversas localidades do pas. Esta escola regional promovida pela Sociedade Brasileira de Computao (SBC). Esta quarta edio da ERCEMAPI foi a primeira a publicar, em forma de livro, os textos de apoio dos minicursos apresentados dentro da programao do evento. Tpicos recentes de pesquisa e temas atuais de interesse das comunidades dos estados do Cear, Maranho e Piau so abordados de forma prtica e didtica. Foram recebidas vinte e uma propostas de minicursos, todas de muito bom nvel, o que demandou um minucioso trabalho de seleo das mesmas. A edio de 2010 oferece, sete minicursos aos participantes da ERCEMAPI com temas nas reas de: aplicaes para TV digital, algoritmos de viso computacional com OpenCl e CUDA, desenvolvimento web, testes de aceitao, traduo e interpretao de linguagens de domnio especfico, empreendedorismo e computao em nuvens. Este volume se inicia com uma discusso sobre o desenvolvimento de aplicaes declarativas para TV digital, na linguagem NCL, mescladas com cdigo imperativo em NCLua. Primeiramente, so apresentados conceitos bsicos de NCL e Lua e, em seguida, abordados os paradigmas de autoria declarativa e imperativa, entremeados por exemplos de crescente dificuldade descritos ao longo do curso. O Captulo 2 leva ao estudo da otimizao de algoritmos de viso computacional. Por quase sempre abordarem complexas estruturas de dados, o processamento desses algoritmos pode requerer um auxlio para a reduo de seu custo computacional. A integrao de OpenCL, que instrui execues em mltiplas instncias simultaneamente, e CUDA, levando o processamento grfico unidade de hardware especfica, contribuem para a execuo mais precisa dos algoritmos aqui apresentados. O Captulo 3, aborda-se a ferramenta livre Joomla para criao de websites. Seu uso muito difundido na internet e diversas organizaes vm adotando-a principalmente em seus veculos de divulgao e comunicao. Uma caracterstica que amplia sua adoo que no se exige conhecimento em programao por parte do usurio de Joomla, mesmo produzindo pginas web na linguagem PHP. O Captulo 4 volta-se para desenvolvimento de software dirigido por testes de aceitao. Apresenta-se aqui uma prtica de programao muito mais relacionada a definir as expectativas quanto ao comportamento do cdigo de um software, e fazer com que isso guie a implementao que est sob teste.

O Captulo 5 apresenta uma viso geral das linguagens de domnio especfico (do ingls: Domains Specific Languages - DSLs) e a ferramenta ANTLR (ANother Tool for Language Recognition). Esta direcionada para a construo de tradutores e interpretadores para DSLs, ou seja, uma ferramenta para implementao de linguagens de programao, que traz um desenvolvimento de software com representao mais natural que linguagens j conhecidas. O Captulo 6 engloba conceitos de empreendedorismo em Tecnologia da Informao (TI), como e-empreendedor e negcios digitais. Alm disso, inclui-se nessa discusso o papel do profisisonal de TI como gestor em uma organizao. interessante e motivante notar na Computao exemplos e discusses sobre os infindveis campos de atuao, recursos gratuitos de apoio na internet, maior diversificao e capacidade de abrangncia de um mercado global. O Captulo 7 encerra este livro trazendo tona uma das fortes tendncias assumidas na internet: computao em nuvens. A partir da apresentao de definies e conceitos a cerca de cloud computing, apresentada a montagem de uma infraestrutura privada para a disponibilizao de servios em uma rede de computadores especfica. O material aqui compilado resultado de um grande esforo por parte dos autores e ser de utilidade no apenas aos participantes dos minicursos, mas tambm a todos aqueles que desejem aprofundar seus conhecimentos nos diversos assuntos tratados.

Sobral-CE, novembro de 2010. Ilis Cavalcante de Paula Jnior Andra Carneiro Linhares

SumrioDesenvolvendo aplicaes interativas para TV Digital utilizando NCL e LuaFbio de Jesus Lima Gomes (IFPI), Danilo Arajo Portela (IFPI), Lacio Freitas Chaves (IFPI), Marcelo de Miranda Clementino (IFPI)

01

Utilizao do CUDA e OpenCL em Algoritmos de Viso ComputacionalThiago S. Santos (UFPI), Kalyf A. B. Lima (UFPI), Kelson R. T. Aires (UFPI)

21

Joomla 1.6Alexandre Marques Albano da Silveira (UFC - Campus de Sobral), Andra Carneiro Linhares (UFC - Campus de Sobral), Clemilson Costa Santos (UFC - Campus de Sobral)

40

Desenvolvimento Dirigido por Testes de AceitaoPedro de Alcntara Santos Neto (UFPI), Antonio Gabriel Di Atlanta Valente (UFPI), talo Linhares de Arajo (UFPI)

59

Traduo e interpretao de linguagens de domnio especfico com a ferramenta ANTLRCairo Antonio Oliveira Rocha (UFPI), Raimundo Santos Moura (UFPI)

83

Empreendedorismo e Gesto em TIPaulo Csar Coutinho dos Santos (UESPI)

101

Cloud Computing: Montagem uma Infraestrutura Privada 121Julio Cesar Damasceno (UFPE), Fernando Antonio Aires Lins (UFPE), Mrcio Almeida de Macdo (UFPE)

Comit de ProgramaCoordenao Geral:Ilis Cavalcante de Paula Jnior (UFC - Campus de Sobral)

Coordenao do Comit de Programa:Andra Carneiro Linhares (UFC - Campus de Sobral)

Comit de Programa:Andr Castelo Branco Soares (UFPI) Carlos Alexandre Rolim Fernandes (UFC - Campus de Sobral) Clemilson Costa dos Santos (UFC - Campus de Sobral) Daniel Benevides da Costa (UFC - Campus de Sobral) Davi Romero de Vasconcelos (UFC - Campus de Quixad) Emanuel Ferreira Coutinho (UFC) Enyo Jos Tavares Gonalves (UFC - Campus de Quixad) Erick Aguiar Donato (UFC - Campus de Sobral) Fabiana Gomes Marinho (UFC) Fernando Rodrigues de Almeida Jnior (UFC - Campus de Sobral) Francisco Heron Carvalho Junior (UFC) Francisco Nivando Bezerra (IFCE - Maracana) Gabriel Antoine Louis Paillard (UFC) George Allan Menezes Gomes (UFC) Gerardo Valdisio Rodrigues Viana (UECE) Gilzamir Ferreira Gomes (UVA - Sobral) Gisele Azevedo de Arajo (UFC - Campus de Sobral) Glaudiney Moreira Mendona Jnior (UFC) Ilis Cavalcante de Paula Jnior (UFC - Campus de Sobral) Jos Alex Pontes Martins (UVA) Jos Riverson Arajo Cysne Rios (UFC) Lincoln Souza Rocha (UFC - Campus de Quixad) Luis Henrique Pequeno Almeida (UFC) Marcelino Cavalcante Pequeno (UFC) Mardson Freitas de Amorim (UFC - Campus de Sobral) Miguel Franklin de Castro (UFC) Pedro de Alcntara dos Santos Neto (UFPI) Rafael Castro de Andrade (UFC) Raimir Holanda Filho (Unifor) Rodrigo de Melo Souza Veras (UFPI) Tarcisio Ferreira Maciel (UFC) Wellington Wagner Ferreira Sarmento (UFC) Wendley Souza da Silva (UFC - Campus de Sobral)

Escola Regional de Computao Cear - Maranho - Piau

ERCEMAPI 2010

Livro Texto dos Minicursos

Organizadores:Ilis Cavalcante de Paula Jnior Andra Carneiro Linhares

Captulo

1Desenvolvendo aplicaes interativas para TV Digital utilizando NCL e LuaFbio de Jesus Lima Gomes, Danilo Arajo Portela, Lacio Freitas Chaves, Marcelo de Miranda Clementino.

Abstract This course aims to disseminate and discuss concepts involved in developing applications for Interactive Digital TV using the Ginga-NCL. Besides presenting the main aspects of Ginga and its subsystem Ginga-NCL, this chapter presents the key elements and concepts of the languages NCL and Lua through examples and the integration between both languages in the same application. Resumo Este minicurso visa disseminar e abordar conceitos envolvidos no desenvolvimento de aplicaes para TV Digital Interativa utilizando o ambiente Ginga-NCL. Alm de apresentar os principais aspectos do Ginga e de seu subsistema Ginga-NCL, este captulo tambm apresenta os principais elementos e conceitos da Linguagem NCL e Lua atravs de exemplos prticos e tambm a integrao entre elas numa mesma aplicao.

1.1. IntroduoO Middleware Ginga, desenvolvido pela PUC-Rio e pela UFPB, o padro do Sistema Brasileiro de Digital como camada de aplicaes [ABNT 2007]. O Ginga uma camada de software que d suporte execuo de aplicaes interativas nos conversores digitais, esses ltimos instalados nas casas dos telespectadores. A arquitetura do Ginga composta tanto por um ambiente declarativo quanto por um imperativo, o que permite a alternativa mais adequada quando se est desenvolvendo aplicaes para TV Digital.

1

possvel, inclusive, fazer uso de uma ponte para desenvolver aplicaes declarativas com partes imperativas e vice-versa. O ambiente imperativo do Ginga, tambm chamado de mquina de execuo, a parte responsvel pelo suporte a aplicaes desenvolvidas usando a linguagem de programao Java. O ambiente declarativo, contedo abordado neste captulo, tambm chamado de mquina de apresentao, interpreta aplicaes desenvolvidas em Neste Context Language (NCL). Linguagens declarativas so, em geral, criadas para um determinado foco ou domnio e permitem a especificao de aplicaes em um nvel mais alto de abstrao quando comparadas a linguagens imperativas. Linguagens declarativas so voltadas para especificar a inteno final e no uma sequncia passo a passo para resolver um determinado problema, como e o caso de linguagens imperativas. Na implementao de um sistema de TVDI em um pas deve-se levar em considerao a realidade socioeconmica e cultural do mesmo. Como veremos a seguir as diferenas entre os sistemas existentes se d devido as diferentes necessidades de cada pas, assim como devido s tecnologias disponveis no momento em que foram criados.

1.2. SBTVD e GingaO sistema de TV Digital Interativa Brasileiro, chamado de SBTVD-T (Sistema Brasileiro de Televiso Digital Terrestre) foi implantado no final do ano de 2007 e possui o Ginga como middleware. O Ginga possui dois subsistemas responsveis pela implementao das aplicaes interativas, so eles o Ginga-NCL e o Ginga-J. O GingaNCL utiliza uma linguagem declarativa baseada em XML chamada NCL (Nested Context Language) para especificao de aspectos de interatividade, sincronismo espao-temporal entre objetos de mdia, adaptabilidade e suporte a mltiplos dispositivos, j o Ginga-J utiliza a linguagem Java ara a construo das aplicaes. Em um ambiente onde existem vrios tipos, marcas e modelos diferentes de hardwares responsveis para a decodificao do sinal digital (set-top-box), existe o problema da incompatibilidade entre os mesmos, o que poderia ser um problema em se falando de construo de aplicaes que sero distribudas indistintamente para todos os receptores. Como garantir que uma aplicao que execute bem em determinado modelo de set-top-box, funcione em outro? Para responder essa pergunta e solucionar tal problema que surge o conceito de middleware. O middleware uma camada de software que fica entre o sistema operacional e as aplicaes. Ele o responsvel por prover um conjunto de funes comum, padronizando o desenvolvimento de programas interativos. Uma vez que todas as aplicaes sejam construdas utilizando essas funes comuns, o middleware fica encarregado de se comunicar com os hardwares diferentes, agindo como um interprete entre as aplicaes, escritas seguindo um padro comum, e os sistemas operacionais e hardwares diferentes. Como dito anteriormente, o Ginga o middleware do SBTVD. Definido basicamente por pesquisadores das universidades UFPB e PUC-RJ, com participao de

2

pesquisadores da UFRN e UERN, ele est dividido em trs partes: O Ginga-NCL, Ginga-J e Ginga Common Core, como exemplificado na arquitetura da Figura 1.

Figura 1.1 Arquitetura do Ginga

Como podemos ver na Figura 1 as aplicaes escritas usando o Ginga-NCL pode utilizar tags NCL, tags HTML e scripts escritos na linguagem Lua. J a parte Ginga-J permite escrever programas usando a linguagem Java. Ainda permitido a criao de programas hbridos, no sentido de serem implementados em NCL e Java. Pois o Java pode ser considerado como uma mdia do NCL, e o Java pode manipular o NCL. A seguir entraremos em maiores detalhes sobre o Ginga-NCL e o Ginga-J.

1.3. Aplicaes para TVDIAs aplicaes de TV Digital Interativa podem estar ou no semanticamente associadas ao contedo do udio ou vdeo principal. Adicionalmente, elas podem definir ou no relaes de sincronismo entre objetos de mdia que a compem, entre eles o contedo principal (vdeo e udio). Uma aplicao de correio eletrnico, por exemplo, est sempre disponvel e no possui relao semntica com o contedo televisivo exibido. Por outro lado, uma aplicao que calcula o nvel de estresse em um programa de sade, por exemplo, poderia estar disponvel durante toda sua exibio. conveniente notar que, mesmo no havendo relaes de sincronismo dessas aplicaes com o udio e vdeo principal, tais aplicaes podem ser compostas de objetos que mantm relaes de sincronismo entre si Ainda um terceiro tipo de aplicao composto por aplicaes em que existe no s relao seus objetos de mdia e o udio e vdeo principal do programa televisivo, mas tambm um a relao de sincronismo. Esse exatamente o caso dos chamados programas no lineares. O termo no linear vem em contraposio forma sequencial linear que caracteriza os programas para a TV analgica. Nesses ltimos, existe um e apenas um caminho, sequencial de exibio. Ao contrrio, os programas no lineares so compostos de mltiplas cadeias de exibio, da regio onde o telespectador est inserido etc. O exemplo mais simples de um programa no linear aquele onde, em um dado instante de exibio, o usurio telespectador pode escolher entre formas alternativas de sua continuao. Note assim que o programa deixa de poder ser

3

representado por uma linha de tempo e passa a ter um fluxo de exibio que pode ser especificado por um grafo. Na grande maioria dos casos, a linguagem declarativa tende a ser a preferencial no desenvolvimento dos programas no lineares. Mais ainda, como em programas no lineares o sincronismo intermdia sem a interao do usurio deve ser to ou mais importante que a interatividade, o sincronismo de mdias em sua forma mais ampla, e no a interatividade deve ser o foco das linguagens declarativas, como o caso da linguagem NCL, proposta para o SBTVD. Outro aspecto importante para as aplicaes e a adaptabilidade. Ao agregar capacidade computacional TV, torna-se possvel fazer com que o terminal de acesso adapte o contedo de acordo com informaes de contexto referentes s preferncias ou localizao do usurio, ou ainda disponibilidade atual do terminal de acesso (capacidade de processamento, memria disponvel etc.). A adaptao pode no envolver apenas o contedo de cada objeto de mdia individualmente, mas tambm a prpria forma de apresentao. NCL prov suporte a ambos os tipos de adaptao. O suporte a mltiplos dispositivos de exibio tambm uma caracterstica importante no suporte interatividade em um sistema de TV digital. Atravs de mltiplos dispositivos de exibio ser possvel, por exemplo, que a interao de um usurio com o programa de TV traga novos objetos a serem exibidos em seu dispositivo particular de interao, sem que apaream na tela da TV, no atrapalhando, assim, uma audincia coletiva.

1.4. NCL (Nested Context Language)A linguagem NCL (Nested Context Language) uma linguagem declarativa para autoria de documentos hipermdia baseados no modelo conceitual NCM (Nested Context Model) e foi desenvolvida utilizando uma estrutura modular, seguindo os princpios adotados pelo W3C. Base do Ginga-NCL, a NCL define uma separao bem demarcada entre o contedo e a estrutura de um documento, provendo um controle no invasivo da ligao entre o contedo e sua apresentao e leiaute. Baseada no NCM (Nested Context Model), a NCL se utiliza dos conceitos usuais de ns e elos para descrever documentos hipermdia. Os ns (nodes) representam fragmentos de informaes, que podem ser de mdia ou de contexto, e elos (links) so usados para definio de relacionamentos entre os ns [Soares e Rodrigues 2005]. A figura 1.2 representa como esses ns podem ser aninhados, formando um conjunto de ns e elos, permitindo tornar a estrutura de um documento mais enxuta e organizada.

4

Figura 1.2. Representao do modelo NCM

Um documento NCL escrito em XML, e a estrutura de um documento NCL deve possuir um cabealho de arquivo, um cabealho do programa e o encerramento do documento. Ento para construir um documento hipermdia alm da estrutura acima, necessrio definir o que se quer tocar, onde, como e quando tocar. A listagem 1.1 mostra a estrutura bsica de um documento NCL.

Listagem 1.1. Estrutura de um documento NCL

Segundo SantAnna, Soares, e Cerqueira (2008), a estrutura bsica de um documento NCL define um elemento raiz, chamado de , e seus elementos filho, o elemento e , seguindo a terminologia adotada por outros padres W3C. 1.6.1. Definindo Regies Uma regio nada mais que uma rea na tela, que pode ser uma TV, celular, ou qualquer outro equipamento compatvel com a tecnologia, onde ser exibido o contedo de um n de mdia. Uma regio deve ser definida no cabealho do programa (), dentro da seo de base de regies (). Abaixo segue um exemplo de como definimos regies em um documento NCL (listagem 1.2).

5

Listagem 1.2. Definio de regies

De acordo com a listagem acima, ao definir uma regio, atribumos a ela um id nico no documento, nome que ser referenciado nos descritores das mdias associadas a esta regio. Uma regio pode ser aninhada outra regio para facilitar a definio de posicionamento e dimensionamento relativo entre regies. Os atributos height, width, left, e top definem a altura, largura, a coordenada esquerda e superior da regio. Utilizamos valores em percentagem, mas tambm podemos inserir valores em pixels. Podemos ainda definir ainda os seguintes atributos de regies: title: titulo da regio. right: coordenada direita da regio. bottom: coordenada inferior da regio. zIndex: utilizado para indicar, no caso de regies sobrepostas, quais regies aparecem sobre quais outras. Vale ressaltar que os atributos de posicionamento left e width tem precedncia sobre o atributo right, assim como os atributos top e height tem procedncia sobre o atributo bottom, caso todos os eles estejam especificados [Soares Neto 2007]. 1.6.2. Definindo Descritores atravs de descritores que associamos uma mdia a uma regio. Mas tambm atravs dos descritores que podemos definir a forma como a mdia ser apresentada, por exemplo, o volume de uma mdia de udio, o grau de transparncia de uma mdia de imagem, dentre outras propriedades. Os descritores devem ser definidos no cabealho do programa (), dentro da seo de base de descritores (). Toda mdia que usar aquele descritor, estar associada regio correspondente. Na listagem 1.3 conferimos um exemplo de como definir um descritor:

6

Listagem 1.3. Definio de descritores.

Deve-se, ao definir um descritor, atribuir um nome nico ao atributo id para ser utilizado nas referncias ao descritor, e associar ao atributo region, uma regio onde se deseja que a mdia associada seja apresentada. Alm desses atributos, podemos definir a durao ideal do objeto de mdia associado ao descritor atravs do atributo explicitDur ou at definir efeitos de transao para inicio e termino da apresentao de uma mdia atravs dos atributos transIn e transOut, respectivamente. A NCL define ainda dentro de um elemento de descritor, um elemento chamado descriptorParam. O descritptorParam define um parmetro do descritor como um par () onde se pode ajustar propriedades como volume (soundLevel), no caso de uma mdia que contem udio, ou tambm a intensidade da transparncia (transparency) de um uma imagem. Abaixo, na listagem 1.4, segue um exemplo de como utilizar o descriptorParam. Listagem 1.4. Definio de um parmetro de descritor.

Dentre os parmetros reservados para descritores, podem-se destacar os seguintes: fit: Modificar a mdia, especialmente vdeo e imagem, para que melhor se apresente em uma determinada regio, e poder receber como valor fill, hidden, meet, meetBest ou slice. bounds: modificar a posio e as dimenses do objeto de mdia. Trate-se de quatro nmeros separados por vrgula, na ordem , em formato de percentagem ou numero de pixels. transparency: numero real entre 0 e 1, onde 0 significa totalmente opaca e 1 totalmente transparente. 1.6.3. Definindo ns de mdia Na NCL, ns de mdia representam o contedo que desejamos apresentar em um programa audiovisual interativo, que pode ser desde vdeos, imagens, textos, dentre outros. Todo n de mdia definido dentro de um contexto, que no NCL o elemento

7

body o contexto onde contem todos os ns do documento, sejam ns de mdia ou contexto. A figura 1.3 ilustra um documento com seis ns de mdia, onde cinco esto dentro de contextos aninhados ao body.

Figura 1.3. Representao de ns de mdia e de composio (contexto).

Para definir objetos de mdia, devemos inserir o elemento dentro do elemento , onde cada objeto de mdia tem alguns atributos principais alm do atributo id: o atributo src que define um URI (Uniform Resource Identifier) do contedo do objeto, o atributo type, que define o tipo do objeto, e o atributo descriptor, identificador do descritor que controla a apresentao do objeto de mdia. Um exemplo de n de mdia o seguinte (listagem 1.5):

Listagem 1.5. Definio de um n de mdia

Vimos que neste exemplo foi criado um n de mdia fazendo referncia, atravs do atributo src, a um arquivo chamando video1.mpg que se encontra no diretrio media. Segundo a ABNT [NBR 15606-2 2007], os URIs devem estar de acordo com a tabela 1.1.Tabela 1.1. URIs permitidos Esquema file: http: rstp: Parte especifica do esquema //file_path/#fragment_identifier //server_identifier/file_path/#fragment_identifie r //server_identifier/file_path/#fragment_identifie r Uso Para arquivos locais Para arquivos remotos buscados pelo canal de interatividade usando o protocolo http. Para fluxos (streams) obtidos pelo canal de interatividade usando o protocolo

8

rtp: sbtvd-ts:

//server_identifier/file_path/#fragment_identifie r //program_id

rstp. Para fluxos (streams) obtidos pelo canal de interatividade usando o protocolo rtp. Para fluxos elementares recebidos pelo fluxo de transporte (TS).

Como vimos anteriormente, contextos so usados para estrutura o nosso documento hipermdia. Podemos definir contextos utilizando o elemento atribuindo um id como identificador nico dentro do documento (listagem 1.6).

Listagem 1.6. Definio de um contexto

1.6.4. ncoras Um n de mdia ou de composio tambm pode ter ncoras associadas. Atravs de ncoras possvel definir segmentos ou propriedades de um n de mdia. Existem dois tipos de ncoras: ncoras de contedo e ncoras de propriedade. Definido com o elemento dentro do elemento , as ncoras de contedo definem um segmento da mdia, como um intervalo de tempo, que poder ser utilizado como um ponto de ativao de elos. Como ocorre normalmente, o elemento deve ter um identificador nico para o atributo id. Abaixo, na listagem 1.7, so definidas trs ancoras de contedo para um n de vdeo. O atributo begin define o momento no qual a ncora ser ativada. J o atributo end determina o momento em que a ncora ser encerrada.

Listagem 1.7. Definio de ncoras de contedo.

9

As ncoras de propriedade definem propriedades de uma mdia e permitem que elas sejam manipuladas. Uma propriedade definida pelo elemento dentro do elemento . O elemento contem apenas os atributos name e value. Exemplos de propriedades so: volume de udio de um n de udio ou vdeo, coordenadas das dimenses de uma imagem, dentre outras. A listagem 1.8 exemplifica a criao de quatro propriedades, relativas ao posicionamento (top e left), altura (height) e largura (width) de um n de mdia.

Listagem 1.8. Definio de ncoras de propriedade.

No NCM, todo n (mdia ou contexto) deve obrigatoriamente possuir uma ncora com uma regio representando o contedo total do n. Essa ncora chamada de ncora de contedo total e declarada por omisso (default) em NCL. Cada vez que um componente NCL referenciado sem especificar uma de suas ancoras, deve-se obrigatoriamente assumir a ncora de contedo total. 1.6.5. Sincronizando com elos e conectores. At agora aprendemos a definir quais elementos de mdia sero apresentados, onde e como. Agora teremos que definir quando esses elementos sero apresentados. E a primeira coisa a fazer definir qual o primeiro n do documento a ser apresentado. Ento, deve-se criar uma porta no contexto body para esse n. A porta, representada pelo elemento , um ponto de interface de um contexto. Em outras palavras, para termos acesso a um determinado n interno a um contexto, este contexto deve possuir uma porta que leve ao n interno desejado. Um exemplo de definio de porta segue abaixo onde o atributo id define o nome da porta, nico, e o atributo component define que n ser acessado em um determinado contexto (listagem 1.9). Listagem 1.9. Definio de porta.

Em uma aplicao hipermdia mais elaborada requer que seja possvel para o autor especificar relacionamentos entre mdias. A NCL utiliza de relacionamentos do tipo: quando comear a exibio da mdia X deve terminar a exibio da mdia Y. Esse relacionamento entre ns escrito em NCL por meio de elos (). O comportamento desses elos dado por conectores, onde so definidas restries ou sentenas causais, onde uma determinada ao realizada quando uma condio satisfeita.

10

No NCM e na NCL, o sincronismo feito por mecanismos de casualidade e restrio definidos nos conectores (connectors). O conector define os papeis (roles) que os ns de origem e destino exercem nos elos que utilizam o conector, e ainda define condies (condition) sob as quais o elo pode ser ativado, e as aes (action) que sero realizadas quando o elo for ativado. Conceitualmente, conectores podem representar qualquer tipo de relao hipermdia, tal como relaes de referencia, relaes de sincronizao, relaes semnticas, relaes de derivao etc. Listagem 1.10. Definio de conector.

Acima, na listagem 1.10, vimos que os conectores so especificados no elemento dentro do cabealho (). Um conector causal deve possuir pelo menos uma condio e uma ao, alm de um identificador nico para o atributo id. O conector onEndStart indica a condio sob a qual o elo ser ativado (onEnd) e qual ao (start) ser efetuada quando da ativao do elo. Usualmente, os conectores so criados apenas uma vez, em um arquivo separado, para depois serem importados e reutilizados por diversas aplicaes NCL. Ao importar um conector, especificamos um apelido (alias) base de conectores, para que seja referenciado quando da criao de elos, e definimos onde o documento NCL deve procurar pela base de conectores atravs do atributo baseURI. Para importar uma base de conectores, podemos fazer o seguinte (listagem 1.11): Listagem 1.11. Importando base de conectores.

Um elo uma entidade NCM que possui duas propriedades adicionais: um conector e um conjunto de associaes a este conector [Soares e Rodrigues 2007]. Os elos (elemento ) associam os objetos de mdia (ns) atravs de conectores (connectors), que definem a semntica da associao entre os ns. Um elo criado utilizando-se conectores e aplicando ns de mdia ou contexto a papeis (roles) estabelecidos pelo conector.

11

Listagem 1.12. Definio de elo utilizando um conector importado.

A listagem 1.12, acima, descreve a criao de um elo. A NCL define id e xconnector como atributos de elos, onde o primeiro o identificador do elo, nico no documento, e o segundo faz referncia ao conector, que neste caso foi importado. O elemento bind indica um elemento envolvido no elo, indicando seu papel (role) no elo, conforme a semntica do conector. Um elo pode conter diversos elementos bind, e deve conter pelo menos um bind para papel definido no conector.

1.7. LuaA linguagem Lua (Ierusalimschy, 2006) foi criada na PUC-RIO em 1993, por Roberto Ierusalimschy, Luiz Henrique de Figueiredo e Waldemar Celes. O objetivo era criar uma linguagem portvel, simples, pequena e eficiente. Lua linguagem de programao de extenso, isto , o cdigo Lua deveria ser embutido em um programa hospedeiro para funcionar. A linguagem foi projetada para dar suporte programao procedural, mas oferece mecanismos para programao orientada a objetos, programao funcional e programao orientada a dados. Lua evoluiu e passou a ser uma linguagem auto-suficiente. Hoje a linguagem utilizada em vrios tipos de aplicaes, tais como: aplicaes para TV Digital, aplicaes web, aplicaes desktop, em jogos, em analisador de protocolos, em rastreador de redes de segurana etc. 1.7.1. Convenes e itens lxicos Os nomes ou identificadores na linguagem Lua podem ser qualquer cadeia de caracteres, dgitos e sublinhados, porm no podem comear com um dgito. Esses identificadores so utilizados para nomear variveis, funes e campos de tabelas. Algumas palavras no podem ser utilizadas como identificadores, por serem reservadas para uso da gramtica da linguagem (tabela 1.2).Tabela 1.2. Palavras reservadas. and end in repeat break false Return Do Nil then Else function true elseif if or until while

12

local

Not

A linguagem tambm define itens lxicos para definir operadores aritmticos, relacionais, de concatenao e de tamanho (tabela 1.3).Tabela 1.3. Itens lxicos. + == ( ; ~= ) : * = } . % < [ .. > ] ... # =

Lua uma linguagem case sensitive", ou seja, diferencia identificadores maisculos e identificadores minsculos. A definio do identificador ERCEMAPI vai ser interpretada de uma forma distinta de ercemapi. Um comentrio curto definido com um hfen duplo (--), desde que o hfen duplo seja definido fora de uma cadeia de letras e que no seja precedido de colchete longo. O comentrio longo definido com um hfen duplo, precedido de colchete longo e se estende at o fechamento do colchete longo (listagem 1.13).-- Comentrio de uma linha --[[ Esse um comentrio de mltiplas linhas]] Listagem 1.13 Comentrio curto e longo.

1.7.2. Variveis Variveis so lugares utilizados para armazenar determinados valores. Em Lua, por padro as variveis so globais. Para declarar uma varivel local, deve-se utilizar a palavra reservada local antes do identificador (listagem 1.14). Campos de tabelas tambm so tipos de variveis.name = ERCEMAPI - varivel global print(name) - ERCEMAPI

local name = ERCEMAPI - varivel local print(name) - ERCEMAPI Listagem 1.14 varivel global e local.

1.7.3. Atribuio Lua aceita atribuies mltiplas, mas no trata atribuio como uma expresso. Se houver mais valores do que variveis, os valores excedentes so descartados e se houver mais variveis do que valores, as variveis excedentes recebem nil (figura). Utiliza-se o operador de atribuio =, para atribuir um valor a uma varivel (listagem 1.15).

13

x = 3 - x igual a 3 x, y = 3, 2 -- x igual a 3 e y igual a 2

x, y, z = 3, 2 -- x igual a 3, y igual a 2 e z nil x, y = 3, 2, 1 -- x igual a 3, y igual a 2 e o valor 1 descartado

Listagem 1.15 atribuio.

1.7.4. Coero Lua fracamente tipada. Em operaes aritmticas entre string e number, a linguagem tenta fazer coero para number. Quando um number utilizado onde uma string esperada, o number convertido para uma string em formato razovel (listagem 1.16).

local x = x igual a local y = y local z = x..y print(z) - x igual a y

local value1 = 1 local value2 = 2 local value3 = value1 + value2 print(value3) - 3

Listagem 1.16 Coero.

1.7.5. Valores Lua uma linguagem dinamicamente tipada, ou seja, os valores possuem os tipos e no as variveis. Todos os valores so de primeira classe, logo os valores podem ser passados como argumentos, retornados como resultado, inclusos em uma estrutura de dados e armazenados em variveis. 1.7.6. Tipos A linguagem Lua conta com apenas 8 tipos: nil, boolean, number, string, function, userdata, thread e table. Os tipos userdata e thread no sero abordados no minicurso. A funo type retorna o tipo do argumento passado e a funo print imprime os argumentos passados. 1.7.6.1. Nil Representa a ausncia de um valor til. Toda varivel no inicializada tem o valor nil.local name print(type(name)) -- nil

14

Listagem 1.17 Tipo nil.

1.7.6.3. Number Equivale a um double de preciso dupla por padro, mas tambm representa nmeros inteiros. possvel construir interpretadores Lua que usem outra representao interna para nmeros.local value = 1 print(type(value)) -- number

Listagem 1.19 Tipo number.

1.7.6.4. String Representa cadeias de caracteres literais. Podem ser delimitadas atravs do uso de aspas simples ( ), aspas duplas ( ) e formato longo ([[ ]]) para escrever cadeias de caracteres que se estendem por varias linhas. As strings tambm podem conter sequncias de escape no estilo da linguagem C.local name = ERCEMAPI print(type(name)) - string

local name = ERCEMAPI print(type(name)) -- string

local name = [[ERCEMAPI]] print(type(name)) -- string

Listagem 1.20 Tipo string.

1.7.6.5. Function Representam as funes. Em Lua, as funes so valores de primeira classe e podem ter nenhum ou vrios parmetros e retornar nenhum ou vrios valores.function foo(x) print function end

oufoo = function(x) print function end print(type(foo)) function

15

Listagem 1.21 Tipo function.

1.7.6.6. Table Atravs do tipo table possvel representar em Lua arrays comuns, registro, grafos, rvores, tabelas de smbolos, classes, objetos etc. As tabelas podem conter todos os tipos de valores (exceto nil) (listagem 1.22).local t = {} - tabela vazia

local t = {1, ERCEMAPI, true} -- [[tabela com 3 valores. t[1] igual a 1, t[2] a string ERCEMAPI e t[3] o boolean true]]

local t = {name = ERCEMAPI} -- t[name] imprime ERCEMAPI e t.name imprime ERCEMAPI Listagem 1.22 criao de tabelas.

1.7.7. Operadores A linguagem Lua oferece um conjunto de operadores para realizar operaes aritmticas (tabela 1.4), relacionais (tabela 1.5), lgicas (tabela 1.6) e de concatenao (tabela 1.7). O operador de atribuio o sinal de =.Tabela 1.4. Operadores aritmticos. Operadores + * / % Adio Subtrao Multiplicao Diviso Mdulo Exponenciao Negao Tabela 1.5. Operadores relacionais. Operadores == ~= < > = Significado Igualdade Diferente Menor que Maior que Menor ou igual a Maior ou igual a Exemplo a == b a ~= b ab a = b Significado a+b a-b a*b a/b a%b ab -a ExemploTabela 1.6. Operadores lgicos. Operadores and or not E Ou No Tabela 1.7. Operador de concatenao. Significado a and b a or b not a Exemplo16Operadores .. ConcatenaoSignificado a..bExemplo1.7.8. Estruturas de controle Em determinada circunstncias necessrio executar algumas instrues baseadas em determinadas condies. Essas instrues sero executadas se uma condio for satisfeita ou repetir varias vezes a mesma estrutura at satisfazer uma condio. Lua prev algumas estruturas para controle do fluxo de execuo. 1.7.8.1. If then else O comando if .. then representa uma tomada de deciso e permite a seleo de dois ou vrios caminhos distintos em uma execuo, dependendo do retorno da expresso analisada. Se a expresso avaliada for verdadeira a parte then executada, seno a estrutura do else executada.local name = ERCEMAPI if name == ERCEMAPI then print(name) else print(name no igual a ERCEMAPI)Listagem 1.23 estrutura de controle if.1.7.8.2. While O while realiza um teste na expresso lgica na entrada da estrutura. Enquanto o teste for verdadeiro o bloco executado.t = {1, 2, 3} local i = 1 while t[i] do print(t[i]) - bloco a ser executado se o teste passar i = i + 1Listagem 1.24 estrutura de controle while.1.7.8.3. Repeat A estrutura repeat-until realiza um teste na expresso lgica em until. O bloco s termina depois da condio de until for satisfeita.17t = {1, 2, 3} local i = 1 repeat print(t[i]) i = i + 1 until t[i] == nilListagem 1.25 estrutura de controle repeat.1.7.8.4. For Em Lua, o comando for pode ser numrico ou genrico. O for numrico a interao inicia com valor de exp1, prosseguindo at exp2 com passos do tamanho exp3. Se exp3 for omitida, o passo 1.local exp2 = 6 local exp3 = 3 for exp1 = 1, exp2, exp3 do print(exp1) endListagem 1.26 for numrico.O for genrico utiliza funes iteradoras, como pairs e ipairs. A cada iterao, essas funes produzem um valor.t = {name = ERCEMAPI} for key, value in pairs(t) do print(key.. => ..value) - imprime name => ERCEMAPI endListagem 1.27 for genrico.1.8. Integrao NCL e Lua (NCLua)Um documento NCL reconhece um script NCLua como uma mdia (listagem 1.18), tal como uma imagem, vdeo etc. Quando o script iniciado, um objeto instanciado e atribudo a varivel global canvas. Esse objeto tem as mesmas dimenses definidas na regio da mdia NClua (listagem 1.28) e atravs desse objeto que as funes do mdulo canvas podem ser utilizadas. O mdulo canvas permite a possibilidade de fazer operaes grficas, tais como: desenhar crculos, linhas, retngulos, polgonos etc (listagem 1.20).Listagem 1.28 Definindo uma mdia NCLua.18A linguagem Lua tem bibliotecas padro para manipulao de strings, tabelas, entrada e sada de dados, funes matemticas, pacotes, sistema operacional, depurao e uma biblioteca com funes bsicas para a linguagem. A forma de integrao entre os objetos NCLua e os documentos NCL atravs do paradigma orientado a eventos, por isso a linguagem precisou ser estendida para tal integrao. Alm das bibliotecas padro, foram adicionados os seguintes mdulos para serem utilizados nos scripts NCLua: Mdulo Canvas: oferece uma API que permite a alterao e manipulao de primitivas grficas e imagens. Mdulo Event: permite que aplicaes NCLua tornem-se orientadas a eventos. Mdulo Settings: permite a manipulao de variveis definidas em um documento NCL e em variveis reservadas de um objeto do tipo aplication/xginga-settings. Mdulo Persistent: permite que variveis persistentes sejam acessadas e manipuladas por objetos imperativos.Um script NCLua pode interagir com diversas entidades, tais como: eventos do controle remoto, eventos do canal de interatividade, documentos NCL etc. Para que essa comunicao ocorra pelo menos uma funo tratadora deve ser registrada no script NCLua atravs da funo event.register (listagem 1.29).function handler(evt) ... end event.register(handler) -- registro da funo tratadora -- funo que trata os eventosListagem 1.29 Registro de uma funo tratadora de eventos.Um evento definido atravs de uma tabela Lua, onde class representa a classe do evento. Na linstagem 1.29, a tabela do evento indica que o boto vermelho foi pressionado, onde type pode ser press ou release, key o valor da tecla do controle.evt = { class =key, type = press, key = RED}Listagem 1.29 Registro de uma funo tratadora de eventos.O mdulo event define as seguintes classes de eventos: Classe ncl: representa o pressionamento dos botes do controle remoto pelo usurio. Classe user: Atravs dessa classe, aplicaes podem estender suas funcionalidades criando seus prprios eventos. Classe tcp: Permite acesso ao canal de interatividade por meio do protocolo tcp.19 Classe sms: Usada para envio e recebimento de mensagens SMS em dispositivos mveis. Classe edit: Permite que os comandos de edio ao vivo sejam disparados a partir de scripts NCLua. Classe si: Prov acesso a um conjunto de informaes multiplexadas em um fluxo de transporte e transmitidas periodicamente por difuso.Na norma ABNT NBR 15606-2:2007 [ABNT 2007], pode-se encontrar todas as funes do mdulo canvas e mais informaes sobre os mdulos que ainda no foram implementados.1.10. RefernciasABNT NBR 15606-2 (2007) Associao Brasileira de Normas Tcnicas, Televiso digital terrestre Codificao de dados e especificaes de transmisso para radiodifuso digital Parte 2: Ginga-NCL para receptores fixos e mveis Linguagem de aplicao XML para codificao de aplicaes, Sistema Brasileiro de TV Digital Terrestre, NBR 15606-2. Barbosa, S. D. J., Soares, L. F. G., TV digital interativa no Brasil se faz com Ginga: fundamentos, padres, autoria declarativa e usabilidade. Ierusalimschy, R. (2006). Programming in Lua, Segunda Edio. http://lua.org. NCL - Nested Context Language. http://www.ncl.org.br/, 2010 SantAnna, F. F. G., Soares Neto, C. S., Azevedo, R. G. A. e Barbosa, S. D. J. Desenvolvimento de Aplicaes Declarativas para TV Digital no Middleware Ginga com objetos imperativos NCLua. SantAnna, F. F. G., Soares, L. F. G. e Cerqueira, R. F. G., Nested Conext Language 3.0 Part 10 Imperative Objects in NCL: The NCLua Objects, 2008. Soares Neto, C. S. et al. Construindo Programas Audiovisuais Interativos utilizando a NCL 3.0 e a ferramenta Composer. 2007 Soares, L. F. G., Rodrigues R. F. Nested Context Model 3.0 Part 1 NCM Core, 2005. Soares, L. F. G. e Barbosa, S. D. J. (2009) Programando em NCL 3.0. So Paulo/SP. 1. ed. 2009.20Captulo2Utilizao do CUDA e OpenCL em Algoritmos de Viso ComputacionalThiago S. Santos, Kalyf A. B. Lima, Kelson R. T. AiresAbstract The Computer Vision can be viewed as an entity of automation and integration of a wide range of processes and representations used in perception, including techniques such as image processing and pattern classication. The high computational cost, from the techniques of data processing, requires a high processing power. In order to circumvent this problem, one solution is to use GPU (Graphics Processing Units). This paper presents an approach to the use of CUDA and OpenCL in Computer Vision. Experiments with edge detection algorithms and patterns will be undertaken in order to demonstrate the effectiveness of this method. Resumo A Viso Computacional pode ser vista como uma entidade de automao e integrao de uma larga extenso de processos e representaes usados na percepo, incluindo tcnicas como processamento de imagens e classicao de padres. O alto custo computacional, proveniente das tcnicas de processamento de dados, requer um poder de processamento elevado. Para contornar esse problema, uma soluo a utilizao de unidades de processamento grco (GPU - Graphics Processing Units). Este trabalho apresenta uma abordagem do uso do CUDA e OpenCL em Viso Computacional. Experimentos com algoritmos de deteco de borda e padres sero realizados, a m de demonstrar a eccia deste mtodo.2.1. IntroduoProcessamento para setores de viso computacional sempre requereram alto desempenho, os algoritmos utilizados no campo possuem excessivas repeties de clculos para os elementos do conjunto a ser trabalhado. Apesar de avanos no campo de processamento, o mesmo no ilimitado devido a leis fsicas.21A programao paralela j se mostrou eciente para a execuo de algoritmos com cargas de dados como os j mencionados, porm, a tecnologia se tornou mais vivel para o meio cientco devido ao seu custo. Seu valor se justicava pela forma de como era realizado, geralmente um computador principal que divide a execuo entre outros. Placas grcas so, em maioria, utilizadas como aceleradores de vdeo e tm seu verdadeiro potencial limitado. A tecnologia multi-nuclear das mesmas, motivo da evoluo no desempenho, tem princpios mais slidos e no esto restritos a processamento de imagens. As threads podem executar, de forma independente, linhas de cdigo, tal que, funcionam como super computadores, caracterstica ideal para a computao de alto desempenho. A nVidia, fabricante de ncleos grcos para computao, desenvolveu a tecnologia CUDA (Compute Unied Device Architecture), uma arquitetura para computao paralela. Esta permite utilizao dos ncleos da GPU de forma simultnea e independente para a execuo de blocos de cdigos, o que a levou a ser foco e ferramenta de trabalho. A tecnologia diminuiu o custo de hardwares para estudo do paralelismo e desenvolvimento de softwares prossionais e cientcos no setor de alto desempenho. As aplicaes para a tecnologia so diversas, simulaes fsicas, nanceiras, alm de qumicas pela dinmica de molculas para descoberta de novos remdios atravs do AMBER. Ainda assim, a que ainda continua atraindo ateno, o processamento grco utilizado principalmente para o setor robtico. Estima-se que todas as aplicaes brevemente utilizem a tecnologia, acelerando suas execues. Indstrias em geral estudaram os princpios da tecnologia CUDA e incorporaramnos em seus produtos, entre elas a rival AMD em sua tecnologia ATI Stream para as placas grcas ATI Radeon. Percebendo o potencial do processamento paralelo atravs de ncleos grcos e o aumento de vendas de computadores para ns cientcos que necessitavam de qualidades e desempenho superiores. A Apple propem o OpenCL como uma forma de padronizar a programao das GPUs e fez de seu sistema o primeiro a aderir ao framework. O OpenCL (Open Computing Language) nasce como a ferramenta ideal para programao paralela, compatvel com sistemas operacionais e dispositivos diversos, criando um modelo para desenvolvedores que desejam ao mximo a portabilidade de seus cdigos.2.2. CUDANVIDIA R CUDATM uma proposta de arquitetura de computao paralela desenvolvida pela nVidia. A arquitetura inclui o CUDA Instruction Set Architecture (ISA). Um ISA inclui uma especicao do conjunto de opcodes (linguagem de mquina), os comandos nativos implementados por um determinado processador, e o mecanismo de computao paralela na Unidade de Processamento Grco (Graphic Processor Unit GPU). Para programar para a arquitetura CUDA, os desenvolvedores podem optar por C, uma linguagem de alto nvel, capaz de executar com grande desempenho em um processador com suporte CUDA. A arquitetura CUDA foi desenvolvida com vrios objetivos em mente, entre eles:22 Fornecer um pequeno conjunto de extenses para linguagens de programao padro que permitem uma aplicao direta de algoritmos paralelos. Com CUDA os programadores podem focalizar na tarefa de paralelizao dos algoritmos ao invs de gastar tempo na sua implementao [1]; Ter suporte a computao heterognea onde aplicaes utilizam ambos, CPU e GPU. Partes seriais das aplicaes so executadas na CPU, e as parcelas paralelas so descarregadas para a GPU. A CPU e a GPU so tratadas como dispositivos separados que tm seus prprios espaos de memria. As GPUs com suporte CUDA tm centenas de ncleos que podem executar coletivamente milhares de threads. Cada ncleo tem recursos compartilhados, incluindo registradores e memria. A memria compartilhada nos chips permite a execuo de tarefas paralelas sobre estes ncleos para compartilhar dados sem envi-los atravs do barramento de memria do sistema. Impulsionado pela demanda de mercado por alta denio e processamento em tempo-real de grco 3D, as unidades de processamento grco tm evoludo para um processador de vrios ncleos com alto poder computacional, altamente paralelo e com uma larga banda de memria, como ilustrado na Figura 2.1 [1].Figura 2.1. Operaes Ponto Flutuante por Segundo.A razo por trs da alta diferena em termos de capacidade de ponto utuante entre a CPU e a GPU o fato da ltima ser especializada em computao intensiva e computao paralela. Especialmente acerca da renderizao de grcos, portanto, possui transistores dedicados ao tratamento de dados ao invs de armazenar dados ou de controle de uxo, esquematicamente ilustrado pela Figura 2.2. Outra especialidade da GPU consiste no fato de ela ser especialmente adequada para resolver problemas os quais podem ser expressos por clculos paralelos de dados com alta intensidade de aritmtica. Como o mesmo algoritmo executado para cada elemento de dado, no h tanta exigncia de controle de uxo sosticado. A latncia de23Figura 2.2. A GPU possui mais transistores para processamento de dados.acesso memria pode ser escondida com os clculos em vez de grandes caches de dados, visto que possui intensiva aritmtica. No processo de programao paralela, os elementos de dados so mapeados para trilhas de processamento (threads). Muitas aplicaes que processam grandes quantidades de dados podem utilizar um modelo de programao paralela para acelerar os clculos. Na renderizao 3D grandes conjuntos de pixels e vrtices so mapeados para threads paralelas. Da mesma forma, aplicativos, mdias e processamentos de imagens, tais como ps-processamentos de imagens renderizadas, codicao e decodicao de vdeo, ampliao de imagem, viso estreo, e reconhecimento de padres podem mapear blocos de imagens e pixels para threads paralelas. De fato, muitos algoritmos fora do campo de processamento de imagens so acelerados por processamento de dados paralelo, desde processamento de sinais gerais ou simulaes fsicas at nana computacional ou biologia computacional. A tecnologia CUDA uma proposta geral de arquitetura de computao paralela da nVidia. Em novembro de 2006, a nVidia introduziu CUDA como um novo modelo de programao paralela e ISA (Instrution Set Architecture) [1]. CUDA aproveita o mecanismo de computao paralela em GPUs nVidia para resolver muitos problemas computacionais complexos de maneira mais eciente do que em uma CPU. CUDA disponibiliza um software que permite aos desenvolvedores usar o C como uma linguagem de programao de alto nvel, outras linguagens ou interfaces de programao de aplicativos so suportadas, tais como FORTRAN CUDA, OpenCL, Phyton e computao direta. Tal integrao ilustrada na Figura 2.3. Um grande desao da computao paralela desenvolver um aplicativo escalvel ao aumento do nmero de ncleos, da mesma forma que aplicativos grcos em 3D que possuem transparncia a grandes variaes no nmero de ncleos. O CUDA projetado para superar este desao, mantendo uma baixa curva de aprendizado para programadores familiarizados com linguagens padres como C. Na essncia do CUDA existem basicamente trs principais hierarquias, Grupos de threads, Memria Compartilhada e Sincronizao, expostas como um conjunto mnimo de extenses da linguagem, como ilustrado na Figura 2.4.24Figura 2.3. CUDA desenvolvido para ter suporte a varias linguagens.Figura 2.4. Escalabilidade Automtica.2.2.1. Kernels CUDA C estende C permitindo ao programador denir funes C, chamadas kernels. Essas funes quando chamadas so executadas N vezes em paralelo por N threads CUDA. Os kernels so denidos utilizando-se o modicador de acesso _ global_ no cabealho da funo e o nmero de threads CUDA denido na chamada do kernel. Cada thread que executa o kernel possui um ID nico, esse ID acessvel no kernel atravs da varivel threadIdx [1]. As threads so organizados em hierarquias. Por denio a varivel threadIdx um vetor de trs componentes e o resultado da normalizao destas componentes um valor nico o qual a thread est relacionada. O nmero de threads por bloco limitado pelo numero de ncleos do processador, contudo o kernel pode ser executado por mltiplos blocos de forma semelhante. Sendo assim o numero de threads executadas ser o nmero de blocos vezes o nmero de threads por bloco. Blocos de threads podem ser organizados dentro de uma Grade (Grid) unidimen-25sional ou bidimensional. O nmero de blocos geralmente ditado pelo tamanho dos dados processados ou o nmero de processadores do sistema. As threads dentro de blocos podem cooperar entre si compartilhando dados atravs da memria compartilhada (shared memory), sincronizando a execuo, e coordenando o acesso memria. 2.2.2. Hierarquia de Memria As threads CUDA podem acessar mltiplos espaos de dados na memria durante a execuo, conforme ilustrado na gura 2-5. Cada thread possui sua prpria memria local privada. Cada bloco de threads tem uma memria compartilha visvel por todas as threads do bloco e com o tempo de vida igual ao do bloco. Todas as threads possuem acesso a memria global.Figura 2.5. Hierarquia de Memria.H tambm dois espaos adicionais de memria do tipo somente leitura, acessveis a todos as threads: espaos de memria constante e textura. Os espaos de memria global, constante e textura so otimizados para diferentes usos. Memria de textura oferece diferentes modos de endereamento, bem como ltragem para especcos tipos de26dados. Memria global, constante e textura so persistentes entre as execues de kernels na mesma aplicao. 2.2.3. Programao Heterognea O modelo de programao CUDA assume que as threads executam em um dispositivo sicamente separado, como pode ser observado na Figura 2.6. Dispositivo esse que funciona como um co-processador para o host que executa o programa em C. Este o caso, por exemplo, quando os kernels executam em uma GPU e o resto do programa C executado em uma CPU.Figura 2.6. Programao Heterognea.O modelo de programao CUDA pressupe que o host e o dispositivo mantm em separado seus prprios espaos de memria na DRAM, referenciados como memria27do host e memria do dispositivo, respectivamente. Portanto, um programa administra espaos de memria global, constantes e texturas visveis para kernels atravs de chamadas CUDA. Este dispositivo inclui alocao e desalocao de memria, bem como a transferncia de dados entre a memria do host e a do dispositivo.2.3. OpenCLPor limitaes fsicas, desenvolvedores deixaram a corrida pelo aumento de frequncia nos processadores para incremento de ncleos que, por teoria, ampliaria o desempenho proporcionalmente. Um determinado cdigo pode assim, ser repartido entre os ncleos existentes para que no ocorra uma sobrecarga e demora na execuo. A nova gerao de GPUs, que so responsveis pelo avano da qualidade grca, elevou a realidade de ambientes tridimensionais, agora capazes de processar altas cargas de dados para renderizar imagens de modo que se assemelham a supercomputadores, por utilizar tecnologias com o princpio multi-core. Tal poder computacional pode ser utilizado no s para processamento grco, mas para uma nova gerao de softwares de alto desempenho [2, 3]. O desenvolvimento de arquiteturas diversas para o paralelismo impossibilitou a portabilidade entre softwares de desenvolvimento, visto que, cada entidade implementava suas prprias rotinas de manipulao de dados e execuo. Programadores que por ventura fossem trabalhar com dispositivo de fabricantes diferentes teriam que reescrever o cdigo-fonte, o que se tornou invivel j que projetos complexos teriam que ser revistos elevando seu custo e tempo para lanamento. O OpenCL surge do trabalho conjunto da Khronos Group, iniciado pela Apple com as lderes de mercado do setor, entre elas AMD, nVidia e Intel, como um novo framework padro para programao paralela com rotinas padres [4, 5]. O OpenCL permite que cdigos possam ser executados em sistemas heterogneos compatveis sem a necessidade de modicao dos arquivos. Alm disso, poupa recursos nanceiros, tempo e permitindo que desenvolvedores possam criar softwares com melhores desempenhos, cujas possibilidades de aplicao vo desde games a softwares acadmicos. 2.3.1. Rotinas As rotinas iniciais de deteco do sistema operacional e dispositivos moldam o mtodo de trabalho do OpenCL. Tais rotinas ajustam-no ao sistema tal que um mesmo software possa ter diferentes implementaes para cada mquina que por ventura execute o programa, o contexto. As etapas seguintes geram o cdigo atravs de implementaes das funes em OpenCL C, este pronto para compilao como observado na Figura 2.7. Devido memria dos dispositivos no permitir acesso direto, so usados funes da ferramenta para alocao, escrita e leitura dos dados e aps o uso ocorre liberao dos mesmos. O uso das implementaes do programador indireto utilizando funes padres para passagem de parmetros e execuo paralela. Entre cada passagem das etapas so retornados erros, devido a cada etapa requerer a boa execuo da anterior, h a necessidade de constante checagem de erros, liberao28Figura 2.7. Rotinas bsicas de um programa em OpenCL.de memrias alocadas e aborto da operao. A necessidade de colher informaes recai sobre uma caracterstica do framework, a forma de compilao. 2.3.2. Compilao A partir dos dados obtidos nas rotinas, o programa compilado em tempo de execuo, adequando o cdigo OpenCL C. Uma variante da linguagem C o que o torna amigvel, facilitando seu estudo. H o acrscimo de novos tipos em relao a ISO C99 como os especcos para processamento de imagem e o booleano incorporado pela linguagem C++ e vetores de tamanhos variados para acelerar o processo de transferncia [4, 5]. Como ilustrado na Figura 2.8, na compilao para CPU gerado um cdigo binrio x86 onde em tempo de execuo determinado o nmero multi-core do processador distribuindo para os mesmos automaticamente. Para GPUs gerado um cdigo incompleto, as bibliotecas do fabricante nalizam o trabalho e o executvel para kernel enviado para o dispositivo [2, 3]. 2.3.3. Funcionamento O paralelismo no framework se d pela projeo de funes que s podero ser invocadas pelo kernel do dispositivo e que sero executadas em cada item de trabalho, os quais so independentes entre si e aplicam uma mesma funo. Desta forma, linhas de comando que estariam em loops de grandes repeties so executadas simultaneamente atravs de GPUs ao invs do tradicional sequenciamento. No momento que a aplicao se mostrar pronta para execuo do kernel, os dados so movidos para VRAM da GPU e trabalhados pelos ncleos de cada unidade de forma sncrona ou assncrona [3] de acordo com a necessidade do programa, como esquematizado na Figura 2.9.29Figura 2.8. Esquema do processo de compilao do cdigo OpenCL.Figura 2.9. Modelo de transferncia de cdigo kernel para units.2.3.4. Arquitetura da memria A memria GPU se divide em memria global, constante, local e privada. A primeira visvel para todas as units, podendo ser reescrita; a segunda com o mesmo nvel da anterior, mas sem permisso de alterao; a terceira visvel em um grupo; e a ltima somente na prpria thread [3], como ilustrado pela Figura 2.10. A separao da memria lgica, a diferena est no escopo das mesmas, e sicamente esto localizadas no mesmo espao. Contudo, devido aos procedimentos de acesso, as de menor escopo tm maiores velocidades na comunicao com as units. Devido ao fato dessa visibilidade, h um cuidado a ser tomado com a modicao do contedo de um endereo de memria por dois ou mais itens de trabalho. O fato de serem independentes implica na imprevisibilidade do resultado de mltiplas gravaes simultneas em um mesmo ponto, pois inicialmente no h um controle de precedncia.30Figura 2.10. Esquema da arquitetura da memria e acesso.O OpenCL em uma de suas extenses oferece como soluo o uso de funes atmicas, ao acessar um endereo de memria o mesmo bloqueado temporariamente para garantir a integridade de seu contedo, alterando-o para posteriormente liberar seu acesso para a manipulao por qualquer outra unidade elementar. A Khronos Corp. disponibilizou algumas funes bsicas entre elas incremento, soma e troca que so as mais usuais. Atravs das mesmas possvel gerar um sinalizador com um vetor cujos ndices representam determinados locais de memria indicando seu estado atual de ocupao. Tal tcnica pode gerar uma pequena perda de desempenho por usar a memria global na maioria dos casos. 2.3.5. Sincronismo Por permitir o uso de muitos dispositivos em conjunto em um mesmo programa, til para las de comandos distintas, contudo, interligadas e dependentes dos resultados uma da outra. O OpenCL dispem de formas para sincronizao por eventos e por barreiras para serem usadas entre las e itens de trabalho pertencentes a um mesmo grupo [6]. As sincronizaes por barreira so mais usuais entre itens de trabalho, como utilizam o princpio de que a prxima etapa s ser executada aps o trmino de todas as atuais, a utilizao deste mtodo entre las de comando se assemelharia ao uso de uma nica la de comandos. Sincronizaes por eventos so mais relevantes em algoritmos complexos e robustos por prepararem a prxima execuo antes do pedido de execuo o que diminui o tempo para inicializao aumentando, portanto, o desempenho como mostrado na Figura 2.11.2.3.6. Limitaes As transferncias de dados entre as memrias do host e dispositivo requerem certo tempo. De tal forma, o OpenCL pode no ser a melhor opo para tarefas triviais, sendo recomendado apenas para algoritmos de clculos complexos que necessitam de enorme poder para31Figura 2.11. Estado de las de comando sincronizadas por evento.serem executados. Devido limitao na velocidade das passagens pela memria, dados no devidamente utilizados podem gerar perda computacional. Os compiladores atualmente esto separados, h um especicamente para GPUs e outro para CPUs, de modo que, ainda no possvel usufruir de todos os benefcios que o framework oferece de portabilidade entre tipos de dispositivos que executaro as kernels em OpenCL C. Por ser uma tecnologia recente, a bibliograa existente pouca, boa parte da mesma restringindo-se as fabricantes e desenvolvedores de tecnologia que a usam como AMD responsvel pela ATI Stream, nVidia desenvolvedora da CUDA, ambas mostrando timos resultados, contudo, a nVidia sendo pioneira no setor e possui maior suporte como a questo do recurso de atomicidade de funes, restrita grupo nas placas habilitadas a tecnologia ATI Stream.2.4. Estado da ArteO CUDA e o OpenCL oferecem duas interfaces para programar GPUs. O OpenCL uma interface padro aberta que permite programar CPUs, GPUs e outros dispositivos de diferentes vendedores, enquanto o CUDA especico das GPUs nVidia. Entretanto OpenCL promete uma portabilidade de linguagem para programar em GPU. Essa generalidade implica em uma perda de desempenho. As duas interfaces de programao possuem funcionalidades similares, no entanto o desempenho do kernel do OpenCL entre 13% e 64% mais lento que CUDA [7]. No entanto em reas como segurana computacional, h uma preocupao quanto utilizao do poder computacional das GPUs. Os autores de malwares buscam constantemente por novos mtodos para evitar a deteco por antivrus. J existem duas tcnicas de cdigo de blindagem que representam desaos signicativos para sistemas de anlise e deteco de cdigo malicioso, so eles a descompactao e o polimorsmo em tempo de execuo [8]. Na Biologia Molecular, as unidades de processamento grco, possibilitou a implementao do algoritmo de Smith-Waterman que esteve disponvel h mais de 25 anos explorando o imenso poder computacional das GPUs [9]. 2.4.1. Aglomerao em classes: K-Means Muitos dos algoritmos de reconhecimento se baseiam em padres de pixels, contudo, uma imagem do mundo real no possui um nico valor para cada tom de cor. O espectro32vermelho conta com muitas combinaes. Alguns mais escuros que outros, tendendo a outras tonalidades, mas que ainda assim, so agrupados no conjunto que chamamos de vermelho. Devido a essas variaes, necessrio aglomerar as mesmas em uma respectiva classe que as englobem em funo dos pixels encontrados na imagem. De tal modo, algoritmos em geral sero mais produtivos em seus resultados, excluindo dados que por ventura pudessem servir como obstculos na implementao. O K-Means um algoritmo de aglomerao amplamente aceito pela comunidade cientca. Constitui em uma poderosa ferramenta para tratamento prvio de imagens que sero processadas com a nalidade de obteno de informaes especcas como orientao, angulaes, deteces em geral, localizao [10]. O cdigo se baseia seguindo em etapas como podemos ver na Figura 2.12. A inicializao de classes com pixels centrais, utilizando os primeiros elementos da imagem ou denindo-os aleatoriamente. Todos os pontos da imagem so testados vericando sua proximidade de cada classe atravs da distncia euclidiana em cubo de cores tridimensional. O pixel agrupado e o algoritmo se repete at que os pixels no mudem de classes ou aps um nmero de loops pr-determinado. Ao nal os pixels da imagem so substitudos pelos centros de seus agrupamentos. Por utilizar loops com altos nmeros de repeties, o mesmo requer alta capacidade processamento, o que o faz ser alvo de processamento paralelo, obtendo os resultados esperados com maior velocidade, garantindo uma boa execuo no setor da robtica, ambiente ideal para desenvolvimento do OpenCL. O algoritmo K-Means foi implementado e as anlises foram realizadas utilizando como dispositivo GPU uma nVidia GeForce 8400 GS, como host um Intel Quad Core 2 Quad Q8400 e a imagem original, exibida na Figura 2.13, possuindo 256 pixels de largura e 192 pixels de altura. A Figura 2.14 abaixo mostra os resultados obtidos em um algoritmo para o framework realizado em uma imagem totalizando 49152 pixels, em nmero de loops da implementao e segundos para execut-la, desconsiderando os 4 segundos iniciais para compilar as funes no incio do software. A inicializao das classes no algoritmo foi gerada aleatoriamente, devido a isso, at certa quantidade de loops, os resultados obtidos poderiam ser diferentes. Em mdia de 100 repeties o algoritmo j se mostrou apto a denir classes ntegras como pode se observar na Figura 2.13. O desempenho do teste mostrou a eccia da utilizao do OpenCL para o desenvolvimento de sistemas de viso computacional ou partes de seus algoritmos. 2.4.2. Deteco de Borda: Filtro Sobel Uma borda em uma imagem possui uma caracterstica relevante, como uma mudana no nvel de intensidades dos pixels. Mecanismos detectores de bordas so elaborados a m de encontrar pixels onde ocorre esse tipo de variao. Dessa forma quando esses pixels esto prximos podem ser destacados formando uma borda ou contorno [12].33Figura 2.12. Algoritmo K-Means.Alguns detectores de borda utilizam o clculo da primeira derivada e/ou segunda derivada para encontrar essas mudanas na intensidade dos pixels. Esse clculo consiste em se denir mscaras de que caracterizam essa variao e em seguida fazer a covoluo da imagem pela mscara. Filtrar uma imagem por convoluo um processo que depende de uma vizinhana de inuncia do pixel que est sendo considerado. Esta operao possui a seguinte idia: necessrio uma mscara com dimenses MxN, onde cada posio da mscara possui seu valor. Em seguida, a mscara centrada sobre a imagem na posio (x, y), e cada posio da mscara multiplicado pelo pixel correspondente. Para nalizar calculase o somatrio dos valores obtidos na multiplicao e substitui na imagem o valor na posio (x, y) por este resultado. Esta operao representada na Figura 2.15 Os operadores mais comuns baseadas no clculo da derivada primeira de uma imagem so os operadores de Prewitt e de Sobel [12], a Figura 2.16 mostra as mscaras relacionadas ao operador para deteco de bordas Sobel na horizontal e na vertical e a expresso matemtica que o representa, Equao 1. Para determinar bordas nas diagonais basta rotacionar a mscara do ngulo desejado.34(a) Imagem original(b) Imagem resultanteFigura 2.13. Resultados para o algoritmo K-Means.g(x) = f (x, y) = (z7 + 2z8 + z9 ) (z1 + 2z2 + z3 ) x f (x, y) g(y) = = (z3 + 2z6 + z9 ) (z1 + 2z4 + z7 ) y(1)Em uma imagem com resolues de 800x640 pixels, omitindo-se os pixels das bordas, para cada pixel sero feitas as multiplicaes e o somatrio. Calcular Sobel para cada um desses pixels requer um custo computacional elevado. Em imagens com resolues maiores, o custo aumenta. possvel tambm detectar bordas em vdeos, onde necessrio aplicar o operador de Sobel para cada frame do vdeo. Ao ltrar-se uma imagem com Sobel, em cada pixel, os clculos de multiplicao e adio so independentes de clculos anteriores. Paralelizar este algoritmo bem vivel, visto que possvel repassar para cada ncleo da GPU a responsabilidade pelo clculo da primeira derivada de um pixel na imagem. Com isso sero computados de vrios pixels simultaneamente, como ilustrado na Figura 2.17. 2.4.3. Deteco de Padro: Descritor SIFT O descritor SIFT (Scale Invariant Feature Transform) consiste de um histograma baseado na magnitude e orientao do gradiente de todos os pixels em uma regio ao redor do ponto de interesse [11]. Desta maneira, tal descritor capaz de estabelecer uma medida de correlao. Descritores so vetores de caractersticas de pores da imagem que podem ser utilizados para comparar pores em imagens diferentes de uma mesma cena. O descritor SIFT um descritor local altamente distinto, e invariante a mudanas na iluminao e ponto de vista 3D. O primeiro passo no clculo do descritor computar a orientao e magnitude do gradiente da imagem de todos os pontos ao redor do ponto de interesse. Com o objetivo de obter um descritor invariante a orientao, as coordenadas do descritor e as orientaes dos gradientes so rotacionadas em relao orientao do ponto de interesse, ou seja, a orientao do ponto de interesse deve ser a orientao de referncia igual a 0o .35Figura 2.14. Desempenho em segundos para quantidades de loops.Em seguida, cada magnitude calculada em torno do ponto de interesse atenuada segundo uma janela gaussiana com varincia s, igual metade da largura da regio ao redor do ponto de interesse. O prximo passo consiste em denir n x n sub-regies de k x k pixels cada. A partir da, as magnitudes atenuadas so acumuladas em um histograma de orientaes para cada sub-regio. A magnitude acumulada em cada entrada do histograma de orientaes corresponde soma das magnitudes dos gradientes prximos direo daquela entrada. O procedimento de construo do descritor ilustrado na gura 2.18. O descritor representado por um vetor de 32 elementos (2x2x8). O comprimento de cada seta na gura do lado direito corresponde soma das magnitudes dos gradientes prximos quela direo dentro de cada sub-regio. O descritor ento representado por todos os histogramas das sub-regies. Esta representao na forma de um vetor, onde cada elemento do vetor corresponde a cada uma das direes de cada um dos histogramas. Por m, para que o descritor seja invariante iluminao uma normalizao aplicada de tal forma que o valor mximo do vetor de caractersticas seja igual a 1.2.5. ConclusoAs GPUs possuem ampla utilizao, no entanto para utiliz-la era necessrio muito conhecimento sobre o assunto. O que dicultava o aproveitamento das GPU em algoritmos computacionais. Com o surgimento de ferramentas de programao, como a arquitetura CUDA e o framework OpenCL, tornou mais fcil o uso das unidades de processamento grco. Visto que unicaram as tcnicas utilizadas e no caso do OpenCL, unicou tambm as arquiteruas. O CUDA e o OpenCL so ferramentas poderosas e ainda possuem um grande potencial a ser desenvolvido.36Figura 2.15. Esquema da operao de correlao. No topo esquerda uma imagem, ao centro uma mscara. Abaixo o resultado do somatrio das multiplicaes dos pixels pela mscara.Figura 2.16. Em cima uma mscara genrica com as posies dos valores utilizados nas equaes de Sobel. Abaixo mscaras do operador de Sobel.Essas ferramentas desenvolvem-se a cada dia. A nVidia investe bastante no CUDA aumentando cada vez mais o seu potencial, tornando a araquitetura mais eciente e segura. Ao mesmo tempo que a nVidia juntamente com a AMD, a Intel e a Apple, do um forte suporte ao OpenCL. Juntas contribuem para tornar o framework melhor e mais robusto. No momento, OpenCL, por ser genrico, menos eciente que o CUDA. Contudo, o OpenCL porttil quanto a arquitetura utilizada, sem a necessidade de reescrever os cdigos fontes ao mudar de plataforma. Com o desenvolvimento do framework, o OpenCL pode se tornar to eciente quanto CUDA. Na viso computacional, o uso das GPUs se mostrou muito eciente. Processamento de imagens requer alto poder computacional, principalmente quando h necessidade de processar os dados em tempo-real. Em imagens de alta resoluo, a execuo paralela de clculos de derivadas e K-Means em GPUs possibilita a obteno de resultados em tempo-real. Isso se explica pelo fato destes algoritmos serem amplamente paralelos, ou seja, cada clculo pouco depende dos anteriores. O processamento em tempo-real pode ser utilizado aplicaes onde informaes so retiradas de um stream de video, e neste caso necessrio computar os frames do video. Se o processo for lento, haver37Figura 2.17. Clculo da primeira derivada utilizando GPU.Figura 2.18. Descritor SIFT calculado a partir de um conjunto de 8x8 pixels divididos em 2x2 sub-regies. Cada histograma do descritor possui 8 intervalos de orientao.perda ou incosistncia da informao. Neste trabalho abordamos algumas tcnicas utilizadas na viso computacional e suas aplicaes. Tambm foi abordado, duas fortes ferramentas para progamao paralela em GPUs, o CUDA e OpenCL tentando explicar o funcionamento delas. Buscamos demonstrar a contribuio das GPUs na viso computacional, bem como seu desempenho devido paralelizao dos algoritmos utilizados. E assim contribuir para a continuidade e o desenvolvimento dos algoritmos aqui expostos, divulgando a programo paralela em GPUs e o seu uso na viso computacional. Em fato, existem ainda outros algoritmos a serem implementados e analisados, dando continuidade ao trabalho aqui exposto.38Referncias[1] NVIDIA, OpenCL Programming Guide for the CUDA Architecture Version 2.3. 2010, NVIDIA Corporation: Santa Clara, Califrnia. [2] http://gemma.apple.com/technologies/mac/snowleopard/opencl.html [3] APPLE, Taking the graphics processor beyond graphics. June 2009, Apple Inc. [4] http://www.khronos.org/opencl/. [5] KHRONOS, Introduction and Overview. June 2010, Khronos Group. [6] AMD, ATI Stream SDK OpenCL Programming Guide. June 2010. Advanced Micro Devices Inc. [7] KARIMI, Kamran; DICKSON, Neil G.; HAMZE, Firas. A Performance Comparison of CUDA e OpenCL 2010, D-Wave Systems Inc.: Canada. [8] VASILIADIS, Giorgos; POLYCHRONAKIS, Michalis; IOANNIDIS Sotiris; GPU Assisted Malware With CUDA and OpenCL. [9] Manavski, S.A.; VALLE, Giorgio; CUDA compatible GPU cards as efcient hardware accelerators for Smith-Waterman sequence alignment. Maro 2008. [10] AIRES, Kelson R.T.; ALSINA, Pablo J.; MEDEIROS, Adelardo A.D. A Global Vision System for Mobile Mini-Robots. Maio, 2001. [11] AIRES, Kelson R.T.; Segmentao de Planos Baseada em Homograa Am, Fluxo ptico e Reconstruo Mtrica. Outubro, 2009. Natal-RN. [12] MARENGONI, Maurcio; STRINGHINI, Denise. Introduo Viso Computacional usando OpenCV. RITA 2009.39Captulo3Joomla 1.6Alexandre Marques Albano da Silveira, Andra Carneiro Linhares, Clemilson Costa SantosAbstract Publicity is very important for the recognition of any work done. With the expansion of the Internet, the use of websites has become a powerful ally in the products and brands promotion. It is in this context that emerges Joomla. Joomla is a free website devellopment tool widely used and secure. You do not need programming skills to use it and maintain it. In fact, Joomla is no more complicated than a text editor. Its exible and customizable. Thus, it can be used to develop both small sites for scholarly works and large portals for document management. Resumo Propaganda de fundamental importncia para o reconhecimento de qualquer trabalho realizado. Com o avano da Internet, a utilizao de websites tornou-se um aliado poderoso na divulgao de produtos e marcas. nesse cenrio que surge o Joomla. O Joomla uma ferramenta livre para criao de websites, muito utilizada e segura. No necessrio conhecimento em programao para us-lo e mant-lo. Na verdade, O Joomla no mais complicado que um editor de texto. totalmente exvel e customizvel. Desse modo, ele pode ser usado tanto no desenvolvimento de pequenos sites para trabalhos acadmicos, quanto em grandes portais para gerenciamento de documentos.IntroduoPropaganda , como dizem, "a alma do negcio", sendo de fundamental importncia para o reconhecimento de qualquer trabalho realizado. Existem vrias formas de propaganda, como: boca a boca, em que clientes satisfeitos espalham que seu servio ou produto bom; panetos, mas esse est em declnio e mal visto devido conscientizao ecolgica; divulgao em meios de comunicao, como rdio, televiso e Internet.40A Internet indiscutivelmente o maior e mais democrtico meio de comunicao. Nela se pode postar de tudo, desde contedos imorais a histrias de assombrao. As empresas j se deram conta disso e a usam como o principal meio de propaganda, atravs de hotsites, banner em blogs, anncios em redes sociais, spam e qualquer outra forma em que aparea o produto ou a marca. Mas, indispensvel ter-se um site bem estruturado, organizado, com contedo de qualidade e informao clara. Um site deixa sua marca e produtos visveis em tempo integral e em qualquer lugar do mundo, o que facilita bastante o acesso do consumidor e a descoberta do que sua empresa ou grupo tem a oferecer. Alm disso, o endereo do site pode ser divulgado em outros meios, deixando que a curiosidade guie o internauta ao seu stio. nesse cenrio que surge o Joomla. O Joomla uma ferramenta capaz de criar sites de qualidade, de maneira rpida, permitindo ao usurio concentrar-se na elaborao do contedo sem preocupar-se com muitos detalhes tcnicos. Antes de aprendermos a usar o Joomla, necessrio apresentar alguns conceitos fundamentais sobre o mesmo. Para iniciarmos nosso aprendizado da ferramenta, precisamos saber o que ela , para que serve, quais recursos esto disponveis e em que casos usar. Desse modo, os seguintes tpicos sero abordados: O que Joomla; Conceito de Content Management System (CMS); Explicao sucinta das ferramentas necessrias ao Joomla; Como instalar e congurar o Joomla; Algumas denies; Como criar menu, weblink, grupos de usurio e nvel de acesso; Exemplo de criao de contedo e gerncia de acesso; Novidades da verso 1.6;3.1. O que JoomlaO nome Joomla (pronuncia-se djumla), tem origem de uma palavra Swahili, Jumla, que signica "todos juntos". Joomla, software livre licenciado sobre a GNU/GPL, um Content Management System (ver seo 4.2) derivado do Mambo, escrito em PHP e executado em servidor Apache. Usa banco de dados MySQL, sendo vlido ressaltar que a interao com o banco j se encontra implementada. Outra caracterstica importante que o sistema de desenvolvimento do Joomla baseado em componentes, onde determinado componente tem uma nalidade especca. Existem muitos componentes j prontos, tanto gratuitos como comerciais, que podem ser adaptados a diversas aplicaes. Dentre esses componentes, podemos citar: galeria de fotos, galeria de vdeos, menus com efeitos diversos, interao com redes sociais, nuvem de palavras, controle de formulrios, entre outros. Os componentes tambm podem ser comprados ou feitos por voc mesmo, caso41saiba PHP. Tem-se ainda a possibilidade de modicar o cdigo dos componentes existentes. Essa exibilidade faz do Joomla uma boa ferramenta para desenvolvimento de diversos tipos de sites.Figura 3.1. Logo do Joomla3.2. O que um Content Management System (CMS)Content Management System signica Sistema de Gesto de Contedo ou Sistema de Gerenciamento de Contedo. Um CMS possui ferramentas necessrias para manter portais e websites em funcionamento sem a necessidade de um prossional qualicado na rea (webmaster). Nesses sistemas, j encontram-se implementadas funes de incluir, editar, publicar e apagar textos. Alm disso, ele possibilita organizar o site por tipo de contedo e grupo de permisses. Desse modo, possvel denir quais usurios tero acesso a determinado tipo de artigo e suas permisses (controle total, leitura ou sem acesso). Um CMS possibilita que uma empresa ou grupo de trabalho possua um portal onde os membros podero postar seus trabalhos diretamente, sem a necessidade de envilos, primeiramente, para um setor especco que dar sequncia sua publicao. Isso implica numa reduo de custos e corrobora no aumento da velocidade das postagens, j que no vai depender de um webmaster para isso. Um CMS pode ser usado para a criao de blogs, websites, ambientes de ensino a distncia e portais. Como caractersticas destacam-se a disponibilizao prvia de uma estrutura do site (esqueleto) e a facilidade de gerenciar o que vai ser publicado, no sendo mais difcil de operar que um editor de texto ou uma planilha.3.3. Vantagens em se usar JoomlaAlgumas vantagens podem ser evidenciadas no uso de Joomla preferencialmente a uma outra ferramenta para desenvolvimento de sites: Reduzido conhecimento tcnico necessrio. O Joomla no elimina a necessidade de conhecimento tcnico, mas ele importante apenas nas etapas iniciais, como instalao e congurao. Alm disso, o Joomla de fcil aprendizado; No preciso reinventar a roda. No Joomla, as tarefas bsicas de um site j esto prontas e no preciso refaz-las, nem iniciar o site do ponto zero;42 Comunidade atuante e com grande nmero de seguidores. O Joomla muito usado e sua comunidade vem crescendo rapidamente, o que de grande reconforto aos usurios. O projeto tem amadurecido e agregado novas funcionalidades, provendo sua constante atualizao em relao s tecnologias Web e CMS. Alm disso, a existncia dessa comunidade atuante facilita a obteno de ajuda por parte dos usurios; Grande disponibilidade de mdulos e extenses. O Joomla possui as funcionalidades bsicas de um site ou portal, mas existem muitos mdulos e extenses disponveis voltados a aplicaes mais especcas; software livre. O Joomla licenciado pela GNU/GPL. No preciso pagar nada e nem piratear o software para usar o Joomla como base do seu website. Alm disso, o cdigo fonte est aberto para ser alterado de acordo com suas exigncias; Desprendimento com o desenvolvedor. Um site feito em Joomla fcil de manter e evoluir, e por ser um padro, qualquer prossional que trabalha com a ferramenta no ter diculdades em gerenciar o site desenvolvido por outra pessoa; Segurana. O Joomla implementado seguindo padres de segurana inclusos na ferramenta. Alm dessa segurana padro, existem plugins que podem se adicionados com a nalidade de deixar o site ainda mais seguro. Templates. Para mudar o layout do site, basta modicar ou editar o template do mesmo, o qual pode ser baixado, editado ou comprado. O Joomla segue o padro MVC (Model View Controller), que divide seu programa em camadas e torna mais fcil a insero de mudanas no mesmo; Frontend traduzida em vrios idiomas (ver seo 4.6). Seu site fornece suporte a diversos idiomas. Assim, possvel que usurios de diferentes lugares do mundo acessem o mesmo site no seu respectivo idioma ptrio; Adequado a dispositivos mveis. O Joomla pode ser acessado de dispositivos mveis, tornando seu site portvel e mais interativo.3.4. O que preciso para usar JoomlaDe modo geral, as seguintes ferramentas so necessrias para se usar o Joomla: PHP, MySQL e Apache. Cada uma delas ser descrita a seguir: PHP (um acrnimo recursivo para PHP: Hypertext Preprocessor). O PHP uma linguagem de script open source, de uso geral, muito utilizada e especialmente guarnecida para o desenvolvimento de aplicaes Web embutveis dentro do HTML. preciso dispor do interpretador do PHP para utilizar o Joomla; MySQL. O programa MySQL (R) um servidor robusto de bancos de dados SQL (Structured Query Language - Linguagem Estruturada para Pesquisas), muito rpido, multi-tarefa e multi-usurio. O Servidor MySQL pode ser usado em sistemas de produo com alta carga e misso crtica, bem como pode ser embutido em43programas de uso em massa. MySQL uma marca registrada da MySQL AB. O programa MySQL de licena dupla. Os usurios podem escolher entre usar o programa MySQL como um produto Open Source/Free Software sob os termos da GNU General Public License (http://www.fsf.org/licenses/) ou podem comprar uma licena comercial padro da MySQL AB; Apache. O servidor Apache (ou Servidor HTTP Apache. Em ingls: Apache HTTP Server, ou simplesmente: Apache) o mais bem sucedido servidor web livre. Foi criado em 1995 por Rob McCool, ento funcionrio do NCSA (National Center for Supercomputing Applications). Numa pesquisa realizada em dezembro de 2007, foi constatada que a utilizao do Apache representa 47.20% dos servidores ativos no mundo. Em maio de 2010, o Apache serviu mais de 54,68% de todos os sites existentes e mais de 66% dos milhes de sites mais movimentados. a principal tecnologia da Apache Software Foundation, responsvel por mais de uma dezena de projetos envolvendo tecnologias de transmisso via web, processamento de dados e execuo de aplicativos distribudos.3.5. Instalao do JoomlaO download do Joomla pode ser feito em: http://www.joomla.org/download. O ideal sempre optar pela ltima verso estvel. Alm de usar o Joomla diretamente em uma hospedagem na Internet, podemos instal-lo em servidores locais apenas assegurando os pr-requisitos citados no tpico 4.4. Para isso, deve-se descompactar os arquivos e coloclos na pasta que o servidor cria automaticamente para tal m. O envio dos arquivos do Joomla ao servidor deve ser realizado atravs do protocolo FTP (File Transfer Protocol, Protocolo de Transferncia de Arquivos). Um cliente de ftp muito popular e livre o lezilla, que pode ser obtido em: http://lezilla-project.org/. Quando os arquivos estiverem no local correto, a interface de instalao do Joomla poder ser acessada pelo browser. A instalao dividida em sete passos: 1. Escolha do idioma; 2. Vericao da instalao; 3. Licena; 4. Banco de dados; 5. Congurao de FTP; 6. Conguraes gerais; 7. Finalizao; O primeiro passo consiste na escolha do idioma. Caso no esteja disponvel o idioma de sua preferncia, a seo 4.8 ir descrever como adicionar pacotes de idiomas e modic-lo. No segundo passo o Joomla verica se est tudo correto e mostra uma lista de vericao. importante analisar atentamente as conguraes realizadas e assim44evitar erros comuns, como por exemplo, no congurar adequadamente as permisses necessrias pasta em que se encontra o Joomla. Ser destacado em vermelho qualquer problema identicado pelo Joomla e aps corrigi-los, deve-se clicar em Check Again e vericar se o problema foi realmente sanado.Figura 3.2. Vericao da instalaoNo passo seguinte, terceiro, aparecer uma tela explicando os termos da licena de uso do Joomla, a GNU General Public License. Feita a leitura, pode-se clicar em Next. O passo quatro consiste na congurao do acesso ao banco de dados. Devem ser fornecidos os dados que a hospedagem do site forneceu ou os dados obtidos a partir da instalao do Apache. Alguns servidores permitem que se tenha mais de um banco de dados congurado. Nesse caso, necessrio cri-los e fornecer os dados ao Joomla. Em caso de servidores locais, o Joomla geralmente tem permisso para criar o banco. Assim, resta fornecer um nome que o prprio Joomla poder cri-lo. O passo cinco corresponde congurao do acesso por ftp, com as informaes fornecidas pela hospedagem do site (mesmas conguraes usadas para montar o site no servidor). No passo seis, deve-se entrar com o nome do site e dados pessoais. Deve-se ter especial ateno com a senha, pois a mesma ser de administrador. vlido ressaltar que na verso 1.5 no era usado o login do administrador. Entrava-se com a senha e o usurio criado era denominado admin. Isso gerava um inconveniente, pois era preciso mudar o nome do usurio para garantir a segurana do site. Existe uma opo disponvel para instalar exemplo de contedo. Essa opo cria um exemplo de site com contedo, categorias, artigos, menus, etc. Pessoalmente, prero no marcar essa opo, pois ser necessrio apagar tudo depois. Contudo, para quem est querendo aprender a usar a ferramenta, selecionar essa opo pode vir a ser interessante, pois ela deixar tudo previamente congurado. No ltimo passo, preciso remover o diretrio installation. Esse diretrio encontrase na mesma pasta onde foram copiados os arquivos do Joomla. Aps remov-lo, a instalao est concluda e ser possvel visualizar o site criado. A rea administrativa acessada incluindo "/administrator"no nal do endereo http. Ex: Seja www.nome-dosite.com o nome do site. Para se ter acesso rea de administrao, digita-se www.nomedo-site.com/administrator.453.6. Frontend/BackendFigura 3.3. Frontend do JoomlaO Joomla tem duas faces/reas: uma para os usurios padro, chamada frontend (gura 4.3) e outra administrativa, denominada de backend (gura 4.4). A frontend onde aparece o site em si. Nela possvel limitar o acesso aos dados do site congurando grupos e nveis de acesso, de modo a disponibilizar contedos diferentes no mesmo site, com base no perl de um dado usurio. Na backend preciso, obrigatoriamente, fornecer User Name e Password para se ter acesso mesma. Nela gerenciamos tudo do site: artigos, usurios, acesso ao banco de dados e congurao de ftp. Esta tambm poder ter acesso diferenciado - o grupo de um usurio dene seu nvel de acesso.Figura 3.4. Backend do Joomla3.7. TemplatesO template a aparncia do Joomla. Tanto a frontend como a backend possuem templates que podem ser alterados. Esses so independentes do contedo do site. Na gura 4.3, podemos visualizar o template da frontend do Joomla 1.6 (Beez) sem nenhum contedo. No canto superior direito do template temos uma opo para aumentar, resetar ou diminuir46o tamanho do site. Ainda na mesma gura, tem-se uma imagem seguida por "onde voc est", que indica a hierarquia do diretrio onde o usurio se encontra. Na parte esquerda da gura encontramos os menus. Nesse exemplo especco s temos o home, um menu padro para a pgina principal do site e logo abaixo o login form. Mais direita (ainda na mesma gura), temos a chamada "rea principal", onde aparecem os artigos marcados para serem exibidos na home. Na parte inferior da tela temos um rodap. As alteraes no template do backend tambm podem ser efetivadas no mes