SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Capítulo
6
NCL – Nested Context Language
Elaine Cecília Gatto
Abstract
NCL, Nested Context Language is the programming language used for developing
interactive applications for the Brazilian Digital TV system. Created in the laboratory
at PUC-RIO Telemedia, NCL is a simple, declarative, based on a conceptual model,
much like HTML, XHTML, and other languages of any kind. NCL should be supported
by all devices of digital TV reception of the current system nipo-Brazilian, and
applications for mobile devices must necessarily be implemented in NCL. This chapter
is dedicated to the presentation, orientation and introduction to software development
with NCL, covering the basic steps that are fundamental and essential to a successful
creation of interactive applications for digital TV in Brazil.
Resumo
NCL, Nested Context Language, é a linguagem de programação utilizada para o
desenvolvimento de aplicações interativas para o sistema brasileiro de TV Digital.
Criada na PUC-RIO pelo laboratório TELEMIDIA, NCL é uma linguagem simples,
declarativa, baseada em um modelo conceitual, muito parecida com HTML, XHTML, e
outras linguagens do tipo. NCL deve ser suportada por todos os dispositivos de
recepção de TV Digital do atual sistema nipo-brasileiro, e aplicativos para dispositivos
portáteis devem obrigatoriamente ser implementados em NCL. Este capítulo se dedica à
apresentação, orientação e iniciação ao desenvolvimento de software com NCL,
abordando os passos básicos, fundamentais e essenciais para uma criação bem
sucedida de aplicações interativas para a TV Digital brasileira.
6.1. Introdução
NCL – Nested Context Language ou Linguagem de Contextos Aninhados – é uma
linguagem declarativa baseada no modelo conceitual NCM – Nested Context Model ou
Modelo de Contextos Aninhados – ambas criadas pela PUC-RIO (Pontifícia
Universidade Católica do Rio de Janeiro). NCM representa conceitos estruturais,
eventos e relacionamentos entre os dados, definindo as regras estruturais e operações
sobre os dados para manipulação e atualização das estruturas. A NCL define como os
objetos de mídia são estruturados e relacionados, no tempo e no espaço, é uma
linguagem de contexto aninhado, uma linguagem de marcação, tipo XHTML –
eXtensible Hypertext Markup Language ou Linguagem de Marcação de Hipertexto
Extensível – e utiliza conceitos de nós e elos, aplicados em documentos hipermídia.
6.1.1 Perfis Ncl
Cada perfil NCL é composto por um conjunto de módulos da linguagem NCL,
permitindo a criação de linguagens de acordo com as necessidades dos usuários. O
objetivo deste capítulo não é apresentar com detalhes como essa construção é feita,
entretanto, mais informações sobre o assunto podem ser obtidas em SOARES (2009),
ABNT NBR 15606-2 (2007) e ITU-T H.761 (2009). A linguagem NCL para TV Digital
é dividida em três perfis diferentes: EDTV, BDTV e CausalConnector. As aplicações
desenvolvidas aqui utilizam o perfil EDTV.
6.1.2 Ferramentas Necessárias
1. Eclipse IDE: Esta ferramenta pode ser obtida gratuitamente no link abaixo. É
fundamental para a construção do código NCL, juntamente com o plugin, item 2.
http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers-includes-incubating-
components/indigor
2. NCL Eclipse: O plugin NCL para a IDE Eclipse, pode ser obtido gratuitamente
no link abaixo e permite que códigos NCL sejam escritos mais facilmente. A
instalação e configuração do plugin também se encontram no link.
http://laws.deinf.ufma.br/ncleclipse/installation.html
3. VMWare Player: É necessário para executar a máquina virtual Ginga-NCL e
pode ser obtido gratuitamente no link abaixo.
http://www.vmware.com/br/products/desktop_virtualization/player/overview.html
4. Ginga-NCL Virtual Set-top Box: É a máquina virtual Ginga-NCL, uma
implementação de referência para testes de aplicações. Cada fabricante pode
implementar a sua versão do Ginga-NCL, basta seguir as orientações contidas
nas normas brasileiras, ABNT, para TV Digital. Pode ser obtido gratuitamente
no link abaixo – é necessário apenas que seja feito o cadastro no site.
http://www.softwarepublico.gov.br/ver-comunidade?community_id=1101545
5. SSH Secure File Transfer: É utilizado para transferir os arquivos – códigos
NCL – do seu desktop ou notebook para dentro da máquina virtual Ginga-NCL e
pode ser obtido gratuitamente no link abaixo.
http://www.baixaki.com.br/download/ssh-secure-shell.htm
6. Scite – Compilador Lua: Pode ser obtido gratuitamente no link abaixo. É
utilizado para escrever os códigos LUA que é a linguagem de script padrão para
a NCL.
http://www.scintilla.org/SciTE.html
6.1.3. Estrutura Completa de um Documento NCL
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2
3 <ncl id="teste" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
4
5 <!-- Cabeçalho do Programa -->
6 <head>
7
8 <!-- Base de importação de documentos: Especifica um conjunto de
9 documentos NCL importados e deve obrigatoriamente ser definido como
10 elemento-filho do elemento <head> -->
11 <importedDocumentBase> </importedDocumentBase>
12
13 <!-- Base de regras: Permite a definição de regras que, quando
14 satisfeitas, selecionam alternativas para a apresentação do
15 documento e deve obrigatoriamente ser definido como elemento-filho
16 do elemento <head> -->
17 <ruleBase> </ruleBase>
18
19 <!-- Base de efeitos de transição: Especifica um conjunto de
20 efeitos de transição e deve obrigatoriamente ser definido como
21 elemento-filho do elemento <head> -->
22 <transitionBase> </transitionBase>
23
24 <!-- Base de conectores: Permite o agrupamento de conectores. O
25 conteúdo exato de uma base de conectores é especificado por um
26 perfil de linguagem que utiliza as facilidades oferecidas pelos
27 conectores -->
28 <connectorBase> </connectorBase>
29
30 <!-- Base de regiões: Base de regiões do documento NCL. Define um
31 conjunto de elementos <region> cada qual podendo conter outro
32 conjunto de elementos <region> aninhados, e assim por diante,
33 recursivamente -->
34 <regionBase> </regionBase>
35
36 <!-- Base de descritores: Especifica o conjunto de descritores de
37 um documento e deve ser filho do elemento <head> -->
38 <descriptorBase> </descriptorBase>
39
40 <!-- Base de metadados -->
41 <meta content="" name=""/>
42 <metadata/>
43
44 <!-- Fim do cabeçalho do programa -->
45 </head>
46
47 <!-- Início do corpo do programa -->
48 <body>
49
50 <!-- Porta de entrada no programa: Especifica uma porta de um nó de
51 composição com seu respectivo mapeamento para uma interface -->
52 <port id="" component=""/>
53
54 <!-- Mídias: Define os tipos básicos de objetos de mídia -->
55 <media id=""></media>
56
57 <!-- Contextos: Contêm um conjunto de nós e um conjunto de elos -->
58 <context id="">
59 <port id="" component="" />
60 </context>
61
62 <!-- Switchs: Permite a definição de nós alternativos a serem
63 escolhidos em tempo de apresentação do documento -->
64 <switch id=""> </switch>
65
66 <!-- Propriedade: É utilizado para definir uma propriedade ou grupo
67 de propriedades de um nó, como uma de suas interfaces (âncora) -->
68 <property name=""/>
69
70 <!-- Metadados -->
71 <meta content="" name=""/>
72 <metadata/>
73
74 <!-- Links/elos: Responsável por definir os elos, que utilizam
75 conectores -->
76 <link xconnector=""></link>
77
78 <!-- Fim do corpo -->
79 </body>
80
81 <!-- Fim do documento -->
82 </ncl>
Listagem 6.1: Estrutura completa de um documento NCL.
Nesta linha de código
<ncl id="main" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
está sendo definido o nome do documento NCL como main e o perfil que será
utilizado como o perfil EDTV. Normalmente, o NCL Eclipse, gera esta linha
automaticamente, assim como a linha:
<?xml version="1.0" encoding="ISO-8859-1"?>
Os outros elementos, o desenvolvedor insere conforme a necessidade do
documento que está sendo desenvolvido. Cada um dos itens na estrutura completa do
documento NCL, apresentados acima, é basicamente um conceito da linguagem NCL.
6.1.4 Executando o primeiro documento NCL
O código abaixo mostra como executar um vídeo em NCL. Observe que, para tocar um
vídeo, é necessário utilizar quatro conceitos básicos de NCL: regiões, descritores, portas
e mídias.
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!-- Generated by NCL Eclipse -->
3 <ncl id="main" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
4 <!-- Cabeçalho do Programa -->
5 <head>
6 <regionBase>
7 <region id="rgTV" zIndex="1">
8 <region id="rgVideo" top="10" left="10"
width="600" height="480" zIndex="2"/>
9 </region>
10 </regionBase>
11 <descriptorBase>
12 <descriptor id="dVideo" region="rgVideo"/>
13 </descriptorBase>
14 </head>
15 <body>
16 <port id="p" component="Video"/>
17 <media id="Video" src="media/videos/video.mpg"
descriptor="dVideo"/>
18 </body>
19 </ncl>
Listagem 6.2: Código NCL para executar um vídeo.
No cabeçalho são definidas duas regiões em <regionBase>, uma para a tela da
TV e outra para a exibição do vídeo – nem sempre o vídeo vai ocupar toda a tela de TV,
por isso duas regiões. A região destinada à TV possui os atributos id, para identificação
da região e zIndex, que será melhor explicado na seção de regiões. A região destinada à
apresentação do vídeo, além dos atributos id e zIndex, possui também os atributos para
definição do tamanho do vídeo, width e height, e também do eixo x e y, left e top,
para indicar em que ponto da tela o vídeo será apresentado.
É definido também no cabeçalho apenas uma descrição de mídia em
<descriptorBase>, pois apenas um objeto de mídia, no caso o vídeo, será apresentado
na tela. Observe que o elemento <descriptor> possui dois atributos: id que é a
identificação do vídeo, e region que é a região em que o vídeo será apresentado.
No corpo do código tem-se os elementos <port> e <media>, ambos com seus
respectivos atributos. <port> permite que o video seja incializado e possui o atributo
id, que é a identificação da porta, e o atributo component, que é o componente que será
inicializado, no caso, o Video, que por sua vez é definido em <media>.
<media> possui o atributo id, que é a sua identificação, e o atribuito src, o qual
contém o caminho, o local, em que o objeto de mídia está salvo e a partir do qual, o
NCL irá buscar a mídia. Nota-se então que NCL não é muito diferente de HTML e
XHTML. Assim como essas linguagens, NCL possui elementos, tags e seus respectivos
atributos.
Para executar este código, primeiro deve-se ter instalados e configurados no
computador, os softwares relacionados em Ferramentas Necessárias. Este código foi
escrito na IDE Eclipse com o plugin NCL Eclipse, conforme pode ser verificado na
Figura 6.1. No lado esquerdo da Figura 6.1, encontra-se a estrutura da aplicação NCL,
em Project Explorer, que normalmente contém uma pasta com o projeto e dentro, outras
pastas com as mídias que serão utilizadas.
Além disso, contém um projeto principal, chamado main.ncl e um outro arquivo
.ncl chamado ConnectorBase.ncl, que será explicado com maiores detalhes nas
próximas seções. Em seguida, basta seguir os passos apresentados no portal do software
público no seguinte link:
http://www.softwarepublico.gov.br/dotlrn/clubs/ginga/gingancl/xowiki/gingancl_vm.html
Se o computador estiver conectado a uma rede Wi-Fi, provavelmente haverá
problemas em relação ao acesso remoto. Para resolver isto, basta entrar em Painel de
ControleRede e InternetConexões de Rede, selecionar VMware Network Adapter
Vmnet e alterar o IPV4 para IP Dinâmico. O código NCL da Listagem 6.2, executando, é
apresentado na Figura 6.2.
Figura 6.1. Código NCL na IDE Eclipse
Figura 6.2. Código NCL executando na máquina virtual Ginga
6.2. Regiões
É o local que deve ser definido para exibição das mídias. Primeiro deve-se definir a
região da tela de TV, e em seguida, definir as regiões de cada objeto de mídia (vídeo,
figura, legenda, etc). É importante, antes de programar, fazer a prototipação das telas
que a aplicação terá. Regiões possuem atributos que podem ser modificados e são
listados a seguir. A Figura 6.3 ilustra esses atributos. O código da Listagem 6.3 mostra a
utilização dos atributos da Região e a Figura 6.4 apresenta o código executando.
1. id: identificador da região;
2. device: classe de dispositivo (tv fixa, portátil ou móvel);
3. left: coordenada x do lado esquerdo;
4. right: coordenada x do lado direito;
5. top: coordenada y do lado superior;
6. bottom: coordenada y do lado inferior;
7. height: altura;
8. width: largura;
9. zindex: número entre 0 e 25 que define a camada da região no eixo z. As
camadas se sobrepõem, assim a camada com o maior número, é aquela que
estará “por cima” das outras.
10. title: título da região.
Figura 6.3. Representação gráfica de regiões
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!-- Generated by NCL Eclipse -->
3 <ncl id="main" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
4 <!-- Cabeçalho do Programa -->
5 <head>
6 <regionBase>
7 <region id="rgTV" zIndex="1">
8 <region id="rgVideo" top="0" left="0" height="480"
width="600" zIndex="2"/>
9 <region id="rgMenu" top="50" left="50" height="250"
width="150" zIndex="3">
10 <region id="rgBotao1" top="0" height="50"
width="100"/>
11 <region id="rgBotao2" top="60" height="50"
width="100"/>
12 <region id="rgBotao3" top="120" height="50"
width="100"/>
13 <region id="rgBotao4" top="180" height="50"
width="100"/>
14 </region>
15 </region>
16 </regionBase>
17 <descriptorBase>
18 <descriptor id="dVideo" region="rgVideo"/>
19 <descriptor id="dMenu" region="rgMenu"/>
20 <descriptor id="dBotao1" region="rgBotao1"/>
21 <descriptor id="dBotao2" region="rgBotao2"/>
22 <descriptor id="dBotao3" region="rgBotao3"/>
23 <descriptor id="dBotao4" region="rgBotao4"/>
24 </descriptorBase>
25 </head>
26 <body>
27 <port id="pVideo" component="Video"/>
28 <port id="pBotao1" component="Botao1"/>
29 <port id="pBotao2" component="Botao2"/
30 <port id="pBotao3" component="Botao3"/>
31 <port id="pBotao4" component="Botao4"/>
32 <media id="Video" src="media/videos/video.mpg"
descriptor="dVideo"/>
33 <media id="Botao1" src="media/imagens/botao_amarelo.png"
descriptor="dBotao1"/>
34 <media id="Botao2" src="media/imagens/botao_vermelho.png"
descriptor="dBotao2"/>
35 <media id="Botao3" src="media/imagens/botao_azul.png"
descriptor="dBotao3"/>
36 <media id="Botao4" src="media/imagens/botao_verde.png"
descriptor="dBotao4"/>
37 </body>
38 </ncl>
Listagem 6.3: Colocando um menu junto ao vídeo
Na listagem 6.3, são inseridos ao projeto, 4 imagens do tamanho 100x50 pixels,
do tipo .png, cada uma com uma cor dos botões padrões de TV Digital: amarelo,
vermelho, azul e verde. Como trata-se de um menu, este poderá ser utilizado para
interatividade, de acordo com as cores.
Observe que para cada botão foi definido um elemento <region>,
<descriptor>, <media> e <port>. Neste exemplo, ainda não está sendo utilizado o
conceito de elos, por este motivo foi necessário criar uma porta para cada mídia. Isto
permite que as imagens e os vídeos sejam inicializados ao mesmo tempo, assim que a
aplicação é startada. Nas próximas seções veremos como inicializar objetos de mídia
sem a necessidade de uma porta para cada uma.
Conforme pode ser visulizado na Figura 6.4, os botões estão “em cima” do
vídeo. No código temos zIndex=“1” para a região da TV, zIndex=“2” para o vídeo e
zIndex=“3” para o menu, e por isso, os botões estão “por cima” do vídeo. Se essa
ordem for alterada, os botões não aparecerão pois o vídeo estará na camada acima deles.
Figura 6.4. Vídeo com Menu, execução da Listagem 6.3
6.3. Objetos de mídia
Uma mídia é sempre uma imagem, um vídeo, um html, etc. Um objeto de mídia também
pode ser chamado de nó de mídia. Mídias também possuem atributos:
1. id: identificador único;
2. src: endereço do local onde a mídia está armazenada (arquivos locais, remotos
ou streaming);
3. type: tipo MIME da mídia;
4. descriptor: identificador do descritor (descriptor);
5. refer: referência a um outro nó de mídia (reúso);
6. instance: usado apenas quando refer é utilizado, valores: new, instSame,
gradSame.
NCL utiliza MimeTypes, que é uma cadeia de caracteres que define a classe da mídia e
o tipo de codificação. Exemplos:
1. Áudio: audio/mpeg: .mp1, .mp2, .mp3;
2. Vídeo: video/mpeg: .mp2, .mpeg, .mpg, .mpe;
3. Imagem: image/png: .png;
4. Texto: text/html: .htm, .html, .xhtml.
6.4. Descritores
São responsáveis pela configuração de como os objetos de mídia deverão ser
apresentados. Os atributos dos descritores são:
1. id: identificador do descritor;
2. region: identificador da região a ser utilizada por esta mídia;
3. explicitDur: define a duração do objeto de mídia em segundos;
4. freeze: identifica o que acontece ao final da apresentação do objeto de mídia
associado ao descritor (true/false);
5. player: identifica a ferramenta de apresentação a ser utilizada para exibir o
objeto de mídia.
6.4.1 Parâmetros reservados para áudio:
1. soundLevel: “0” = mute; “0,5” ou “50%” = metade; “1” ou “100%”= máximo;
2. balanceLevel: valores entre 0 e 1 ou entre 0% e 100%;
3. trebleLevel: valores entre 0 e 1 ou entre 0% e 100%;
4. bassLevel: valores entre 0 e 1 ou entre 0% e 100%.
6.4.2 Parâmetros reservados para mídia visual:
1. top: topo, valores % ou pixels;
2. bottom: base, valores % ou pixels;
3. left: esquerda, valores % ou pixels;
4. right: direita, valores % ou pixels;
5. width: largura, valores % ou pixels;
6. height: altura, valores % ou pixels.
6.4.3 Parâmetros reservados para mídia visual:
1. location: posição do objeto de mídia em left e top, valores: % ou pixels;
2. size: dimensões do objeto de mídia em width e height, valores: % ou pixels;
3. bounds: posição e dimensões do objeto de mídia em left, top, width e height,
valores: % ou pixels;
4. zIndex: posição da região no eixo z (sobreposições de regiões);
5. background: cor de fundo (white, black, silver, gray, red, maroon, fuchsia,
purple, lime, green, yellow, olive, blue, navy, aqua, teal ou transparent);
6. visible: true ou false (visível ou invisível);
7. transparency: grau de tranparência, valores entre 0 e 1 ou %.
6.4.4 Parâmetros reservados para mídia visual:
1. fit: recebe como valor fill, hidden, meet, meetBest ou slice;
2. fill: redimensiona o conteúdo do objeto de mídia para que toque todas as
bordas da região, distorce se necessário;
3. hidden: se a mídia for maior ou menor que a região, a área restante é preenchida
com a cor de fundo;
4. meet: redimensiona o conteúdo do objeto de mídia mantendo suas proporções
até atingir uma das bordas da região. Espaços vazios são preenchidos com a cor
de fundo;
5. meetBest: o objeto é redimensionado até o dobro do seu tamanho original;
6. slice: redimensiona o conteúdo do objeto de mídia mantendo suas proporções
até que toda a região seja preenchida. Corta partes do objeto se necessário.
6.4.5 Parâmetros reservados para mídia textual:
1. scroll: barras de rolagem. Valores: none, horizontal, vertical, both, automatic;
2. style: folha de estilo;
3. fontColor: cor da fonte;
4. fontFamily: família da fonte;
5. fontSize: tamanho da fonte em pontos;
6. fontVariant: variação de fonte, valores: normal ou small-caps (letras
maiúsculas pequenas);
7. fontWeight: valores normal ou bold (negrito).
6.5. Elos e Conectores
Os elos, ou links, associam nós através de conectores, que definem a semântica da
associação entre os nós, o relacionamento de sincronismo propriamento dito entre
interfaces de objetos de uma aplicação NCL e o seu comportamento é definido pelo
conector que o elo utiliza.
O conector é aquele que define a ação: iniciar, parar, repetir, ir para outro ponto
do vídeo, setar variáveis, etc. Uma condição sempre deve ser satisfeita para que ações
possam ser disparadas.
Exemplificando, podemos ler e entender da seguinte forma: “Quando
condição/evento, então ação;Quando algum objeto ligado ao papel onBegin iniciar,
inicia também algum objeto ligado ao papel start”. Para esta ação acontecer, além do
elo, é necessário o conector. Abaixo são listados os atributos do elemento link (elo –
elemento <link>):
1. id: identificação;
2. xconnector: conector, da base de conectores, que será utilizado.
6.6. Tocando um vídeo com menu utilizando conectores
A Listagem 6.3 é reapresentada na Listagem 6.4. Desta vez, os botões serão
inicializados usando um elo ao invés de portas. Os elos se comunicam com os
conectores da base de conectores, arquivo ConnectorBase.ncl. Por este motivo, sempre
ao criar um novo projeto NCL na IDE Eclipse, esse arquivo é gerado automaticamente.
O arquivo ConnectorBase.ncl contém vários conectores prontos para ser utilizados em
diversas ações, entretanto os desenvolvedores podem criar os seus próprios conectores.
A Listagem 6.4 utilizará a ação start e stop: “ao iniciar o vídeo, inicie também os quatro
botões, e ao parar o vídeo, pare também os quatro botões”.
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!-- Generated by NCL Eclipse -->
3 <ncl id="main" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
4 <!-- Cabeçalho do Programa -->
5 <head>
6 <regionBase>
7 <region id="rgTV" zIndex="1">
8 <region id="rgVideo" top="0" left="0" height="480"
width="600" zIndex="2"/>
9 <region id="rgMenu" top="50" left="50" height="250"
width="150" zIndex="3">
10 <region id="rgBotao1" top="0" height="50"
width="100"/>
11 <region id="rgBotao2" top="60" height="50"
width="100"/>
12 <region id="rgBotao3" top="120" height="50"
width="100"/>
13 <region id="rgBotao4" top="180" height="50"
width="100"/>
14 </region>
15 </region>
16 </regionBase>
17 <descriptorBase>
18 <descriptor id="dVideo" region="rgVideo"/>
19 <descriptor id="dMenu" region="rgMenu"/>
20 <descriptor id="dBotao1" region="rgBotao1"/>
21 <descriptor id="dBotao2" region="rgBotao2"/>
22 <descriptor id="dBotao3" region="rgBotao3"/>
23 <descriptor id="dBotao4" region="rgBotao4"/>
24 </descriptorBase>
25 <connectorBase>
26 <importBase documentURI="ConnectorBase.ncl" alias="cb"/>
27 </connectorBase>
28 </head>
29 <body>
30 <port id="pVideo" component="Video"/>
31 <media id="Video" src="media/videos/video.mpg"
descriptor="dVideo"/>
32 <media id="Botao1" src="media/imagens/botao_vermelho.png"
descriptor="dBotao1"/>
33 <media id="Botao2" src="media/imagens/botao_verde.png"
descriptor="dBotao2"/>
34 <media id="Botao3" src="media/imagens/botao_amarelo.png"
descriptor="dBotao3"/>
35 <media id="Botao4" src="media/imagens/botao_azul.png"
descriptor="dBotao4"/>
36 <link id="inicio" xconnector="cb#onBeginStartN">
37 <bind role="onBegin" component="Video"/>
38 <bind role="start" component="Botao1"/>
39 <bind role="start" component="Botao2"/>
40 <bind role="start" component="Botao3"/>
41 <bind role="start" component="Botao4"/>
42 </link>
43 <link id="fim" xconnector="cb#onEndStopN">
44 <bind role="onEnd" component="Video"/>
45 <bind role="stop" component="Botao1"/>
46 <bind role="stop" component="Botao2"/>
47 <bind role="stop" component="Botao3"/>
48 <bind role="stop" component="Botao4"/>
49 </link>
50 </body>
51 </ncl>
Listagem 6.4: Iniciando um video e quatro imagens usando elos e conectores
Observe no código que existem dois elos, um para iniciar as mídias e outro para
parar a exibição das mídias. Os conectores da base de conectores que forem utilizados,
são apresentados no trecho de código abaixo:
<causalConnector id="onBeginStartN">
<simpleCondition role="onBegin"/>
<simpleAction role="start" max="unbounded" qualifier="par"/>
</causalConnector>
<causalConnector id="onEndStopN">
<simpleCondition role="onEnd"/>
<simpleAction role="stop" max="unbounded" qualifier="par"/>
</causalConnector>
Ambos os conectores acima são do tipo causais de 1 para N – uma mídia para
várias mídias. onBegin é ativado por um nó de contexto, de alternativa, de mídia ou
âncora de um nó de mídia. A ação resultante é a inicialização dos N nós a partir do
primeiro. onEnd é idêntico a onBegin, a diferença é que ao invés de iniciar, os nós serão
finalizados.
Observe que o id do elemento <causalConnector> é usado no <xconnector>
do elemento link: <link id="fim" xconnector="cb#onEndStopN"> e
<causalConnector id="onEndStopN">. É dessa forma que elos e conectores se
comunicam. Os elos dizem que ao iniciar (onBegin) o vídeo, incie também as imagens
(start), e ao parar o video (onEnd) pare também as imagens (stop).
<simpleCondition role="onBegin"/> é uma condição simples em que a
regra (role) é começar o nó. <simpleAction role="start" max="unbounded"
qualifier="par"/> é uma ação simples em que a regra (role) é iniciar o nó. max é a
cardinalidade, o número máximo de objetos que podem ser associados, e o valor
unbounded é quando não há limite. qualifier define se as ações devem ser disparadas
em paralelo (par) ou em sequência (seq).
Existem ainda mais atributos e elementos filhos para os conectores e elos que
podem ser conferidos em SOARES.
6.7. Interatividade e navegação de teclas
Será inserido no código NCL da Listagem 6.4, a navegação por teclas e a interatividade.
Quando o usuário selecionar um dos botões, o seguinte irá ocorrer:
1. Botão vermelho (F1): redimensiona o vídeo para um tamanho menor e em outra
região da tela;
2. Botão verde (F2): apresenta uma legenda;
3. Botão amarelo (F3): pára a legenda e volta o video ao normal;
4. Botão azul (F4): pára a exibição dos botões coloridos e mostra um botão preto;
5. Botão preto (ENTER): volta a exibição dos botões coloridos.
Para redimensionar o vídeo, é necessário definir as propriedades da mídia na
declaração da mídia. As propriedades do vídeo são na verdade o tamanho e o ponto x e
y da tela onde o video começa. O trecho de código a seguir mostra como isso deve ser
feito. Para o topo, a esquerda, a altura e largura, são definidas as propriedades com o
elemento filho do elemento <media>, <property> que possui o atributo name. Dessa
forma, os valores dessas propriedades poderão ser alterados no programa, no momento
em que o usuário selecionar o botão vermelho.
<media id="Video" src="media/videos/video.mpg" descriptor="dVideo">
<property name="top"/>
<property name="left"/>
<property name="width"/>
<property name="height"/>
</media>
Para a navegação de teclas, será necessário adicionar atributos ao elemento
<descriptor> de cada botão, como apresentado no trecho de código abaixo:
<descriptorBase>
<descriptor id="dVideo" region="rgVideo"/>
<descriptor id="dMenu" region="rgMenu"/>
<descriptor id="dBotao1" region="rgBotao1" focusIndex="1"
moveUp="4" moveDown="2" focusBorderColor="aqua"
focusBorderWidth="3" selBorderColor="white"/>
<descriptor id="dBotao2" region="rgBotao2" focusIndex="2"
moveUp="1" moveDown="3" focusBorderColor="aqua"
focusBorderWidth="3" selBorderColor="white"/>
<descriptor id="dBotao3" region="rgBotao3" focusIndex="3"
moveUp="2" moveDown="4" focusBorderColor="aqua"
focusBorderWidth="3" selBorderColor="white"/>
<descriptor id="dBotao4" region="rgBotao4" focusIndex="4"
moveUp="3" moveDown="1" focusBorderColor="aqua"
focusBorderWidth="3" selBorderColor="white"/>
</descriptorBase>
Os atributos são descritos abaixo:
1. focusIndex: índice de navegação do elemento;
2. focusBorderColor: cor da borda;
3. focusBorderWidth: espessura da borda;
4. moveUp: índide de navegação do elemento. Quando a tecla para cima for
pressionada, quem estará com o foco? O elemento cujo índice for indicado aqui;
5. moveDown: índide de navegação do elemento. Quando a tecla para baixo for
pressionada, quem estará com o foco? O elemento cujo índice for indicado aqui;
6. selBorderColor: cor de borda quando enter for pressionado.
A Figura 6.5 ilustra como focusIndex deve ser usado junto à moveUp e moveDown
quando se tem quatro itens no menu.
moveUp = 4
focusIndex = 1
moveDown = 2
Botão 1
Vermelho
moveUp = 1
focusIndex = 2
moveDown = 3
Botão 2
Verde
moveUp = 2
focusIndex = 3
moveDown = 4
Botão 3
Amarelo
moveUp = 3
focusIndex = 4
moveDown = 1
Botão 4
Azul
Figura 6.5. Navegação de teclas para quatro itens de menu
No código da Listagem 6.4 será adicionado o seguinte trecho de código para
permitir que, quando o usuário aperte o botão vermelho, o vídeo seja redimensionado:
<link id="vermelho" xconnector="cb#onKeySelectionSetN">
<bind role="onSelection" component="Botao1">
<bindParam name="keyCode" value="RED"/>
</bind>
<bind role="set" component="Video" interface="top">
<bindParam name="var" value="100"/>
</bind>
<bind role="set" component="Video" interface="left">
<bindParam name="var" value="200"/>
</bind>
<bind role="set" component="Video" interface="width">
<bindParam name="var" value="300"/>
</bind>
<bind role="set" component="Video" interface="height">
<bindParam name="var" value="300"/>
</bind>
</link>
onKeySelectionSetN permitirá que, ao pressionar uma tecla, uma ou mais
propriedades de uma mídia sejam setadas: onKey = na tecla, Selection = seleção, SetN
= setar uma ou mais propriedades, keyCode = código da tecla, value = valor. No código
verifica-se que para o Video são alterados os valores das propriedades top, left, width
e height usando o atributo interface, e que foram definidos na declaração da mídia.
Pode-se ler da seguinte forma: ao selecionar o Botão 1 que tem o código de tecla F1
(correspondente à cor vermelha), altere os valores de x, y, altura e largura do vídeo. O
connector para este elo é apresentado abaixo:
Figura 6.6. Vídeo com Menu, execução da Listagem 6.4
<causalConnector id="onKeySelectionSetN">
<connectorParam name="keyCode"/>
<connectorParam name="var"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<simpleAction role="set" value="$var" max="unbounded"
qualifier="par"/>
</causalConnector>
Figura 6.7. Video redimensionado após usuário apertar a tecla vermelha
Note que <connectorParam> tem o atributo name que coincide com o utilizado
em <bindParam> no elemento <link>, esses são os parâmetros do código que serão
utilizados e modificados (a tecla pressionada e o valor da posição e tamanho do video).
O símbolo $ indica que var e keyCode são variáveis. A Figura 6.6 apresenta os botões
do menu com o focusIndex e a Figura 6.7 apresenta o que acontece na tela da TV
quando o usuário aperta a tecla vermelha.
Para apresentar uma legenda devemos inserir esta mídia no código, assim como
o seu descritor e região que será apresentada, conforme códigos abaixo:
<region id="rgLegenda" bottom="50" left="50" height="80" width="300"
zIndex="4"/>
<descriptor id="dLegenda" region="rgLegenda"/>
<media id="Legenda" src="media/legendas/legenda.html"
descriptor="dLegenda"/>
Feito isto, é preciso agora linkar as ações, isto é, quando o usuário apertar a tecla
verde (F2), a legenda deverá ser inicializada e apresentada na região destinada. Portanto,
um link com uma ação de tecla deve ser criado, conforme mostra o código abaixo. Este
link é mais simples que o apresentado anteriormente, para fazer as alterações no vídeo:
onKey = na tecla, Selection = selecionada, Start = inicie, component = o componente
botao 2 , value = com o valor verde, start = então inicie, component = o componente
de mídia Legenda. O resultado pode ser verificado na Figura 6.8.
<link id="verde" xconnector="cb#onKeySelectionStart">
<bind role="onSelection" component="Botao2">
<bindParam name="keyCode" value="GREEN"/>
</bind>
<bind role="start" component="Legenda"/>
</link>
Figura 6.8. Ao aperter a tecla verde, a legenda aparece
É importante lembrar que esses arquivos de mídia devem estar nas pastas do
projeto. O botão amarelo vai parar a legenda e voltar o vídeo ao normal. Este item dará
mais trabalho, pois é necessário alterar os valores das propriedades do vídeo e ao
mesmo tempo parar a exibição da legenda. Portanto, será necessário usar um conector e
um elo mais elaborados. Não será necessário adicionar nenhuma mídia, então,
basicamente, só será adicionado o código para fazer esta ação:
<link id="amarelo" xconnector="cb#onKeySelectionStopSetN">
<bind role="onSelection" component="Botao3">
<bindParam name="keyCode" value="YELLOW"/>
</bind>
<bind role="set" component="Video" interface="top">
<bindParam name="var" value="0"/>
</bind>
<bind role="set" component="Video" interface="left">
<bindParam name="var" value="0"/>
</bind>
<bind role="set" component="Video" interface="width">
<bindParam name="var" value="600"/>
</bind>
<bind role="set" component="Video" interface="height">
<bindParam name="var" value="480"/>
</bind>
<bind role="stop" component="Legenda"/>
</link>
O link utiliza o conector onKeySelectionStopSetN, que pode ser traduzido
como “na tecla selecionada, pare um objeto de mídia e altere as N configurações do
outro objeto de mídia”. Para top, left, width e height, que são as propriedades da
mídia Video, é utilizada a regra (role) set e para a mídia Legenda é utilizada a regra
stop (parar). Os valores são passados para as propriedades pelo atributo value, e o
atributo interface, permite que o elemento <media> e o elemento <link>
comuniquem-se.
O botão azul, ao ser pressionado, parará a exibição dos botões coloridos e
apresentará um botão preto que, ao ser pressionado (tecla enter) voltará a exibição
normal dos botões coloridos. Para que isso ocorra, serão adicionados a região, o
descritor, a mídia para o botão preto e o elo, como a seguir:
<region id="rgBotao5" top="50" left="50" height="250" width="150"
zIndex="4"/>
<descriptor id="dBotao5" region="rgBotao5" focusIndex="1"
focusBorderColor="aqua" focusBorderWidth="3" selBorderColor="white"/>
<media id="Botao5" src="media/imagens/botao_preto.png"
descriptor="dBotao5"/>
<link id="azul" xconnector="cb#onKeySelectionStopNStartN">
<bind role="onSelection" component="Botao4">
<bindParam name="keyCode" value="BLUE"/>
</bind>
<bind role="stop" component="Botao1"/>
<bind role="stop" component="Botao2"/>
<bind role="stop" component="Botao3"/>
<bind role="stop" component="Botao4"/>
<bind role="start" component="Botao5"/>
</link>
O elo onKeySelectionStopNStartN pode ser lido como “na tecla selecionada,
pare N mídias e inicie N mídias”, que é a situação do botão azul. A Figura 6.9 apresenta
o resultado:
Figura 6.9. Ao aperter a tecla azul, o botão preto é exibido.
Agora será feito processo inverso, quando pressionar o botão preto, os botões
coloridos voltam a ser exibidos. O elo a ser utilizado é muito parecido com o anterior,
onkeySelectionStartNStopN. Será colocado como regra stop o botão preto e regra
start os botões coloridos. Além disso, o código da tecla agora será o ENTER, pois não
há mapeamento para outras cores além das pré-definidas (vermelho, verde, amarelo e
azul). Abaixo é apresentadoo código para o elo:
<link id="preto" xconnector="cb#onKeySelectionStartNStopN">
<bind role="onSelection" component="Botao5">
<bindParam name="keyCode" value="ENTER"/>
</bind>
<bind role="start" component="Botao1"/>
<bind role="start" component="Botao2"/>
<bind role="start" component="Botao3"/>
<bind role="start" component="Botao4"/>
<bind role="stop" component="Botao5"/>
</link>
Pronto, a aplicação interativa com a utilização de teclas está pronta. Com isto,
foi possível demonstrar os conceitos básicos da linguagem NCL. Existem muitos
recursos avançados que não são abordados aqui, mas podem ser encontrados na
referências deste capítulo. A Listagem 6.5 mostra o código completo da aplicação.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Generated by NCL Eclipse -->
<ncl id="main" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
<!-- Cabeçalho do Programa -->
<head>
<!-- Base de Regiões -->
<regionBase>
<region id="rgTV" zIndex="1">
<region id="rgVideo" top="0" left="0" height="480"
width="600" zIndex="2"/>
<region id="rgMenu" top="50" left="50" height="250"
width="150" zIndex="3">
<region id="rgBotao1" top="0" height="50" width="100"/>
<region id="rgBotao2" top="60" height="50" width="100"/>
<region id="rgBotao3" top="120" height="50"
width="100"/>
<region id="rgBotao4" top="180" height="50"
width="100"/>
</region>
<region id="rgLegenda" bottom="50" left="50" height="80"
width="300" zIndex="4"/>
<region id="rgBotao5" top="50" left="50" height="50"
width="100" zIndex="4"/>
</region>
</regionBase>
<!-- Base de Descritores -->
<descriptorBase>
<descriptor id="dVideo" region="rgVideo"/>
<descriptor id="dMenu" region="rgMenu"/>
<descriptor id="dBotao1" region="rgBotao1" focusIndex="1"
moveUp="4" moveDown="2" focusBorderColor="aqua"
focusBorderWidth="3" selBorderColor="white"/>
<descriptor id="dBotao2" region="rgBotao2" focusIndex="2"
moveUp="1" moveDown="3" focusBorderColor="aqua"
focusBorderWidth="3" selBorderColor="white"/>
<descriptor id="dBotao3" region="rgBotao3" focusIndex="3"
moveUp="2" moveDown="4" focusBorderColor="aqua"
focusBorderWidth="3" selBorderColor="white"/>
<descriptor id="dBotao4" region="rgBotao4" focusIndex="4"
moveUp="3" moveDown="1" focusBorderColor="aqua"
focusBorderWidth="3" selBorderColor="white"/>
<descriptor id="dBotao5" region="rgBotao5" focusIndex="1"
focusBorderColor="aqua" focusBorderWidth="3"/>
<descriptor id="dLegenda" region="rgLegenda"/>
</descriptorBase>
<!-- Base de Descritores -->
<connectorBase>
<importBase documentURI="ConnectorBase.ncl" alias="cb"/>
</connectorBase>
</head>
<!-- Corpo do documento -->
<body>
<!-- Portas -->
<port id="pVideo" component="Video"/>
<!-- Mídias -->
<media id="Video" src="media/videos/video.mpg" descriptor="dVideo">
<property name="top"/>
<property name="left"/>
<property name="width"/>
<property name="height"/>
</media>
<media id="Botao1" src="media/imagens/botao_vermelho.png"
descriptor="dBotao1"/>
<media id="Botao2" src="media/imagens/botao_verde.png"
descriptor="dBotao2"/>
<media id="Botao3" src="media/imagens/botao_amarelo.png"
descriptor="dBotao3"/>
<media id="Botao4" src="media/imagens/botao_azul.png"
descriptor="dBotao4"/>
<media id="Botao5" src="media/imagens/botao_preto.png"
descriptor="dBotao5"/>
<media id="Legenda" src="media/legendas/legenda.html"
descriptor="dLegenda"/>
<!-- Elo para iniciar as mídias -->
<link id="inicio" xconnector="cb#onBeginStartN">
<bind role="onBegin" component="Video"/>
<bind role="start" component="Botao1"/>
<bind role="start" component="Botao2"/>
<bind role="start" component="Botao3"/>
<bind role="start" component="Botao4"/>
</link>
<!-- Elo para finalizar as mídias -->
<link id="fim" xconnector="cb#onEndStopN">
<bind role="onEnd" component="Video"/>
<bind role="stop" component="Botao1"/>
<bind role="stop" component="Botao2"/>
<bind role="stop" component="Botao3"/>
<bind role="stop" component="Botao4"/>
</link>
<!-- Elo para as ações do botão vermelho -->
<link id="vermelho" xconnector="cb#onKeySelectionSetN">
<bind role="onSelection" component="Botao1">
<bindParam name="keyCode" value="RED"/>
</bind>
<bind role="set" component="Video" interface="top">
<bindParam name="var" value="100"/>
</bind>
<bind role="set" component="Video" interface="left">
<bindParam name="var" value="200"/>
</bind>
<bind role="set" component="Video" interface="width">
<bindParam name="var" value="300"/>
</bind>
<bind role="set" component="Video" interface="height">
<bindParam name="var" value="300"/>
</bind>
</link>
<!-- Elo para as ações do botão verde -->
<link id="verde" xconnector="cb#onKeySelectionStart">
<bind role="onSelection" component="Botao2">
<bindParam name="keyCode" value="GREEN"/>
</bind>
<bind role="start" component="Legenda"/>
</link>
<!-- Elo para as ações do botão amarelo -->
<link id="amarelo" xconnector="cb#onKeySelectionStopSetN">
<bind role="onSelection" component="Botao3">
<bindParam name="keyCode" value="YELLOW"/>
</bind>
<bind role="set" component="Video" interface="top">
<bindParam name="var" value="0"/>
</bind>
<bind role="set" component="Video" interface="left">
<bindParam name="var" value="0"/>
</bind>
<bind role="set" component="Video" interface="width">
<bindParam name="var" value="600"/>
</bind>
<bind role="set" component="Video" interface="height">
<bindParam name="var" value="480"/>
</bind>
<bind role="stop" component="Legenda"/>
</link>
<!-- Elo para as ações do botão azul -->
<link id="azul" xconnector="cb#onKeySelectionStopNStartN">
<bind role="onSelection" component="Botao4">
<bindParam name="keyCode" value="BLUE"/>
</bind>
<bind role="stop" component="Botao1"/>
<bind role="stop" component="Botao2"/>
<bind role="stop" component="Botao3"/>
<bind role="stop" component="Botao4"/>
<bind role="start" component="Botao5"/>
</link>
<!-- Elo para as ações do botão preto -->
<link id="preto" xconnector="cb#onKeySelectionStartNStopN">
<bind role="onSelection" component="Botao5">
<bindParam name="keyCode" value="ENTER"/>
</bind>
<bind role="start" component="Botao1"/>
<bind role="start" component="Botao2"/>
<bind role="start" component="Botao3"/>
<bind role="start" component="Botao4"/>
<bind role="stop" component="Botao5"/>
</link>
</body>
</ncl>
Listagem 6.5: Código completo da aplicação
Conclusão
O mercado de trabalho para desenvolvedores de aplicações interativas destinadas ao
sistema brasileiro de TV Digital está começando a despontar. Em breve, faltará mão de
obra qualificada nesta área, não somente no Brasil, mas em todos os países que
adotaram, e irão adotar, o sistema nipo-brasileiro de TV Digital. Agora é o momento de
se qualificar e preparar para as oportunidades que estão por vir. Agências de
publicidade, emissoras de TV e empresas são alguns dos locais que estes
desenvolvedores poderão trabalhar.
Este capítulo introduziu a linguagem NCL aos interessados em investir nesta
área. Os elementos básicos da linguagem foram apresentados conforme o
desenvolvimento da aplicação foi sendo apresentado: <region>, <descriptor>,
<media>, <link>, <port>. Somente com este conhecimento é possível desenvolver
várias aplicações, entretanto, é necessário aprofundar no estudo da linguagem e incluir
nas aplicações, LUA, a linguagem de scripts que permite construir aplicações mais
interessantes e otimizadas. O vídeo da aplicação funcionando pode ser conferido no
youtube:
Referências
SOARES, Luiz Fernando Gomes; BARBOSA, Simone Diniz Junqueira. Programando
em NCL 3.0: desenvolvimento de aplicações para middleware Ginga, TV Digital e
Web. Rio de Janeiro: Elsevier, 2009.
SOARES, Luiz Fernando Gomes; RODRIGUES, Rogério Ferreira; BARBOSA, Simone
Diniz Junqueira. Manual de Construção de Programas Audiovisuais Interativos
Utilizando a NCL 2.3 – Perfil Básico. 1ª edição, Rio de Janeiro: PUC-RIO,
Telemidia, 2006.
ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. Televisão digital terrestre –
Codificação de dados e especificações de transmissão para radiodifusão digital Parte
2: Ginga-NCL para receptores fixos e móveis – Linguagem de aplicação XML para
codificação de aplicações. ABNT NBR 15606-2:2007. 2ª ed. 27/05/2011.
ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. Televisão digital terrestre –
Codificação de dados e especificações de transmissão para radiodifusão digital Parte
5: Ginga-NCL para receptores portáteis – Linguagem de aplicação XML para
codificação de aplicações. ABNT NBR 15606-5:2008. 2ª ed. 19/04/2011.
ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. Televisão digital terrestre –
Codificação de dados e especificações de transmissão para radiofusão digital Parte 7:
Ginga-NCL – Diretrizes operacionais para as ABNT NBR 15606-2 e ABNT NBR
15606-5. ABNT NBR 15606-7:2011. 1ª ed. 21/03/2011.
GINGA. Disponível em: <http://www.ginga.org.br/>, acessado em 13/10/2011, 14:00
GINGA-NCL. Disponível em <http://www.gingancl.org.br/>, acessado em 13/10/2011,
14:00
NCL. Disponível em <http://www.ncl.org.br/>, acessado em 13/10/2011, 14:00
CLUBE NCL. Disponível em <http://clube.ncl.org.br/>, acessado em 13/10/2011, 14:00
FORUM SBTVD. Disponível em: <http://www.forumsbtvd.org.br/>, acessado em
13/10/2011, 14:00
DTV. Disponível em <http://www.dtv.org.br/>, acessado em 13/10/2011, 14:00.
Sobre a Autora
Bacharel em Engenharia de Computação pelo Centro Universitário de Votuporanga -
UNIFEV. Mestre em Ciência da Computação pela UFSCar - Linha de pesquisa:
Sistemas Distribuídos e Redes - Sistemas Multimídia e Internet - Personalização e
Privacidade em ambiente de TV Digital. Coordenadora do curso de Engenharia de
Computação na USC - Universidade do Sagrado Coração - Bauru/SP. Fundadora e
Coordenadora Geral da comunidade GarotasCPBr – Garotas Campus Party Brasil.
Coordenadora da comunidade Java Noroeste na região de Bauru. Adepta de
comunidades de Software Livre: Java – SOU JAVA – e Linux – FEDORA. Áreas de
Interesse: Mulheres na TI, Redes de Computadores, Java, Redes Sociais,
Desenvolvimento de Software para TV Digital, Web e Dispositivos Portáteis/Móveis.
Lattes: http://lattes.cnpq.br/8559022477811603.

Mais conteúdo relacionado

Semelhante a NCL: Nested Context Language

TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...tdc-globalcode
 
Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Alexandre Tarifa
 
Blog mais biblio apresentação
Blog mais biblio apresentaçãoBlog mais biblio apresentação
Blog mais biblio apresentaçãoLucikelly Oliveira
 
Blog mais biblio apresentação
Blog mais biblio apresentaçãoBlog mais biblio apresentação
Blog mais biblio apresentaçãoLucikelly Oliveira
 
Desenvolvimento para tv digital interativa [ dia 2]
Desenvolvimento para tv digital interativa [ dia 2]Desenvolvimento para tv digital interativa [ dia 2]
Desenvolvimento para tv digital interativa [ dia 2]Diemesleno Souza Carvalho
 
Mini-CCNx: prototipagem rápida para Redes Orientadas a Conteúdo baseadas em CCN
Mini-CCNx: prototipagem rápida para Redes Orientadas a Conteúdo baseadas em CCNMini-CCNx: prototipagem rápida para Redes Orientadas a Conteúdo baseadas em CCN
Mini-CCNx: prototipagem rápida para Redes Orientadas a Conteúdo baseadas em CCNCarlos Cabral
 
Gerência de redes utilizando o cacti
Gerência de redes utilizando o cactiGerência de redes utilizando o cacti
Gerência de redes utilizando o cactiIsraelCunha
 
Sistemas logicos programaveis
Sistemas logicos programaveisSistemas logicos programaveis
Sistemas logicos programaveislaritha
 
The Language VolcanX - ABMSL
The Language VolcanX - ABMSLThe Language VolcanX - ABMSL
The Language VolcanX - ABMSLMichel Alves
 
Redes Definidas por Software - Leomar Viegas
Redes Definidas por Software - Leomar ViegasRedes Definidas por Software - Leomar Viegas
Redes Definidas por Software - Leomar ViegasLeomar Viegas
 
Programação em Shell Script
Programação em Shell ScriptProgramação em Shell Script
Programação em Shell ScriptReinaldo Lima
 
Minicurso code igniter aula 2
Minicurso code igniter   aula 2Minicurso code igniter   aula 2
Minicurso code igniter aula 2lfernandomcj
 
ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010Norton Guimarães
 

Semelhante a NCL: Nested Context Language (20)

TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
 
Relatório pedrocastro 2012_2013_v1
Relatório pedrocastro 2012_2013_v1Relatório pedrocastro 2012_2013_v1
Relatório pedrocastro 2012_2013_v1
 
Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010
 
Blog mais biblio apresentação
Blog mais biblio apresentaçãoBlog mais biblio apresentação
Blog mais biblio apresentação
 
Blog mais biblio apresentação
Blog mais biblio apresentaçãoBlog mais biblio apresentação
Blog mais biblio apresentação
 
Asterisk
AsteriskAsterisk
Asterisk
 
Desenvolvimento para tv digital interativa [ dia 2]
Desenvolvimento para tv digital interativa [ dia 2]Desenvolvimento para tv digital interativa [ dia 2]
Desenvolvimento para tv digital interativa [ dia 2]
 
Mdb
MdbMdb
Mdb
 
Mini-CCNx: prototipagem rápida para Redes Orientadas a Conteúdo baseadas em CCN
Mini-CCNx: prototipagem rápida para Redes Orientadas a Conteúdo baseadas em CCNMini-CCNx: prototipagem rápida para Redes Orientadas a Conteúdo baseadas em CCN
Mini-CCNx: prototipagem rápida para Redes Orientadas a Conteúdo baseadas em CCN
 
Gerência de redes utilizando o cacti
Gerência de redes utilizando o cactiGerência de redes utilizando o cacti
Gerência de redes utilizando o cacti
 
Sistemas logicos programaveis
Sistemas logicos programaveisSistemas logicos programaveis
Sistemas logicos programaveis
 
Protocolos
ProtocolosProtocolos
Protocolos
 
The Language VolcanX - ABMSL
The Language VolcanX - ABMSLThe Language VolcanX - ABMSL
The Language VolcanX - ABMSL
 
Minicurso Node-RED.pdf
Minicurso Node-RED.pdfMinicurso Node-RED.pdf
Minicurso Node-RED.pdf
 
Redes Definidas por Software - Leomar Viegas
Redes Definidas por Software - Leomar ViegasRedes Definidas por Software - Leomar Viegas
Redes Definidas por Software - Leomar Viegas
 
Protocolos
ProtocolosProtocolos
Protocolos
 
Programação em Shell Script
Programação em Shell ScriptProgramação em Shell Script
Programação em Shell Script
 
Minicurso code igniter aula 2
Minicurso code igniter   aula 2Minicurso code igniter   aula 2
Minicurso code igniter aula 2
 
Apostila s7
Apostila s7Apostila s7
Apostila s7
 
ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010
 

Mais de Elaine Cecília Gatto

A influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etariaA influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etariaElaine Cecília Gatto
 
Inteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à MedicinaInteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à MedicinaElaine Cecília Gatto
 
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...Elaine Cecília Gatto
 
Apresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPCApresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPCElaine Cecília Gatto
 
Como a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptxComo a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptxElaine Cecília Gatto
 
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...Elaine Cecília Gatto
 
Community Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCarCommunity Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCarElaine Cecília Gatto
 
Classificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de CorrelaçõesClassificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de CorrelaçõesElaine Cecília Gatto
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...Elaine Cecília Gatto
 
Community Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label ClassificationCommunity Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label ClassificationElaine Cecília Gatto
 
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdfMulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdfElaine Cecília Gatto
 
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...Elaine Cecília Gatto
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...Elaine Cecília Gatto
 
Pipeline desdobramento escalonamento
Pipeline desdobramento escalonamentoPipeline desdobramento escalonamento
Pipeline desdobramento escalonamentoElaine Cecília Gatto
 
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bitsResumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bitsElaine Cecília Gatto
 
Como descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcaçãoComo descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcaçãoElaine Cecília Gatto
 

Mais de Elaine Cecília Gatto (20)

A influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etariaA influência da Tecnologia em cada faixa etaria
A influência da Tecnologia em cada faixa etaria
 
Inteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à MedicinaInteligência Artificial Aplicada à Medicina
Inteligência Artificial Aplicada à Medicina
 
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
Além do Aprendizado Local e Global: Particionando o espaço de classes em prob...
 
Apresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPCApresentação da minha tese de doutorado no EPPC
Apresentação da minha tese de doutorado no EPPC
 
entrevista r7.pdf
entrevista r7.pdfentrevista r7.pdf
entrevista r7.pdf
 
Como a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptxComo a pesquisa científica impacta o mundo real.pptx
Como a pesquisa científica impacta o mundo real.pptx
 
Empoderamento Feminino
Empoderamento FemininoEmpoderamento Feminino
Empoderamento Feminino
 
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...Explorando correlações entre rótulos para o particionamento do espaço de rótu...
Explorando correlações entre rótulos para o particionamento do espaço de rótu...
 
Community Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCarCommunity Detection for Multi-Label Classification - Seminários UFSCar
Community Detection for Multi-Label Classification - Seminários UFSCar
 
Classificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de CorrelaçõesClassificação Multirrótulo: Aprendizado de Correlações
Classificação Multirrótulo: Aprendizado de Correlações
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
 
Community Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label ClassificationCommunity Detection Method for Multi-Label Classification
Community Detection Method for Multi-Label Classification
 
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdfMulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
Mulheres na Campus Party assumir o feminismo ou não – Blogueiras Feministas.pdf
 
Curtinhas de sábado.pdf
Curtinhas de sábado.pdfCurtinhas de sábado.pdf
Curtinhas de sábado.pdf
 
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
Explorando Correlações entre Rótulos usando Métodos de Detecção de Comu...
 
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
EXPLORANDO CORRELAÇÕES PARA O PARTICIONAMENTO DO ESPAÇO DE RÓTULOS EM PROBLEM...
 
Pipeline desdobramento escalonamento
Pipeline desdobramento escalonamentoPipeline desdobramento escalonamento
Pipeline desdobramento escalonamento
 
Cheat sheet Mips 32 bits
Cheat sheet Mips 32 bitsCheat sheet Mips 32 bits
Cheat sheet Mips 32 bits
 
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bitsResumo das Instruções de Desvio Incondicionais MIPS 32 bits
Resumo das Instruções de Desvio Incondicionais MIPS 32 bits
 
Como descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcaçãoComo descobrir e classificar coisas usando machine learning sem compilcação
Como descobrir e classificar coisas usando machine learning sem compilcação
 

Último

HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024Sandra Pratas
 
Aula 1, 2 Bacterias Características e Morfologia.pptx
Aula 1, 2  Bacterias Características e Morfologia.pptxAula 1, 2  Bacterias Características e Morfologia.pptx
Aula 1, 2 Bacterias Características e Morfologia.pptxpamelacastro71
 
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxApostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxIsabelaRafael2
 
Mesoamérica.Astecas,inca,maias , olmecas
Mesoamérica.Astecas,inca,maias , olmecasMesoamérica.Astecas,inca,maias , olmecas
Mesoamérica.Astecas,inca,maias , olmecasRicardo Diniz campos
 
O guia definitivo para conquistar a aprovação em concurso público.pdf
O guia definitivo para conquistar a aprovação em concurso público.pdfO guia definitivo para conquistar a aprovação em concurso público.pdf
O guia definitivo para conquistar a aprovação em concurso público.pdfErasmo Portavoz
 
PRIMEIRO---RCP - DEA - BLS estudos - basico
PRIMEIRO---RCP - DEA - BLS estudos - basicoPRIMEIRO---RCP - DEA - BLS estudos - basico
PRIMEIRO---RCP - DEA - BLS estudos - basicoSilvaDias3
 
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024Sandra Pratas
 
Empreendedorismo: O que é ser empreendedor?
Empreendedorismo: O que é ser empreendedor?Empreendedorismo: O que é ser empreendedor?
Empreendedorismo: O que é ser empreendedor?MrciaRocha48
 
DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...
DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...
DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...Martin M Flynn
 
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfDIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfIedaGoethe
 
Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...
Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...
Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...LuizHenriquedeAlmeid6
 
Aula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptxAula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptxBiancaNogueira42
 
As Viagens Missionária do Apostolo Paulo.pptx
As Viagens Missionária do Apostolo Paulo.pptxAs Viagens Missionária do Apostolo Paulo.pptx
As Viagens Missionária do Apostolo Paulo.pptxAlexandreFrana33
 
FCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirFCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirIedaGoethe
 
Guia completo da Previdênci a - Reforma .pdf
Guia completo da Previdênci a - Reforma .pdfGuia completo da Previdênci a - Reforma .pdf
Guia completo da Previdênci a - Reforma .pdfEyshilaKelly1
 
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbv19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbyasminlarissa371
 
PPT _ Módulo 3_Direito Comercial_2023_2024.pdf
PPT _ Módulo 3_Direito Comercial_2023_2024.pdfPPT _ Módulo 3_Direito Comercial_2023_2024.pdf
PPT _ Módulo 3_Direito Comercial_2023_2024.pdfAnaGonalves804156
 
Bingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteirosBingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteirosAntnyoAllysson
 
A Inteligência Artificial na Educação e a Inclusão Linguística
A Inteligência Artificial na Educação e a Inclusão LinguísticaA Inteligência Artificial na Educação e a Inclusão Linguística
A Inteligência Artificial na Educação e a Inclusão LinguísticaFernanda Ledesma
 
PRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕES
PRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕESPRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕES
PRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕESpatriciasofiacunha18
 

Último (20)

HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
HORA DO CONTO3_BECRE D. CARLOS I_2023_2024
 
Aula 1, 2 Bacterias Características e Morfologia.pptx
Aula 1, 2  Bacterias Características e Morfologia.pptxAula 1, 2  Bacterias Características e Morfologia.pptx
Aula 1, 2 Bacterias Características e Morfologia.pptx
 
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptxApostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
Apostila da CONQUISTA_ para o 6ANO_LP_UNI1.pptx
 
Mesoamérica.Astecas,inca,maias , olmecas
Mesoamérica.Astecas,inca,maias , olmecasMesoamérica.Astecas,inca,maias , olmecas
Mesoamérica.Astecas,inca,maias , olmecas
 
O guia definitivo para conquistar a aprovação em concurso público.pdf
O guia definitivo para conquistar a aprovação em concurso público.pdfO guia definitivo para conquistar a aprovação em concurso público.pdf
O guia definitivo para conquistar a aprovação em concurso público.pdf
 
PRIMEIRO---RCP - DEA - BLS estudos - basico
PRIMEIRO---RCP - DEA - BLS estudos - basicoPRIMEIRO---RCP - DEA - BLS estudos - basico
PRIMEIRO---RCP - DEA - BLS estudos - basico
 
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
HORA DO CONTO4_BECRE D. CARLOS I_2023_2024
 
Empreendedorismo: O que é ser empreendedor?
Empreendedorismo: O que é ser empreendedor?Empreendedorismo: O que é ser empreendedor?
Empreendedorismo: O que é ser empreendedor?
 
DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...
DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...
DIGNITAS INFINITA - DIGNIDADE HUMANA -Declaração do Dicastério para a Doutrin...
 
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdfDIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
DIA DO INDIO - FLIPBOOK PARA IMPRIMIR.pdf
 
Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...
Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...
Slides Lição 3, Betel, Ordenança para congregar e prestar culto racional, 2Tr...
 
Aula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptxAula 13 8º Ano Cap.04 Revolução Francesa.pptx
Aula 13 8º Ano Cap.04 Revolução Francesa.pptx
 
As Viagens Missionária do Apostolo Paulo.pptx
As Viagens Missionária do Apostolo Paulo.pptxAs Viagens Missionária do Apostolo Paulo.pptx
As Viagens Missionária do Apostolo Paulo.pptx
 
FCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimirFCEE - Diretrizes - Autismo.pdf para imprimir
FCEE - Diretrizes - Autismo.pdf para imprimir
 
Guia completo da Previdênci a - Reforma .pdf
Guia completo da Previdênci a - Reforma .pdfGuia completo da Previdênci a - Reforma .pdf
Guia completo da Previdênci a - Reforma .pdf
 
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbv19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
v19n2s3a25.pdfgcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 
PPT _ Módulo 3_Direito Comercial_2023_2024.pdf
PPT _ Módulo 3_Direito Comercial_2023_2024.pdfPPT _ Módulo 3_Direito Comercial_2023_2024.pdf
PPT _ Módulo 3_Direito Comercial_2023_2024.pdf
 
Bingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteirosBingo da potenciação e radiciação de números inteiros
Bingo da potenciação e radiciação de números inteiros
 
A Inteligência Artificial na Educação e a Inclusão Linguística
A Inteligência Artificial na Educação e a Inclusão LinguísticaA Inteligência Artificial na Educação e a Inclusão Linguística
A Inteligência Artificial na Educação e a Inclusão Linguística
 
PRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕES
PRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕESPRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕES
PRÉ-MODERNISMO - GUERRA DE CANUDOS E OS SERTÕES
 

NCL: Nested Context Language

  • 1. Capítulo 6 NCL – Nested Context Language Elaine Cecília Gatto Abstract NCL, Nested Context Language is the programming language used for developing interactive applications for the Brazilian Digital TV system. Created in the laboratory at PUC-RIO Telemedia, NCL is a simple, declarative, based on a conceptual model, much like HTML, XHTML, and other languages of any kind. NCL should be supported by all devices of digital TV reception of the current system nipo-Brazilian, and applications for mobile devices must necessarily be implemented in NCL. This chapter is dedicated to the presentation, orientation and introduction to software development with NCL, covering the basic steps that are fundamental and essential to a successful creation of interactive applications for digital TV in Brazil. Resumo NCL, Nested Context Language, é a linguagem de programação utilizada para o desenvolvimento de aplicações interativas para o sistema brasileiro de TV Digital. Criada na PUC-RIO pelo laboratório TELEMIDIA, NCL é uma linguagem simples, declarativa, baseada em um modelo conceitual, muito parecida com HTML, XHTML, e outras linguagens do tipo. NCL deve ser suportada por todos os dispositivos de recepção de TV Digital do atual sistema nipo-brasileiro, e aplicativos para dispositivos portáteis devem obrigatoriamente ser implementados em NCL. Este capítulo se dedica à apresentação, orientação e iniciação ao desenvolvimento de software com NCL, abordando os passos básicos, fundamentais e essenciais para uma criação bem sucedida de aplicações interativas para a TV Digital brasileira. 6.1. Introdução NCL – Nested Context Language ou Linguagem de Contextos Aninhados – é uma linguagem declarativa baseada no modelo conceitual NCM – Nested Context Model ou Modelo de Contextos Aninhados – ambas criadas pela PUC-RIO (Pontifícia Universidade Católica do Rio de Janeiro). NCM representa conceitos estruturais,
  • 2. eventos e relacionamentos entre os dados, definindo as regras estruturais e operações sobre os dados para manipulação e atualização das estruturas. A NCL define como os objetos de mídia são estruturados e relacionados, no tempo e no espaço, é uma linguagem de contexto aninhado, uma linguagem de marcação, tipo XHTML – eXtensible Hypertext Markup Language ou Linguagem de Marcação de Hipertexto Extensível – e utiliza conceitos de nós e elos, aplicados em documentos hipermídia. 6.1.1 Perfis Ncl Cada perfil NCL é composto por um conjunto de módulos da linguagem NCL, permitindo a criação de linguagens de acordo com as necessidades dos usuários. O objetivo deste capítulo não é apresentar com detalhes como essa construção é feita, entretanto, mais informações sobre o assunto podem ser obtidas em SOARES (2009), ABNT NBR 15606-2 (2007) e ITU-T H.761 (2009). A linguagem NCL para TV Digital é dividida em três perfis diferentes: EDTV, BDTV e CausalConnector. As aplicações desenvolvidas aqui utilizam o perfil EDTV. 6.1.2 Ferramentas Necessárias 1. Eclipse IDE: Esta ferramenta pode ser obtida gratuitamente no link abaixo. É fundamental para a construção do código NCL, juntamente com o plugin, item 2. http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers-includes-incubating- components/indigor 2. NCL Eclipse: O plugin NCL para a IDE Eclipse, pode ser obtido gratuitamente no link abaixo e permite que códigos NCL sejam escritos mais facilmente. A instalação e configuração do plugin também se encontram no link. http://laws.deinf.ufma.br/ncleclipse/installation.html 3. VMWare Player: É necessário para executar a máquina virtual Ginga-NCL e pode ser obtido gratuitamente no link abaixo. http://www.vmware.com/br/products/desktop_virtualization/player/overview.html 4. Ginga-NCL Virtual Set-top Box: É a máquina virtual Ginga-NCL, uma implementação de referência para testes de aplicações. Cada fabricante pode implementar a sua versão do Ginga-NCL, basta seguir as orientações contidas nas normas brasileiras, ABNT, para TV Digital. Pode ser obtido gratuitamente no link abaixo – é necessário apenas que seja feito o cadastro no site. http://www.softwarepublico.gov.br/ver-comunidade?community_id=1101545 5. SSH Secure File Transfer: É utilizado para transferir os arquivos – códigos NCL – do seu desktop ou notebook para dentro da máquina virtual Ginga-NCL e pode ser obtido gratuitamente no link abaixo. http://www.baixaki.com.br/download/ssh-secure-shell.htm 6. Scite – Compilador Lua: Pode ser obtido gratuitamente no link abaixo. É utilizado para escrever os códigos LUA que é a linguagem de script padrão para a NCL. http://www.scintilla.org/SciTE.html
  • 3. 6.1.3. Estrutura Completa de um Documento NCL 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 3 <ncl id="teste" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile"> 4 5 <!-- Cabeçalho do Programa --> 6 <head> 7 8 <!-- Base de importação de documentos: Especifica um conjunto de 9 documentos NCL importados e deve obrigatoriamente ser definido como 10 elemento-filho do elemento <head> --> 11 <importedDocumentBase> </importedDocumentBase> 12 13 <!-- Base de regras: Permite a definição de regras que, quando 14 satisfeitas, selecionam alternativas para a apresentação do 15 documento e deve obrigatoriamente ser definido como elemento-filho 16 do elemento <head> --> 17 <ruleBase> </ruleBase> 18 19 <!-- Base de efeitos de transição: Especifica um conjunto de 20 efeitos de transição e deve obrigatoriamente ser definido como 21 elemento-filho do elemento <head> --> 22 <transitionBase> </transitionBase> 23 24 <!-- Base de conectores: Permite o agrupamento de conectores. O 25 conteúdo exato de uma base de conectores é especificado por um 26 perfil de linguagem que utiliza as facilidades oferecidas pelos 27 conectores --> 28 <connectorBase> </connectorBase> 29 30 <!-- Base de regiões: Base de regiões do documento NCL. Define um 31 conjunto de elementos <region> cada qual podendo conter outro 32 conjunto de elementos <region> aninhados, e assim por diante, 33 recursivamente --> 34 <regionBase> </regionBase> 35 36 <!-- Base de descritores: Especifica o conjunto de descritores de 37 um documento e deve ser filho do elemento <head> --> 38 <descriptorBase> </descriptorBase> 39 40 <!-- Base de metadados --> 41 <meta content="" name=""/> 42 <metadata/> 43 44 <!-- Fim do cabeçalho do programa --> 45 </head> 46 47 <!-- Início do corpo do programa --> 48 <body> 49 50 <!-- Porta de entrada no programa: Especifica uma porta de um nó de 51 composição com seu respectivo mapeamento para uma interface --> 52 <port id="" component=""/> 53 54 <!-- Mídias: Define os tipos básicos de objetos de mídia --> 55 <media id=""></media> 56 57 <!-- Contextos: Contêm um conjunto de nós e um conjunto de elos --> 58 <context id=""> 59 <port id="" component="" />
  • 4. 60 </context> 61 62 <!-- Switchs: Permite a definição de nós alternativos a serem 63 escolhidos em tempo de apresentação do documento --> 64 <switch id=""> </switch> 65 66 <!-- Propriedade: É utilizado para definir uma propriedade ou grupo 67 de propriedades de um nó, como uma de suas interfaces (âncora) --> 68 <property name=""/> 69 70 <!-- Metadados --> 71 <meta content="" name=""/> 72 <metadata/> 73 74 <!-- Links/elos: Responsável por definir os elos, que utilizam 75 conectores --> 76 <link xconnector=""></link> 77 78 <!-- Fim do corpo --> 79 </body> 80 81 <!-- Fim do documento --> 82 </ncl> Listagem 6.1: Estrutura completa de um documento NCL. Nesta linha de código <ncl id="main" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile"> está sendo definido o nome do documento NCL como main e o perfil que será utilizado como o perfil EDTV. Normalmente, o NCL Eclipse, gera esta linha automaticamente, assim como a linha: <?xml version="1.0" encoding="ISO-8859-1"?> Os outros elementos, o desenvolvedor insere conforme a necessidade do documento que está sendo desenvolvido. Cada um dos itens na estrutura completa do documento NCL, apresentados acima, é basicamente um conceito da linguagem NCL. 6.1.4 Executando o primeiro documento NCL O código abaixo mostra como executar um vídeo em NCL. Observe que, para tocar um vídeo, é necessário utilizar quatro conceitos básicos de NCL: regiões, descritores, portas e mídias. 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 <!-- Generated by NCL Eclipse --> 3 <ncl id="main" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile"> 4 <!-- Cabeçalho do Programa --> 5 <head> 6 <regionBase> 7 <region id="rgTV" zIndex="1"> 8 <region id="rgVideo" top="10" left="10" width="600" height="480" zIndex="2"/> 9 </region> 10 </regionBase> 11 <descriptorBase> 12 <descriptor id="dVideo" region="rgVideo"/> 13 </descriptorBase>
  • 5. 14 </head> 15 <body> 16 <port id="p" component="Video"/> 17 <media id="Video" src="media/videos/video.mpg" descriptor="dVideo"/> 18 </body> 19 </ncl> Listagem 6.2: Código NCL para executar um vídeo. No cabeçalho são definidas duas regiões em <regionBase>, uma para a tela da TV e outra para a exibição do vídeo – nem sempre o vídeo vai ocupar toda a tela de TV, por isso duas regiões. A região destinada à TV possui os atributos id, para identificação da região e zIndex, que será melhor explicado na seção de regiões. A região destinada à apresentação do vídeo, além dos atributos id e zIndex, possui também os atributos para definição do tamanho do vídeo, width e height, e também do eixo x e y, left e top, para indicar em que ponto da tela o vídeo será apresentado. É definido também no cabeçalho apenas uma descrição de mídia em <descriptorBase>, pois apenas um objeto de mídia, no caso o vídeo, será apresentado na tela. Observe que o elemento <descriptor> possui dois atributos: id que é a identificação do vídeo, e region que é a região em que o vídeo será apresentado. No corpo do código tem-se os elementos <port> e <media>, ambos com seus respectivos atributos. <port> permite que o video seja incializado e possui o atributo id, que é a identificação da porta, e o atributo component, que é o componente que será inicializado, no caso, o Video, que por sua vez é definido em <media>. <media> possui o atributo id, que é a sua identificação, e o atribuito src, o qual contém o caminho, o local, em que o objeto de mídia está salvo e a partir do qual, o NCL irá buscar a mídia. Nota-se então que NCL não é muito diferente de HTML e XHTML. Assim como essas linguagens, NCL possui elementos, tags e seus respectivos atributos. Para executar este código, primeiro deve-se ter instalados e configurados no computador, os softwares relacionados em Ferramentas Necessárias. Este código foi escrito na IDE Eclipse com o plugin NCL Eclipse, conforme pode ser verificado na Figura 6.1. No lado esquerdo da Figura 6.1, encontra-se a estrutura da aplicação NCL, em Project Explorer, que normalmente contém uma pasta com o projeto e dentro, outras pastas com as mídias que serão utilizadas. Além disso, contém um projeto principal, chamado main.ncl e um outro arquivo .ncl chamado ConnectorBase.ncl, que será explicado com maiores detalhes nas próximas seções. Em seguida, basta seguir os passos apresentados no portal do software público no seguinte link: http://www.softwarepublico.gov.br/dotlrn/clubs/ginga/gingancl/xowiki/gingancl_vm.html Se o computador estiver conectado a uma rede Wi-Fi, provavelmente haverá problemas em relação ao acesso remoto. Para resolver isto, basta entrar em Painel de ControleRede e InternetConexões de Rede, selecionar VMware Network Adapter Vmnet e alterar o IPV4 para IP Dinâmico. O código NCL da Listagem 6.2, executando, é apresentado na Figura 6.2.
  • 6. Figura 6.1. Código NCL na IDE Eclipse Figura 6.2. Código NCL executando na máquina virtual Ginga 6.2. Regiões É o local que deve ser definido para exibição das mídias. Primeiro deve-se definir a região da tela de TV, e em seguida, definir as regiões de cada objeto de mídia (vídeo, figura, legenda, etc). É importante, antes de programar, fazer a prototipação das telas que a aplicação terá. Regiões possuem atributos que podem ser modificados e são
  • 7. listados a seguir. A Figura 6.3 ilustra esses atributos. O código da Listagem 6.3 mostra a utilização dos atributos da Região e a Figura 6.4 apresenta o código executando. 1. id: identificador da região; 2. device: classe de dispositivo (tv fixa, portátil ou móvel); 3. left: coordenada x do lado esquerdo; 4. right: coordenada x do lado direito; 5. top: coordenada y do lado superior; 6. bottom: coordenada y do lado inferior; 7. height: altura; 8. width: largura; 9. zindex: número entre 0 e 25 que define a camada da região no eixo z. As camadas se sobrepõem, assim a camada com o maior número, é aquela que estará “por cima” das outras. 10. title: título da região. Figura 6.3. Representação gráfica de regiões 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 <!-- Generated by NCL Eclipse --> 3 <ncl id="main" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile"> 4 <!-- Cabeçalho do Programa --> 5 <head> 6 <regionBase> 7 <region id="rgTV" zIndex="1"> 8 <region id="rgVideo" top="0" left="0" height="480" width="600" zIndex="2"/> 9 <region id="rgMenu" top="50" left="50" height="250" width="150" zIndex="3"> 10 <region id="rgBotao1" top="0" height="50"
  • 8. width="100"/> 11 <region id="rgBotao2" top="60" height="50" width="100"/> 12 <region id="rgBotao3" top="120" height="50" width="100"/> 13 <region id="rgBotao4" top="180" height="50" width="100"/> 14 </region> 15 </region> 16 </regionBase> 17 <descriptorBase> 18 <descriptor id="dVideo" region="rgVideo"/> 19 <descriptor id="dMenu" region="rgMenu"/> 20 <descriptor id="dBotao1" region="rgBotao1"/> 21 <descriptor id="dBotao2" region="rgBotao2"/> 22 <descriptor id="dBotao3" region="rgBotao3"/> 23 <descriptor id="dBotao4" region="rgBotao4"/> 24 </descriptorBase> 25 </head> 26 <body> 27 <port id="pVideo" component="Video"/> 28 <port id="pBotao1" component="Botao1"/> 29 <port id="pBotao2" component="Botao2"/ 30 <port id="pBotao3" component="Botao3"/> 31 <port id="pBotao4" component="Botao4"/> 32 <media id="Video" src="media/videos/video.mpg" descriptor="dVideo"/> 33 <media id="Botao1" src="media/imagens/botao_amarelo.png" descriptor="dBotao1"/> 34 <media id="Botao2" src="media/imagens/botao_vermelho.png" descriptor="dBotao2"/> 35 <media id="Botao3" src="media/imagens/botao_azul.png" descriptor="dBotao3"/> 36 <media id="Botao4" src="media/imagens/botao_verde.png" descriptor="dBotao4"/> 37 </body> 38 </ncl> Listagem 6.3: Colocando um menu junto ao vídeo Na listagem 6.3, são inseridos ao projeto, 4 imagens do tamanho 100x50 pixels, do tipo .png, cada uma com uma cor dos botões padrões de TV Digital: amarelo, vermelho, azul e verde. Como trata-se de um menu, este poderá ser utilizado para interatividade, de acordo com as cores. Observe que para cada botão foi definido um elemento <region>, <descriptor>, <media> e <port>. Neste exemplo, ainda não está sendo utilizado o conceito de elos, por este motivo foi necessário criar uma porta para cada mídia. Isto permite que as imagens e os vídeos sejam inicializados ao mesmo tempo, assim que a aplicação é startada. Nas próximas seções veremos como inicializar objetos de mídia sem a necessidade de uma porta para cada uma. Conforme pode ser visulizado na Figura 6.4, os botões estão “em cima” do vídeo. No código temos zIndex=“1” para a região da TV, zIndex=“2” para o vídeo e zIndex=“3” para o menu, e por isso, os botões estão “por cima” do vídeo. Se essa ordem for alterada, os botões não aparecerão pois o vídeo estará na camada acima deles.
  • 9. Figura 6.4. Vídeo com Menu, execução da Listagem 6.3 6.3. Objetos de mídia Uma mídia é sempre uma imagem, um vídeo, um html, etc. Um objeto de mídia também pode ser chamado de nó de mídia. Mídias também possuem atributos: 1. id: identificador único; 2. src: endereço do local onde a mídia está armazenada (arquivos locais, remotos ou streaming); 3. type: tipo MIME da mídia; 4. descriptor: identificador do descritor (descriptor); 5. refer: referência a um outro nó de mídia (reúso); 6. instance: usado apenas quando refer é utilizado, valores: new, instSame, gradSame. NCL utiliza MimeTypes, que é uma cadeia de caracteres que define a classe da mídia e o tipo de codificação. Exemplos: 1. Áudio: audio/mpeg: .mp1, .mp2, .mp3; 2. Vídeo: video/mpeg: .mp2, .mpeg, .mpg, .mpe; 3. Imagem: image/png: .png; 4. Texto: text/html: .htm, .html, .xhtml. 6.4. Descritores São responsáveis pela configuração de como os objetos de mídia deverão ser apresentados. Os atributos dos descritores são: 1. id: identificador do descritor;
  • 10. 2. region: identificador da região a ser utilizada por esta mídia; 3. explicitDur: define a duração do objeto de mídia em segundos; 4. freeze: identifica o que acontece ao final da apresentação do objeto de mídia associado ao descritor (true/false); 5. player: identifica a ferramenta de apresentação a ser utilizada para exibir o objeto de mídia. 6.4.1 Parâmetros reservados para áudio: 1. soundLevel: “0” = mute; “0,5” ou “50%” = metade; “1” ou “100%”= máximo; 2. balanceLevel: valores entre 0 e 1 ou entre 0% e 100%; 3. trebleLevel: valores entre 0 e 1 ou entre 0% e 100%; 4. bassLevel: valores entre 0 e 1 ou entre 0% e 100%. 6.4.2 Parâmetros reservados para mídia visual: 1. top: topo, valores % ou pixels; 2. bottom: base, valores % ou pixels; 3. left: esquerda, valores % ou pixels; 4. right: direita, valores % ou pixels; 5. width: largura, valores % ou pixels; 6. height: altura, valores % ou pixels. 6.4.3 Parâmetros reservados para mídia visual: 1. location: posição do objeto de mídia em left e top, valores: % ou pixels; 2. size: dimensões do objeto de mídia em width e height, valores: % ou pixels; 3. bounds: posição e dimensões do objeto de mídia em left, top, width e height, valores: % ou pixels; 4. zIndex: posição da região no eixo z (sobreposições de regiões); 5. background: cor de fundo (white, black, silver, gray, red, maroon, fuchsia, purple, lime, green, yellow, olive, blue, navy, aqua, teal ou transparent); 6. visible: true ou false (visível ou invisível); 7. transparency: grau de tranparência, valores entre 0 e 1 ou %. 6.4.4 Parâmetros reservados para mídia visual: 1. fit: recebe como valor fill, hidden, meet, meetBest ou slice; 2. fill: redimensiona o conteúdo do objeto de mídia para que toque todas as bordas da região, distorce se necessário;
  • 11. 3. hidden: se a mídia for maior ou menor que a região, a área restante é preenchida com a cor de fundo; 4. meet: redimensiona o conteúdo do objeto de mídia mantendo suas proporções até atingir uma das bordas da região. Espaços vazios são preenchidos com a cor de fundo; 5. meetBest: o objeto é redimensionado até o dobro do seu tamanho original; 6. slice: redimensiona o conteúdo do objeto de mídia mantendo suas proporções até que toda a região seja preenchida. Corta partes do objeto se necessário. 6.4.5 Parâmetros reservados para mídia textual: 1. scroll: barras de rolagem. Valores: none, horizontal, vertical, both, automatic; 2. style: folha de estilo; 3. fontColor: cor da fonte; 4. fontFamily: família da fonte; 5. fontSize: tamanho da fonte em pontos; 6. fontVariant: variação de fonte, valores: normal ou small-caps (letras maiúsculas pequenas); 7. fontWeight: valores normal ou bold (negrito). 6.5. Elos e Conectores Os elos, ou links, associam nós através de conectores, que definem a semântica da associação entre os nós, o relacionamento de sincronismo propriamento dito entre interfaces de objetos de uma aplicação NCL e o seu comportamento é definido pelo conector que o elo utiliza. O conector é aquele que define a ação: iniciar, parar, repetir, ir para outro ponto do vídeo, setar variáveis, etc. Uma condição sempre deve ser satisfeita para que ações possam ser disparadas. Exemplificando, podemos ler e entender da seguinte forma: “Quando condição/evento, então ação;Quando algum objeto ligado ao papel onBegin iniciar, inicia também algum objeto ligado ao papel start”. Para esta ação acontecer, além do elo, é necessário o conector. Abaixo são listados os atributos do elemento link (elo – elemento <link>): 1. id: identificação; 2. xconnector: conector, da base de conectores, que será utilizado. 6.6. Tocando um vídeo com menu utilizando conectores A Listagem 6.3 é reapresentada na Listagem 6.4. Desta vez, os botões serão inicializados usando um elo ao invés de portas. Os elos se comunicam com os conectores da base de conectores, arquivo ConnectorBase.ncl. Por este motivo, sempre ao criar um novo projeto NCL na IDE Eclipse, esse arquivo é gerado automaticamente.
  • 12. O arquivo ConnectorBase.ncl contém vários conectores prontos para ser utilizados em diversas ações, entretanto os desenvolvedores podem criar os seus próprios conectores. A Listagem 6.4 utilizará a ação start e stop: “ao iniciar o vídeo, inicie também os quatro botões, e ao parar o vídeo, pare também os quatro botões”. 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 <!-- Generated by NCL Eclipse --> 3 <ncl id="main" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile"> 4 <!-- Cabeçalho do Programa --> 5 <head> 6 <regionBase> 7 <region id="rgTV" zIndex="1"> 8 <region id="rgVideo" top="0" left="0" height="480" width="600" zIndex="2"/> 9 <region id="rgMenu" top="50" left="50" height="250" width="150" zIndex="3"> 10 <region id="rgBotao1" top="0" height="50" width="100"/> 11 <region id="rgBotao2" top="60" height="50" width="100"/> 12 <region id="rgBotao3" top="120" height="50" width="100"/> 13 <region id="rgBotao4" top="180" height="50" width="100"/> 14 </region> 15 </region> 16 </regionBase> 17 <descriptorBase> 18 <descriptor id="dVideo" region="rgVideo"/> 19 <descriptor id="dMenu" region="rgMenu"/> 20 <descriptor id="dBotao1" region="rgBotao1"/> 21 <descriptor id="dBotao2" region="rgBotao2"/> 22 <descriptor id="dBotao3" region="rgBotao3"/> 23 <descriptor id="dBotao4" region="rgBotao4"/> 24 </descriptorBase> 25 <connectorBase> 26 <importBase documentURI="ConnectorBase.ncl" alias="cb"/> 27 </connectorBase> 28 </head> 29 <body> 30 <port id="pVideo" component="Video"/> 31 <media id="Video" src="media/videos/video.mpg" descriptor="dVideo"/> 32 <media id="Botao1" src="media/imagens/botao_vermelho.png" descriptor="dBotao1"/> 33 <media id="Botao2" src="media/imagens/botao_verde.png" descriptor="dBotao2"/> 34 <media id="Botao3" src="media/imagens/botao_amarelo.png" descriptor="dBotao3"/> 35 <media id="Botao4" src="media/imagens/botao_azul.png" descriptor="dBotao4"/> 36 <link id="inicio" xconnector="cb#onBeginStartN"> 37 <bind role="onBegin" component="Video"/> 38 <bind role="start" component="Botao1"/> 39 <bind role="start" component="Botao2"/> 40 <bind role="start" component="Botao3"/> 41 <bind role="start" component="Botao4"/> 42 </link> 43 <link id="fim" xconnector="cb#onEndStopN">
  • 13. 44 <bind role="onEnd" component="Video"/> 45 <bind role="stop" component="Botao1"/> 46 <bind role="stop" component="Botao2"/> 47 <bind role="stop" component="Botao3"/> 48 <bind role="stop" component="Botao4"/> 49 </link> 50 </body> 51 </ncl> Listagem 6.4: Iniciando um video e quatro imagens usando elos e conectores Observe no código que existem dois elos, um para iniciar as mídias e outro para parar a exibição das mídias. Os conectores da base de conectores que forem utilizados, são apresentados no trecho de código abaixo: <causalConnector id="onBeginStartN"> <simpleCondition role="onBegin"/> <simpleAction role="start" max="unbounded" qualifier="par"/> </causalConnector> <causalConnector id="onEndStopN"> <simpleCondition role="onEnd"/> <simpleAction role="stop" max="unbounded" qualifier="par"/> </causalConnector> Ambos os conectores acima são do tipo causais de 1 para N – uma mídia para várias mídias. onBegin é ativado por um nó de contexto, de alternativa, de mídia ou âncora de um nó de mídia. A ação resultante é a inicialização dos N nós a partir do primeiro. onEnd é idêntico a onBegin, a diferença é que ao invés de iniciar, os nós serão finalizados. Observe que o id do elemento <causalConnector> é usado no <xconnector> do elemento link: <link id="fim" xconnector="cb#onEndStopN"> e <causalConnector id="onEndStopN">. É dessa forma que elos e conectores se comunicam. Os elos dizem que ao iniciar (onBegin) o vídeo, incie também as imagens (start), e ao parar o video (onEnd) pare também as imagens (stop). <simpleCondition role="onBegin"/> é uma condição simples em que a regra (role) é começar o nó. <simpleAction role="start" max="unbounded" qualifier="par"/> é uma ação simples em que a regra (role) é iniciar o nó. max é a cardinalidade, o número máximo de objetos que podem ser associados, e o valor unbounded é quando não há limite. qualifier define se as ações devem ser disparadas em paralelo (par) ou em sequência (seq). Existem ainda mais atributos e elementos filhos para os conectores e elos que podem ser conferidos em SOARES. 6.7. Interatividade e navegação de teclas Será inserido no código NCL da Listagem 6.4, a navegação por teclas e a interatividade. Quando o usuário selecionar um dos botões, o seguinte irá ocorrer:
  • 14. 1. Botão vermelho (F1): redimensiona o vídeo para um tamanho menor e em outra região da tela; 2. Botão verde (F2): apresenta uma legenda; 3. Botão amarelo (F3): pára a legenda e volta o video ao normal; 4. Botão azul (F4): pára a exibição dos botões coloridos e mostra um botão preto; 5. Botão preto (ENTER): volta a exibição dos botões coloridos. Para redimensionar o vídeo, é necessário definir as propriedades da mídia na declaração da mídia. As propriedades do vídeo são na verdade o tamanho e o ponto x e y da tela onde o video começa. O trecho de código a seguir mostra como isso deve ser feito. Para o topo, a esquerda, a altura e largura, são definidas as propriedades com o elemento filho do elemento <media>, <property> que possui o atributo name. Dessa forma, os valores dessas propriedades poderão ser alterados no programa, no momento em que o usuário selecionar o botão vermelho. <media id="Video" src="media/videos/video.mpg" descriptor="dVideo"> <property name="top"/> <property name="left"/> <property name="width"/> <property name="height"/> </media> Para a navegação de teclas, será necessário adicionar atributos ao elemento <descriptor> de cada botão, como apresentado no trecho de código abaixo: <descriptorBase> <descriptor id="dVideo" region="rgVideo"/> <descriptor id="dMenu" region="rgMenu"/> <descriptor id="dBotao1" region="rgBotao1" focusIndex="1" moveUp="4" moveDown="2" focusBorderColor="aqua" focusBorderWidth="3" selBorderColor="white"/> <descriptor id="dBotao2" region="rgBotao2" focusIndex="2" moveUp="1" moveDown="3" focusBorderColor="aqua" focusBorderWidth="3" selBorderColor="white"/> <descriptor id="dBotao3" region="rgBotao3" focusIndex="3" moveUp="2" moveDown="4" focusBorderColor="aqua" focusBorderWidth="3" selBorderColor="white"/> <descriptor id="dBotao4" region="rgBotao4" focusIndex="4" moveUp="3" moveDown="1" focusBorderColor="aqua" focusBorderWidth="3" selBorderColor="white"/> </descriptorBase> Os atributos são descritos abaixo: 1. focusIndex: índice de navegação do elemento; 2. focusBorderColor: cor da borda; 3. focusBorderWidth: espessura da borda;
  • 15. 4. moveUp: índide de navegação do elemento. Quando a tecla para cima for pressionada, quem estará com o foco? O elemento cujo índice for indicado aqui; 5. moveDown: índide de navegação do elemento. Quando a tecla para baixo for pressionada, quem estará com o foco? O elemento cujo índice for indicado aqui; 6. selBorderColor: cor de borda quando enter for pressionado. A Figura 6.5 ilustra como focusIndex deve ser usado junto à moveUp e moveDown quando se tem quatro itens no menu. moveUp = 4 focusIndex = 1 moveDown = 2 Botão 1 Vermelho moveUp = 1 focusIndex = 2 moveDown = 3 Botão 2 Verde moveUp = 2 focusIndex = 3 moveDown = 4 Botão 3 Amarelo moveUp = 3 focusIndex = 4 moveDown = 1 Botão 4 Azul Figura 6.5. Navegação de teclas para quatro itens de menu No código da Listagem 6.4 será adicionado o seguinte trecho de código para permitir que, quando o usuário aperte o botão vermelho, o vídeo seja redimensionado: <link id="vermelho" xconnector="cb#onKeySelectionSetN"> <bind role="onSelection" component="Botao1"> <bindParam name="keyCode" value="RED"/> </bind> <bind role="set" component="Video" interface="top"> <bindParam name="var" value="100"/> </bind> <bind role="set" component="Video" interface="left"> <bindParam name="var" value="200"/> </bind> <bind role="set" component="Video" interface="width"> <bindParam name="var" value="300"/> </bind> <bind role="set" component="Video" interface="height"> <bindParam name="var" value="300"/> </bind> </link> onKeySelectionSetN permitirá que, ao pressionar uma tecla, uma ou mais propriedades de uma mídia sejam setadas: onKey = na tecla, Selection = seleção, SetN = setar uma ou mais propriedades, keyCode = código da tecla, value = valor. No código verifica-se que para o Video são alterados os valores das propriedades top, left, width e height usando o atributo interface, e que foram definidos na declaração da mídia. Pode-se ler da seguinte forma: ao selecionar o Botão 1 que tem o código de tecla F1
  • 16. (correspondente à cor vermelha), altere os valores de x, y, altura e largura do vídeo. O connector para este elo é apresentado abaixo: Figura 6.6. Vídeo com Menu, execução da Listagem 6.4 <causalConnector id="onKeySelectionSetN"> <connectorParam name="keyCode"/> <connectorParam name="var"/> <simpleCondition role="onSelection" key="$keyCode"/> <simpleAction role="set" value="$var" max="unbounded" qualifier="par"/> </causalConnector> Figura 6.7. Video redimensionado após usuário apertar a tecla vermelha Note que <connectorParam> tem o atributo name que coincide com o utilizado em <bindParam> no elemento <link>, esses são os parâmetros do código que serão
  • 17. utilizados e modificados (a tecla pressionada e o valor da posição e tamanho do video). O símbolo $ indica que var e keyCode são variáveis. A Figura 6.6 apresenta os botões do menu com o focusIndex e a Figura 6.7 apresenta o que acontece na tela da TV quando o usuário aperta a tecla vermelha. Para apresentar uma legenda devemos inserir esta mídia no código, assim como o seu descritor e região que será apresentada, conforme códigos abaixo: <region id="rgLegenda" bottom="50" left="50" height="80" width="300" zIndex="4"/> <descriptor id="dLegenda" region="rgLegenda"/> <media id="Legenda" src="media/legendas/legenda.html" descriptor="dLegenda"/> Feito isto, é preciso agora linkar as ações, isto é, quando o usuário apertar a tecla verde (F2), a legenda deverá ser inicializada e apresentada na região destinada. Portanto, um link com uma ação de tecla deve ser criado, conforme mostra o código abaixo. Este link é mais simples que o apresentado anteriormente, para fazer as alterações no vídeo: onKey = na tecla, Selection = selecionada, Start = inicie, component = o componente botao 2 , value = com o valor verde, start = então inicie, component = o componente de mídia Legenda. O resultado pode ser verificado na Figura 6.8. <link id="verde" xconnector="cb#onKeySelectionStart"> <bind role="onSelection" component="Botao2"> <bindParam name="keyCode" value="GREEN"/> </bind> <bind role="start" component="Legenda"/> </link> Figura 6.8. Ao aperter a tecla verde, a legenda aparece É importante lembrar que esses arquivos de mídia devem estar nas pastas do projeto. O botão amarelo vai parar a legenda e voltar o vídeo ao normal. Este item dará mais trabalho, pois é necessário alterar os valores das propriedades do vídeo e ao
  • 18. mesmo tempo parar a exibição da legenda. Portanto, será necessário usar um conector e um elo mais elaborados. Não será necessário adicionar nenhuma mídia, então, basicamente, só será adicionado o código para fazer esta ação: <link id="amarelo" xconnector="cb#onKeySelectionStopSetN"> <bind role="onSelection" component="Botao3"> <bindParam name="keyCode" value="YELLOW"/> </bind> <bind role="set" component="Video" interface="top"> <bindParam name="var" value="0"/> </bind> <bind role="set" component="Video" interface="left"> <bindParam name="var" value="0"/> </bind> <bind role="set" component="Video" interface="width"> <bindParam name="var" value="600"/> </bind> <bind role="set" component="Video" interface="height"> <bindParam name="var" value="480"/> </bind> <bind role="stop" component="Legenda"/> </link> O link utiliza o conector onKeySelectionStopSetN, que pode ser traduzido como “na tecla selecionada, pare um objeto de mídia e altere as N configurações do outro objeto de mídia”. Para top, left, width e height, que são as propriedades da mídia Video, é utilizada a regra (role) set e para a mídia Legenda é utilizada a regra stop (parar). Os valores são passados para as propriedades pelo atributo value, e o atributo interface, permite que o elemento <media> e o elemento <link> comuniquem-se. O botão azul, ao ser pressionado, parará a exibição dos botões coloridos e apresentará um botão preto que, ao ser pressionado (tecla enter) voltará a exibição normal dos botões coloridos. Para que isso ocorra, serão adicionados a região, o descritor, a mídia para o botão preto e o elo, como a seguir: <region id="rgBotao5" top="50" left="50" height="250" width="150" zIndex="4"/> <descriptor id="dBotao5" region="rgBotao5" focusIndex="1" focusBorderColor="aqua" focusBorderWidth="3" selBorderColor="white"/> <media id="Botao5" src="media/imagens/botao_preto.png" descriptor="dBotao5"/> <link id="azul" xconnector="cb#onKeySelectionStopNStartN"> <bind role="onSelection" component="Botao4"> <bindParam name="keyCode" value="BLUE"/> </bind> <bind role="stop" component="Botao1"/> <bind role="stop" component="Botao2"/> <bind role="stop" component="Botao3"/> <bind role="stop" component="Botao4"/> <bind role="start" component="Botao5"/> </link>
  • 19. O elo onKeySelectionStopNStartN pode ser lido como “na tecla selecionada, pare N mídias e inicie N mídias”, que é a situação do botão azul. A Figura 6.9 apresenta o resultado: Figura 6.9. Ao aperter a tecla azul, o botão preto é exibido. Agora será feito processo inverso, quando pressionar o botão preto, os botões coloridos voltam a ser exibidos. O elo a ser utilizado é muito parecido com o anterior, onkeySelectionStartNStopN. Será colocado como regra stop o botão preto e regra start os botões coloridos. Além disso, o código da tecla agora será o ENTER, pois não há mapeamento para outras cores além das pré-definidas (vermelho, verde, amarelo e azul). Abaixo é apresentadoo código para o elo: <link id="preto" xconnector="cb#onKeySelectionStartNStopN"> <bind role="onSelection" component="Botao5"> <bindParam name="keyCode" value="ENTER"/> </bind> <bind role="start" component="Botao1"/> <bind role="start" component="Botao2"/> <bind role="start" component="Botao3"/> <bind role="start" component="Botao4"/> <bind role="stop" component="Botao5"/> </link> Pronto, a aplicação interativa com a utilização de teclas está pronta. Com isto, foi possível demonstrar os conceitos básicos da linguagem NCL. Existem muitos recursos avançados que não são abordados aqui, mas podem ser encontrados na referências deste capítulo. A Listagem 6.5 mostra o código completo da aplicação. <?xml version="1.0" encoding="ISO-8859-1"?> <!-- Generated by NCL Eclipse --> <ncl id="main" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile">
  • 20. <!-- Cabeçalho do Programa --> <head> <!-- Base de Regiões --> <regionBase> <region id="rgTV" zIndex="1"> <region id="rgVideo" top="0" left="0" height="480" width="600" zIndex="2"/> <region id="rgMenu" top="50" left="50" height="250" width="150" zIndex="3"> <region id="rgBotao1" top="0" height="50" width="100"/> <region id="rgBotao2" top="60" height="50" width="100"/> <region id="rgBotao3" top="120" height="50" width="100"/> <region id="rgBotao4" top="180" height="50" width="100"/> </region> <region id="rgLegenda" bottom="50" left="50" height="80" width="300" zIndex="4"/> <region id="rgBotao5" top="50" left="50" height="50" width="100" zIndex="4"/> </region> </regionBase> <!-- Base de Descritores --> <descriptorBase> <descriptor id="dVideo" region="rgVideo"/> <descriptor id="dMenu" region="rgMenu"/> <descriptor id="dBotao1" region="rgBotao1" focusIndex="1" moveUp="4" moveDown="2" focusBorderColor="aqua" focusBorderWidth="3" selBorderColor="white"/> <descriptor id="dBotao2" region="rgBotao2" focusIndex="2" moveUp="1" moveDown="3" focusBorderColor="aqua" focusBorderWidth="3" selBorderColor="white"/> <descriptor id="dBotao3" region="rgBotao3" focusIndex="3" moveUp="2" moveDown="4" focusBorderColor="aqua" focusBorderWidth="3" selBorderColor="white"/> <descriptor id="dBotao4" region="rgBotao4" focusIndex="4" moveUp="3" moveDown="1" focusBorderColor="aqua" focusBorderWidth="3" selBorderColor="white"/> <descriptor id="dBotao5" region="rgBotao5" focusIndex="1" focusBorderColor="aqua" focusBorderWidth="3"/> <descriptor id="dLegenda" region="rgLegenda"/> </descriptorBase> <!-- Base de Descritores --> <connectorBase> <importBase documentURI="ConnectorBase.ncl" alias="cb"/> </connectorBase> </head> <!-- Corpo do documento --> <body> <!-- Portas --> <port id="pVideo" component="Video"/> <!-- Mídias --> <media id="Video" src="media/videos/video.mpg" descriptor="dVideo"> <property name="top"/> <property name="left"/> <property name="width"/>
  • 21. <property name="height"/> </media> <media id="Botao1" src="media/imagens/botao_vermelho.png" descriptor="dBotao1"/> <media id="Botao2" src="media/imagens/botao_verde.png" descriptor="dBotao2"/> <media id="Botao3" src="media/imagens/botao_amarelo.png" descriptor="dBotao3"/> <media id="Botao4" src="media/imagens/botao_azul.png" descriptor="dBotao4"/> <media id="Botao5" src="media/imagens/botao_preto.png" descriptor="dBotao5"/> <media id="Legenda" src="media/legendas/legenda.html" descriptor="dLegenda"/> <!-- Elo para iniciar as mídias --> <link id="inicio" xconnector="cb#onBeginStartN"> <bind role="onBegin" component="Video"/> <bind role="start" component="Botao1"/> <bind role="start" component="Botao2"/> <bind role="start" component="Botao3"/> <bind role="start" component="Botao4"/> </link> <!-- Elo para finalizar as mídias --> <link id="fim" xconnector="cb#onEndStopN"> <bind role="onEnd" component="Video"/> <bind role="stop" component="Botao1"/> <bind role="stop" component="Botao2"/> <bind role="stop" component="Botao3"/> <bind role="stop" component="Botao4"/> </link> <!-- Elo para as ações do botão vermelho --> <link id="vermelho" xconnector="cb#onKeySelectionSetN"> <bind role="onSelection" component="Botao1"> <bindParam name="keyCode" value="RED"/> </bind> <bind role="set" component="Video" interface="top"> <bindParam name="var" value="100"/> </bind> <bind role="set" component="Video" interface="left"> <bindParam name="var" value="200"/> </bind> <bind role="set" component="Video" interface="width"> <bindParam name="var" value="300"/> </bind> <bind role="set" component="Video" interface="height"> <bindParam name="var" value="300"/> </bind> </link> <!-- Elo para as ações do botão verde --> <link id="verde" xconnector="cb#onKeySelectionStart"> <bind role="onSelection" component="Botao2"> <bindParam name="keyCode" value="GREEN"/> </bind> <bind role="start" component="Legenda"/> </link> <!-- Elo para as ações do botão amarelo --> <link id="amarelo" xconnector="cb#onKeySelectionStopSetN"> <bind role="onSelection" component="Botao3">
  • 22. <bindParam name="keyCode" value="YELLOW"/> </bind> <bind role="set" component="Video" interface="top"> <bindParam name="var" value="0"/> </bind> <bind role="set" component="Video" interface="left"> <bindParam name="var" value="0"/> </bind> <bind role="set" component="Video" interface="width"> <bindParam name="var" value="600"/> </bind> <bind role="set" component="Video" interface="height"> <bindParam name="var" value="480"/> </bind> <bind role="stop" component="Legenda"/> </link> <!-- Elo para as ações do botão azul --> <link id="azul" xconnector="cb#onKeySelectionStopNStartN"> <bind role="onSelection" component="Botao4"> <bindParam name="keyCode" value="BLUE"/> </bind> <bind role="stop" component="Botao1"/> <bind role="stop" component="Botao2"/> <bind role="stop" component="Botao3"/> <bind role="stop" component="Botao4"/> <bind role="start" component="Botao5"/> </link> <!-- Elo para as ações do botão preto --> <link id="preto" xconnector="cb#onKeySelectionStartNStopN"> <bind role="onSelection" component="Botao5"> <bindParam name="keyCode" value="ENTER"/> </bind> <bind role="start" component="Botao1"/> <bind role="start" component="Botao2"/> <bind role="start" component="Botao3"/> <bind role="start" component="Botao4"/> <bind role="stop" component="Botao5"/> </link> </body> </ncl> Listagem 6.5: Código completo da aplicação Conclusão O mercado de trabalho para desenvolvedores de aplicações interativas destinadas ao sistema brasileiro de TV Digital está começando a despontar. Em breve, faltará mão de obra qualificada nesta área, não somente no Brasil, mas em todos os países que adotaram, e irão adotar, o sistema nipo-brasileiro de TV Digital. Agora é o momento de se qualificar e preparar para as oportunidades que estão por vir. Agências de publicidade, emissoras de TV e empresas são alguns dos locais que estes desenvolvedores poderão trabalhar. Este capítulo introduziu a linguagem NCL aos interessados em investir nesta área. Os elementos básicos da linguagem foram apresentados conforme o desenvolvimento da aplicação foi sendo apresentado: <region>, <descriptor>,
  • 23. <media>, <link>, <port>. Somente com este conhecimento é possível desenvolver várias aplicações, entretanto, é necessário aprofundar no estudo da linguagem e incluir nas aplicações, LUA, a linguagem de scripts que permite construir aplicações mais interessantes e otimizadas. O vídeo da aplicação funcionando pode ser conferido no youtube: Referências SOARES, Luiz Fernando Gomes; BARBOSA, Simone Diniz Junqueira. Programando em NCL 3.0: desenvolvimento de aplicações para middleware Ginga, TV Digital e Web. Rio de Janeiro: Elsevier, 2009. SOARES, Luiz Fernando Gomes; RODRIGUES, Rogério Ferreira; BARBOSA, Simone Diniz Junqueira. Manual de Construção de Programas Audiovisuais Interativos Utilizando a NCL 2.3 – Perfil Básico. 1ª edição, Rio de Janeiro: PUC-RIO, Telemidia, 2006. ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. Televisão digital terrestre – Codificação de dados e especificações de transmissão para radiodifusão digital Parte 2: Ginga-NCL para receptores fixos e móveis – Linguagem de aplicação XML para codificação de aplicações. ABNT NBR 15606-2:2007. 2ª ed. 27/05/2011. ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. Televisão digital terrestre – Codificação de dados e especificações de transmissão para radiodifusão digital Parte 5: Ginga-NCL para receptores portáteis – Linguagem de aplicação XML para codificação de aplicações. ABNT NBR 15606-5:2008. 2ª ed. 19/04/2011. ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. Televisão digital terrestre – Codificação de dados e especificações de transmissão para radiofusão digital Parte 7: Ginga-NCL – Diretrizes operacionais para as ABNT NBR 15606-2 e ABNT NBR 15606-5. ABNT NBR 15606-7:2011. 1ª ed. 21/03/2011. GINGA. Disponível em: <http://www.ginga.org.br/>, acessado em 13/10/2011, 14:00 GINGA-NCL. Disponível em <http://www.gingancl.org.br/>, acessado em 13/10/2011, 14:00 NCL. Disponível em <http://www.ncl.org.br/>, acessado em 13/10/2011, 14:00 CLUBE NCL. Disponível em <http://clube.ncl.org.br/>, acessado em 13/10/2011, 14:00 FORUM SBTVD. Disponível em: <http://www.forumsbtvd.org.br/>, acessado em 13/10/2011, 14:00 DTV. Disponível em <http://www.dtv.org.br/>, acessado em 13/10/2011, 14:00. Sobre a Autora Bacharel em Engenharia de Computação pelo Centro Universitário de Votuporanga - UNIFEV. Mestre em Ciência da Computação pela UFSCar - Linha de pesquisa: Sistemas Distribuídos e Redes - Sistemas Multimídia e Internet - Personalização e
  • 24. Privacidade em ambiente de TV Digital. Coordenadora do curso de Engenharia de Computação na USC - Universidade do Sagrado Coração - Bauru/SP. Fundadora e Coordenadora Geral da comunidade GarotasCPBr – Garotas Campus Party Brasil. Coordenadora da comunidade Java Noroeste na região de Bauru. Adepta de comunidades de Software Livre: Java – SOU JAVA – e Linux – FEDORA. Áreas de Interesse: Mulheres na TI, Redes de Computadores, Java, Redes Sociais, Desenvolvimento de Software para TV Digital, Web e Dispositivos Portáteis/Móveis. Lattes: http://lattes.cnpq.br/8559022477811603.