SlideShare uma empresa Scribd logo
GingaMS
                   Dia 3




Desenvolvimento para TV Digital Interativa
      Diemesleno Souza Carvalho
          Campo Grande - MS
Sobre o palestrante.

•   Tecnólogo em Sistemas para Internet.
•   Pós-graduando MBA em Gestão de Projetos.
•   Trabalho com T.I. Desde 1998.
•   Palestrante em diversos eventos regionais.
•   Ex-estagiário TRE/MS e Dataprev/MS.
•   2 anos na Sefaz/MS Analista/Programador.
•   Analista de Sistemas Pleno na Sanesul/MS.
Sobre o GingaMS.

•   Grupo novo, mas com grandes perspectivas.
•   Estimular e difundir as tecnologias TVDi.
•   Tendências do mercado de TVDi.
•   Capacitar novos membros gradativamente.
•   Incentivar produções independentes.
•   Promover eventos e divulgação do grupo.
Sobre o Mini-curso.

•   Nivelamento sobre TVDi.
•   Entender as tecnologias envolvidas.
•   Desafios do mercado.
•   Principais dificuldades hoje.
•   Montar ambiente de desenvolvimento e teste.
•   Criar algumas aplicações de exemplo.
Terceiro Dia
• Criação de uma Aplicação NCL Pura.
• Criação de uma Aplicação Ginga-NCL.
• Criação de uma Aplicação Ginga-J.
Prática
Aplicação NCL Pura
Aplicação NCL Pura

« Criaremos uma aplicação NCL Pura passo a
  passo. »
Aplicação NCL Pura
1 - Abra o eclipse.
Aplicação NCL Pura

2 - Crie um novo projeto do tipo ‘General/Project’ e dê o nome
   de ‘NCL-Pura’.
Aplicação NCL Pura

3 - Clique com o botão direito no projeto e crie um novo
   diretório chamado ‘media’
Aplicação NCL Pura

4 - Clique com o botão direito no diretório ‘media’ e selecione a
   opção ‘import->File System’ e selecione o arquivo
   ‘video.mp4’.
Aplicação NCL Pura

5 - Clique com o botão direito do projeto e crie um novo arquivo
   do tipo ‘NCL Document’ e digite ‘main’ para o id do arquivo.
Aplicação NCL Pura

3 - Dentro do cabeçalho ‘<head>’, defina uma regionBase:


<regionBase>

   <region id="rgFundo" width="100%" height="100%" />

</regionBase>
Aplicação NCL Pura

4 - Ainda dentro do cabeçalho, defina um descriptorBase:


<descriptorBase>

    <descriptor id="descVideo" region="rgFundo" />

</descriptorBase>
Aplicação NCL Pura

5 - Dentro do corpo do programa ‘<body>’, Indique a mídia que
   aparecerá na tela:


<media id="video" src="media/video.mp4" descriptor="descVideo" />
Aplicação NCL Pura

6 - Crie um port para indicar o componente que inicia:


<port id="pEntrada" component="video" />
Aplicação NCL Pura




Abra o Ginga Player e teste o programa!
Prática
Aplicação Ginga-NCL
Aplicação Ginga-NCL

1 - Com o Eclipse aberto, crie um novo projeto
  do tipo ‘General/Project’ chamado ‘Ginga-
  NCL’.
Aplicação Ginga-NCL

2 - Dentro de Ginga-NCL crie outro diretório
  chamado ‘media’ e importe as imagens para
  dentro.
Aplicação Ginga-NCL

3 - Ainda dentro de Ginga-NCL crie um arquivo
  do tipo ‘NCL Document’ e digite ‘main’ para o
  id.
Aplicação Ginga-NCL

4 - Dentro do cabeçalho ‘<head>’ adicione um
  regionBase.

<regionBase>
   <region width="40%" height="40%" left="30%" top="30%” id="rgButton"/>
</regionBase>
Aplicação Ginga-NCL

5 - Adicione um descriptorBase

<descriptorBase>
     <descriptor id="dsButton" region="rgButton" focusIndex="0"/>
</descriptorBase>
Aplicação Ginga-NCL

6 - Abra um connectorBase

<connectorBase>
Aplicação Ginga-NCL

7 - Adicione um causalConnector

<causalConnector id="onBeginStart">
   <simpleCondition role="onBegin"/>
    <simpleAction role="start"/>
</causalConnector>
Aplicação Ginga-NCL

8 - Adicione outro causalConnector

<causalConnector id="onEndStop">
   <simpleCondition role="onEnd"/>
   <simpleAction role="stop" max="unbounded"/>
</causalConnector>
Aplicação Ginga-NCL

9 - Adicione outro causalConnector

<causalConnector id="onSelectionStopSet">
     <simpleCondition role="onSelection"/>
     <connectorParam name="var"/>
    <compoundAction operator="seq">
        <simpleAction role="stop"/>
         <simpleAction role="set" value="$var"/>
   </compoundAction>
</causalConnector>
Aplicação Ginga-NCL

10 - Adicione outro causalConnector
<causalConnector id="onCondGteBeginStart">
     <connectorParam name="var"/>
     <compoundCondition operator="and">
             <simpleCondition role="onBegin" />
             <assessmentStatement comparator="gte">
                   <attributeAssessment role="attNodeTest" eventType="attribution"
   .                attributeType="nodeProperty"/>
                    <valueAssessment value="$var"/>
             </assessmentStatement>
     </compoundCondition>
     <simpleAction role="start"/>
</causalConnector>
Aplicação Ginga-NCL

11 - Adicione outro causalConnector
<causalConnector id="onCondLtBeginStart">
       <connectorParam name="var"/>
       <compoundCondition operator="and">
               <simpleCondition role="onBegin" />
           <assessmentStatement comparator="lt">
                   <attributeAssessment role="attNodeTest" eventType="attribution"
   .         . … attributeType="nodeProperty"/>
                   <valueAssessment value="$var"/>
           </assessmentStatement>
       </compoundCondition>
       <simpleAction role="start"/>
</causalConnector>
Aplicação Ginga-NCL

12 - Caso o eclipse não tenha fechado o
  ‘connectorBase’ faça isso.


</connectorBase>
Aplicação Ginga-NCL

13 - Dentro de ‘<body>’ adicione um port
<port id="entryPoint" component="timer"/>
Aplicação Ginga-NCL

14 - Abra uma media para gerenciar o timer.
<media id="timer" explicitDur="4s">
Aplicação Ginga-NCL

15 - Adicione as âncoras.
<area id="area01" begin="3s" end="6s"/>
<area id="area02" begin="10s" end="13s"/>
<area id="area03" begin="17s" end="20s"/>
<area id="area04" begin="24s" end="27s"/>
<area id="areaTotal" begin="35s"/>
Aplicação Ginga-NCL

16 - Feche a media caso o eclipse já não tenha
  feito.
</media>
Aplicação Ginga-NCL

17 - Adicione outra media para o arquivo lua.
<media id="clicks" src=“scripts/clicks.lua">
Aplicação Ginga-NCL

18 - Adicione a função que usaremos.
<property name="inc"/>
Aplicação Ginga-NCL

19 - Adicione a variável que usaremos.
<property name="counter"/>
Aplicação Ginga-NCL

20 - Feche a media do arquivo lua.
</media>
Aplicação Ginga-NCL

21 - Adicione a imagem do personagem.
<media id="button" descriptor="dsButton" src="media/smile2.png"/>
Aplicação Ginga-NCL

22 - Adicione a imagem de vitoria.
<media id="win" descriptor="dsButton" src="media/win.gif"/>
Aplicação Ginga-NCL

23 - Adicione a imagem de derrota.
<media id="lose" descriptor="dsButton" src="media/lose.jpg"/>
Aplicação Ginga-NCL

24 - Inicializando o componente Lua.
<link xconnector="onBeginStart">
    <bind role="onBegin" component="timer"/>
    <bind role="start" component="clicks"/>
</link>
Aplicação Ginga-NCL

25 - Exibindo o personagem após 6 seg.
<link xconnector="onBeginStart">
      <bind role="onBegin" component="timer" interface="area01"/>
      <bind role="start" component="button"/>
</link>
Aplicação Ginga-NCL

26 - Adicionando a interface 2.
<link xconnector="onBeginStart">
      <bind role="onBegin" component="timer" interface="area02"/>
      <bind role="start" component="button"/>
</link>
Aplicação Ginga-NCL

27 - Adicionando a interface 3.
<link xconnector="onBeginStart">
      <bind role="onBegin" component="timer" interface="area03"/>
      <bind role="start" component="button"/>
</link>
Aplicação Ginga-NCL

28 - Adicionando a interface 4.
<link xconnector="onBeginStart">
      <bind role="onBegin" component="timer" interface="area04"/>
      <bind role="start" component="button"/>
</link>
Aplicação Ginga-NCL

29 - Parando o personagem após 6 seg.
<link xconnector="onEndStop">
    <bind role="onEnd" component="timer" interface="area01"/>
    <bind role="stop" component="button"/>
</link>
Aplicação Ginga-NCL

30 - Adicionando interface 2.
<link xconnector="onEndStop">
      <bind role="onEnd" component="timer" interface="area02"/>
      <bind role="stop" component="button"/>
</link>
Aplicação Ginga-NCL

31 - Adicionando interface 3.
<link xconnector="onEndStop">
      <bind role="onEnd" component="timer" interface="area03"/>
      <bind role="stop" component="button"/>
</link>
Aplicação Ginga-NCL

32 - Adicionando interface 4.
<link xconnector="onEndStop">
     <bind role="onEnd" component="timer" interface="area04"/>
     <bind role="stop" component="button"/>
</link>
Aplicação Ginga-NCL

33 - Aplicando as regras a cada componente.
<link xconnector="onEndStop">
      <bind role="onEnd" component="timer"/>
      <bind role="stop" component="button"/>
      <bind role="stop" component="win"/>
      <bind role="stop" component="lose"/>
      <bind role="stop" component="clicks"/>
</link>
Aplicação Ginga-NCL

34 - Chamada a funcao ‘inc’ quando o botão é
  pressionado.
<link xconnector="onSelectionStopSet">
      <bind role="onSelection" component="button"/>
      <bind role="stop" component="button"/>
      <bind role="set" component="clicks" interface="inc">
          <bindParam name="var" value="1"/>
      </bind>
</link>
Aplicação Ginga-NCL

35 - Exibindo o resultado se o user vencer.
<link xconnector="onCondGteBeginStart">
       <linkParam name="var" value="3"/>
              <bind role="onBegin" component="timer" interface="areaTotal"/>
              <bind role="attNodeTest" component="clicks" interface="counter"/>
              <bind role="start" component="win"/>
</link>
Aplicação Ginga-NCL

36 - Exibindo o resultado se o user perder.
<link xconnector="onCondLtBeginStart">
      <linkParam name="var" value="3"/>
      <bind role="onBegin" component="timer" interface="areaTotal"/>
      <bind role="attNodeTest" component="clicks" interface="counter"/>
      <bind role="start" component="lose"/>
</link>
Aplicação Ginga-NCL

37 - Dentro de Ginga-NCL crie um diretório
  chamado ‘scripts’ e dentro desse diretório crie
  um arquivo do tipo ‘New Lua File’ com o nome
  de ‘clicks.lua’.
Aplicação Ginga-NCL

38 - Dentro de ‘clicks.lua’ crie uma variável do
  tipo local e inicie ela com ‘0’.

local counter = 0
Aplicação Ginga-NCL

39 - Declare os atributos para a variável.

local counterEvt = {
           class = 'ncl',
           type = 'attribution',
           name = 'counter',
}
Aplicação Ginga-NCL

40 - Crie a funcao para verificar os atributos e
  some o contador.

function handler (evt)

     if evt.class ~= 'ncl' then return end
     if evt.type ~= 'attribution' then return end
     if evt.name ~= 'inc' then return end

     counter = counter + evt.value
Aplicação Ginga-NCL

41 - Set os stributos para o post do evento.
event.post {
     class = 'ncl',
     type = 'attribution',
     name = 'inc',
     action = 'stop',
     value = counter,
}
Aplicação Ginga-NCL

42 - Escute os métodos start e stop.
counterEvt.value = counter
counterEvt.action = 'start'; event.post(counterEvt)
counterEvt.action = 'stop'; event.post(counterEvt)
Aplicação Ginga-NCL

43 - Feche a função e registre o evento.
end

event.register(handler)
Aplicação Ginga-NCL

44 - Start o Set-top-Box Ginga.
Aplicação Ginga-NCL

45 - Copie o projeto para o diretório ‘misc/ncl30’
  usando o winSCP ou outro cliente.
Aplicação Ginga-NCL

46 - Abra o putty e logue no set-top-box.
Aplicação Ginga-NCL

47 - Dentro de ‘misc’, execute a aplicação com o
  comando:

     ./launcher.sh ncl30/Ginga-NCL/main.ncl
Aplicação Ginga-NCL

48 - GingaMS Game
Aplicação Ginga-NCL

49 - You win?
Prática
Aplicação Ginga-J
Aplicação Ginga-J

1 - Abra o eclipse e crie um novo projeto Java
  com o nome Ginga-J.
Aplicação Ginga-J

2 - Clique com o botão direito no projeto e vá
  para ‘propriedades’.
Aplicação Ginga-J

3 - Clique em ‘Java Build Path’ e na aba ‘library’
  clique no botão ‘Add External Jars’.
Aplicação Ginga-J

4 - Adicione o jar do xletview.
Aplicação Ginga-J

5 - Adicione o jar do JavaTV.
Aplicação Ginga-J

6 - Clique no botão ‘Add External Class Folder’ e
  adicione o diretório ‘lib’ do JavaTV.
Aplicação Ginga-J

7 - Clique no botão ‘Ok’.
Aplicação Ginga-J

8 - Clique com o botão direito no projeto e
  adicione um novo pacote com o nome
  ‘br.com.gingams’.
Aplicação Ginga-J

9 - No pacote criado, clique com o botão direito
  e crie uma nova classe chamada
  ‘GingaMSXlet’.
Aplicação Ginga-J

10 - Implemente a classe Xlet na nossa classe
  criada.

public class GingaMSXlet implements Xlet {

}
Aplicação Ginga-J

11 - Clique no ‘problema’ para resolver a
  dependência.

import javax.tv.xlet
Aplicação Ginga-J

12 - Clique no ‘problema’ para implementar os
  métodos da Xlet.
Aplicação Ginga-J

13 - Método destroyXlet

public void destroyXlet(boolean arg0) throws XletStateChangeException {

}
Aplicação Ginga-J

14 - Método initXlet

public void initXlet(XletContext arg0) throws XletStateChangeException {

}
Aplicação Ginga-J

15 - Método pauseXlet

public void pauseXlet() {

}
Aplicação Ginga-J

16 - Método startXlet

public void startXlet() throws XletStateChangeException {

}
Aplicação Ginga-J

17 - Declarar os objetos que serão utilizados.

private XletContext contexto;
private HStaticText labelAcima;
private HStaticText labelMeio;
private HStaticText labelAbaixo;
private HScene scene;
Aplicação Ginga-J

18 - Clique no ‘problema’ para resolver as
  dependências.

import org.havi.ui.HScene;
import org.havi.ui.HStaticText;
Aplicação Ginga-J

19 - Crie o método construtor da classe.

public GingaMSXlet(){
  //vazio
}
Aplicação Ginga-J

20 - Configure o método destroyXlet.

public void destroyXlet(boolean arg0) throws XletStateChangeException {

    this.contexto.notifyDestroyed();

}
Aplicação Ginga-J

21 - Adicione a notificação do contexto ao
  método destroyXlet.

public void destroyXlet(boolean arg0) throws XletStateChangeException {

    this.contexto.notifyDestroyed();

}
Aplicação Ginga-J

22 - Adicione a variável ‘contexto’ no método
  initXlet.

public void initXlet(XletContext contexto) throws XletStateChangeException {




}
Aplicação Ginga-J

23 - Dentro do método initXlet adicione:

public void initXlet(XletContext contexto) throws XletStateChangeException {

     this.contexto = contexto;

}
Aplicação Ginga-J

24 - Dentro do método initXlet adicione:

public void initXlet(XletContext contexto) throws XletStateChangeException {

     this.contexto = contexto;

    this.scene = HSceneFactory.getInstance()
    .getFullScreenScene(HScreen.getDefaultHScreen()
    .getDefaultHGraphicsDevice());


}
Aplicação Ginga-J

25 - Clique no ‘problema’ para resolver a
  dependência.

import org.havi.ui.HScreen;
import org.havi.ui.HSceneFactory;
Aplicação Ginga-J

26 - Ainda dentro do initXlet adicione:

public void initXlet(XletContext contexto) throws XletStateChangeException {
     ...

     this.labelAcima = new HStaticText("Grupo Ginga MS");
     this.labelAcima.setFont(new Font("Arial", Font.BOLD, 90));
     this.labelAcima.setBounds(10, 10, 700, 200);
     this.labelAcima.setForeground(Color.white);
     this.labelAcima.setBackground(new Color(0,100,0));

}
Aplicação Ginga-J

27 - Clique no ‘problema’ para tratar a
  dependência.

import java.awt.Color;
import java.awt.Font;
Aplicação Ginga-J

28 - Ainda dentro do initXlet adicione:

public void initXlet(XletContext contexto) throws XletStateChangeException {
     ...

     this.labelMeio = new HStaticText("TV Digital se faz com Ginga!");
     this.labelMeio.setFont(new Font("Arial", Font.BOLD, 40));
     this.labelMeio.setBounds(10, 200, 700, 200);
     this.labelMeio.setForeground(new Color(0,0,139));
     this.labelMeio.setBackground(Color.white);

}
Aplicação Ginga-J

29 - Ainda dentro do initXlet adicione:

public void initXlet(XletContext contexto) throws XletStateChangeException {
     ...

     this.labelAbaixo = new HStaticText("www.gingams.com.br");
     this.labelAbaixo.setFont(new Font("Arial", Font.BOLD, 60));
     this.labelAbaixo.setBounds(10, 370, 700, 200);
     this.labelAbaixo.setForeground(Color.yellow);
     this.labelAbaixo.setBackground(new Color(50,153,204));
}
Aplicação Ginga-J

30 - Ainda dentro do initXlet adicione:

public void initXlet(XletContext contexto) throws XletStateChangeException {
     ...

     this.scene.add(this.labelAcima);
     this.scene.add(this.labelMeio);
     this.scene.add(this.labelAbaixo);
}
Aplicação Ginga-J

31 - No método do startXlet adicione:

public void startXlet() throws XletStateChangeException {

        this.scene.setVisible(true);

   }
Aplicação Ginga-J

32 - Clique no menu ‘Project’->‘Clean’ para
  compilar nossa aplicação.
Aplicação Ginga-J

33 - Abra o promp de comando e inicie o
  XletView.

java -jar xletview.jar
Aplicação Ginga-J

34 - Clique no menu ‘Applications->Manage
  Applications’.
Aplicação Ginga-J

35 - Clique em ‘Defaul Group’ e no menu lateral
  clique em ‘New Application’.
Aplicação Ginga-J

36 - Clique em ‘new app 1’ e no formulário
  especifique os seguintes dados:

Name: GingaMS
Path: Pasta ‘bin’ do projeto Ginga-J
Xlet: br.com.gingams.GingaMSXlet
Aplicação Ginga-J

37 - Deverá ficar desta forma:
Aplicação Ginga-J

38 - Clique em ‘Save & Close’
Aplicação Ginga-J

39 - Volte no menu ‘Applications’ e clique na
  aplicação ‘GingaMS’ criada.
Aplicação Ginga-J

40 - Se estiver tudo ok a aplicação irá rodar.
Conclusão.

•   Mercado altamente promissor.
•   Diversos nichos a serem explorados.
•   Hora de se capacitar.
•   Levar a ideia para as universidades.
•   Promover eventos.
•   Se divertir.
Referências.

•   Livro: Programando em NCL 3.0
•   www.itvbr.com.br
•   www.ginga.org.br
•   www.gingancl.org.br
•   www.grupogingagoias.com.br
•   www.gingadf.com.br
•   www.google.com.br
Dúvidas.
Obrigado
• Contato:
  – www.diemesleno.com.br
  – diemesleno@gmail.com
  – @diemesleno
Fim do 3 dia

  GingaMS

Mais conteúdo relacionado

DOCX
Cuadro derecho constitucional
PPSX
Resumen de laboratorio de computacion primero de bachillerato
PDF
Euacaristianatal2006
PPT
Oficio de Escriba
PPTX
PPT
Jorge bucay
PPS
Amenidades
Cuadro derecho constitucional
Resumen de laboratorio de computacion primero de bachillerato
Euacaristianatal2006
Oficio de Escriba
Jorge bucay
Amenidades

Semelhante a Desenvolvimento para tv digital interativa [ dia 3] (6)

PDF
NCL: Nested Context Language
PDF
[Livro] NCL: Nested Context Language
PPTX
Ginga-NCL e composer
PDF
Workshop desenvolvimento de aplicacoes interativas para tvd
PDF
Desenvolvimento para tv digital interativa [ dia 2]
NCL: Nested Context Language
[Livro] NCL: Nested Context Language
Ginga-NCL e composer
Workshop desenvolvimento de aplicacoes interativas para tvd
Desenvolvimento para tv digital interativa [ dia 2]
Anúncio

Mais de Diemesleno Carvalho (18)

PDF
Classificador de imagens com redes neurais
PDF
O mercado e as oportunidades na terceira revolução insdustrial
PDF
Minicurso android
PDF
Desenvolvimento Android
PDF
Expandindo as oportunidades com Software Livre
PDF
Internet das coisas na terceira revolução industrial
PDF
E commerce: Da escolha do nicho até a primeira venda
PDF
Programando com Python
PDF
Internet das Coisas
PDF
Computação física com Arduino e Raspberry Pi
PDF
Iniciando no mundo mobile - Programando para android
PDF
Palestra TV Digital Interativa - Hora Livre
PDF
Palestra tv digital interativa Dourados
PDF
Desenvolvendo aplicacoes para TV Digital Interativa
PDF
Desenvolvimento para tv digital interativa [ dia 1]
PDF
ApresentaçAo Joomla
PDF
Mini curso de c#.net
PDF
Aplicacoes Rapidas Para Web Com Django
Classificador de imagens com redes neurais
O mercado e as oportunidades na terceira revolução insdustrial
Minicurso android
Desenvolvimento Android
Expandindo as oportunidades com Software Livre
Internet das coisas na terceira revolução industrial
E commerce: Da escolha do nicho até a primeira venda
Programando com Python
Internet das Coisas
Computação física com Arduino e Raspberry Pi
Iniciando no mundo mobile - Programando para android
Palestra TV Digital Interativa - Hora Livre
Palestra tv digital interativa Dourados
Desenvolvendo aplicacoes para TV Digital Interativa
Desenvolvimento para tv digital interativa [ dia 1]
ApresentaçAo Joomla
Mini curso de c#.net
Aplicacoes Rapidas Para Web Com Django
Anúncio

Último (11)

PPTX
Eng. Software - pontos essenciais para o início
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Tipos de servidor em redes de computador.pptx
PPTX
Arquitetura de computadores - Memórias Secundárias
PPTX
Design - Introdução a Gestalt e teoria das formas
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Utilizando code blockes por andre backes
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Eng. Software - pontos essenciais para o início
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Tipos de servidor em redes de computador.pptx
Arquitetura de computadores - Memórias Secundárias
Design - Introdução a Gestalt e teoria das formas
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Viasol Energia Solar -Soluções para geração e economia de energia
Manejo integrado de pragas na cultura do algodão
Utilizando code blockes por andre backes
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...

Desenvolvimento para tv digital interativa [ dia 3]

  • 1. GingaMS Dia 3 Desenvolvimento para TV Digital Interativa Diemesleno Souza Carvalho Campo Grande - MS
  • 2. Sobre o palestrante. • Tecnólogo em Sistemas para Internet. • Pós-graduando MBA em Gestão de Projetos. • Trabalho com T.I. Desde 1998. • Palestrante em diversos eventos regionais. • Ex-estagiário TRE/MS e Dataprev/MS. • 2 anos na Sefaz/MS Analista/Programador. • Analista de Sistemas Pleno na Sanesul/MS.
  • 3. Sobre o GingaMS. • Grupo novo, mas com grandes perspectivas. • Estimular e difundir as tecnologias TVDi. • Tendências do mercado de TVDi. • Capacitar novos membros gradativamente. • Incentivar produções independentes. • Promover eventos e divulgação do grupo.
  • 4. Sobre o Mini-curso. • Nivelamento sobre TVDi. • Entender as tecnologias envolvidas. • Desafios do mercado. • Principais dificuldades hoje. • Montar ambiente de desenvolvimento e teste. • Criar algumas aplicações de exemplo.
  • 5. Terceiro Dia • Criação de uma Aplicação NCL Pura. • Criação de uma Aplicação Ginga-NCL. • Criação de uma Aplicação Ginga-J.
  • 7. Aplicação NCL Pura « Criaremos uma aplicação NCL Pura passo a passo. »
  • 8. Aplicação NCL Pura 1 - Abra o eclipse.
  • 9. Aplicação NCL Pura 2 - Crie um novo projeto do tipo ‘General/Project’ e dê o nome de ‘NCL-Pura’.
  • 10. Aplicação NCL Pura 3 - Clique com o botão direito no projeto e crie um novo diretório chamado ‘media’
  • 11. Aplicação NCL Pura 4 - Clique com o botão direito no diretório ‘media’ e selecione a opção ‘import->File System’ e selecione o arquivo ‘video.mp4’.
  • 12. Aplicação NCL Pura 5 - Clique com o botão direito do projeto e crie um novo arquivo do tipo ‘NCL Document’ e digite ‘main’ para o id do arquivo.
  • 13. Aplicação NCL Pura 3 - Dentro do cabeçalho ‘<head>’, defina uma regionBase: <regionBase> <region id="rgFundo" width="100%" height="100%" /> </regionBase>
  • 14. Aplicação NCL Pura 4 - Ainda dentro do cabeçalho, defina um descriptorBase: <descriptorBase> <descriptor id="descVideo" region="rgFundo" /> </descriptorBase>
  • 15. Aplicação NCL Pura 5 - Dentro do corpo do programa ‘<body>’, Indique a mídia que aparecerá na tela: <media id="video" src="media/video.mp4" descriptor="descVideo" />
  • 16. Aplicação NCL Pura 6 - Crie um port para indicar o componente que inicia: <port id="pEntrada" component="video" />
  • 17. Aplicação NCL Pura Abra o Ginga Player e teste o programa!
  • 19. Aplicação Ginga-NCL 1 - Com o Eclipse aberto, crie um novo projeto do tipo ‘General/Project’ chamado ‘Ginga- NCL’.
  • 20. Aplicação Ginga-NCL 2 - Dentro de Ginga-NCL crie outro diretório chamado ‘media’ e importe as imagens para dentro.
  • 21. Aplicação Ginga-NCL 3 - Ainda dentro de Ginga-NCL crie um arquivo do tipo ‘NCL Document’ e digite ‘main’ para o id.
  • 22. Aplicação Ginga-NCL 4 - Dentro do cabeçalho ‘<head>’ adicione um regionBase. <regionBase> <region width="40%" height="40%" left="30%" top="30%” id="rgButton"/> </regionBase>
  • 23. Aplicação Ginga-NCL 5 - Adicione um descriptorBase <descriptorBase> <descriptor id="dsButton" region="rgButton" focusIndex="0"/> </descriptorBase>
  • 24. Aplicação Ginga-NCL 6 - Abra um connectorBase <connectorBase>
  • 25. Aplicação Ginga-NCL 7 - Adicione um causalConnector <causalConnector id="onBeginStart"> <simpleCondition role="onBegin"/> <simpleAction role="start"/> </causalConnector>
  • 26. Aplicação Ginga-NCL 8 - Adicione outro causalConnector <causalConnector id="onEndStop"> <simpleCondition role="onEnd"/> <simpleAction role="stop" max="unbounded"/> </causalConnector>
  • 27. Aplicação Ginga-NCL 9 - Adicione outro causalConnector <causalConnector id="onSelectionStopSet"> <simpleCondition role="onSelection"/> <connectorParam name="var"/> <compoundAction operator="seq"> <simpleAction role="stop"/> <simpleAction role="set" value="$var"/> </compoundAction> </causalConnector>
  • 28. Aplicação Ginga-NCL 10 - Adicione outro causalConnector <causalConnector id="onCondGteBeginStart"> <connectorParam name="var"/> <compoundCondition operator="and"> <simpleCondition role="onBegin" /> <assessmentStatement comparator="gte"> <attributeAssessment role="attNodeTest" eventType="attribution" . attributeType="nodeProperty"/> <valueAssessment value="$var"/> </assessmentStatement> </compoundCondition> <simpleAction role="start"/> </causalConnector>
  • 29. Aplicação Ginga-NCL 11 - Adicione outro causalConnector <causalConnector id="onCondLtBeginStart"> <connectorParam name="var"/> <compoundCondition operator="and"> <simpleCondition role="onBegin" /> <assessmentStatement comparator="lt"> <attributeAssessment role="attNodeTest" eventType="attribution" . . … attributeType="nodeProperty"/> <valueAssessment value="$var"/> </assessmentStatement> </compoundCondition> <simpleAction role="start"/> </causalConnector>
  • 30. Aplicação Ginga-NCL 12 - Caso o eclipse não tenha fechado o ‘connectorBase’ faça isso. </connectorBase>
  • 31. Aplicação Ginga-NCL 13 - Dentro de ‘<body>’ adicione um port <port id="entryPoint" component="timer"/>
  • 32. Aplicação Ginga-NCL 14 - Abra uma media para gerenciar o timer. <media id="timer" explicitDur="4s">
  • 33. Aplicação Ginga-NCL 15 - Adicione as âncoras. <area id="area01" begin="3s" end="6s"/> <area id="area02" begin="10s" end="13s"/> <area id="area03" begin="17s" end="20s"/> <area id="area04" begin="24s" end="27s"/> <area id="areaTotal" begin="35s"/>
  • 34. Aplicação Ginga-NCL 16 - Feche a media caso o eclipse já não tenha feito. </media>
  • 35. Aplicação Ginga-NCL 17 - Adicione outra media para o arquivo lua. <media id="clicks" src=“scripts/clicks.lua">
  • 36. Aplicação Ginga-NCL 18 - Adicione a função que usaremos. <property name="inc"/>
  • 37. Aplicação Ginga-NCL 19 - Adicione a variável que usaremos. <property name="counter"/>
  • 38. Aplicação Ginga-NCL 20 - Feche a media do arquivo lua. </media>
  • 39. Aplicação Ginga-NCL 21 - Adicione a imagem do personagem. <media id="button" descriptor="dsButton" src="media/smile2.png"/>
  • 40. Aplicação Ginga-NCL 22 - Adicione a imagem de vitoria. <media id="win" descriptor="dsButton" src="media/win.gif"/>
  • 41. Aplicação Ginga-NCL 23 - Adicione a imagem de derrota. <media id="lose" descriptor="dsButton" src="media/lose.jpg"/>
  • 42. Aplicação Ginga-NCL 24 - Inicializando o componente Lua. <link xconnector="onBeginStart"> <bind role="onBegin" component="timer"/> <bind role="start" component="clicks"/> </link>
  • 43. Aplicação Ginga-NCL 25 - Exibindo o personagem após 6 seg. <link xconnector="onBeginStart"> <bind role="onBegin" component="timer" interface="area01"/> <bind role="start" component="button"/> </link>
  • 44. Aplicação Ginga-NCL 26 - Adicionando a interface 2. <link xconnector="onBeginStart"> <bind role="onBegin" component="timer" interface="area02"/> <bind role="start" component="button"/> </link>
  • 45. Aplicação Ginga-NCL 27 - Adicionando a interface 3. <link xconnector="onBeginStart"> <bind role="onBegin" component="timer" interface="area03"/> <bind role="start" component="button"/> </link>
  • 46. Aplicação Ginga-NCL 28 - Adicionando a interface 4. <link xconnector="onBeginStart"> <bind role="onBegin" component="timer" interface="area04"/> <bind role="start" component="button"/> </link>
  • 47. Aplicação Ginga-NCL 29 - Parando o personagem após 6 seg. <link xconnector="onEndStop"> <bind role="onEnd" component="timer" interface="area01"/> <bind role="stop" component="button"/> </link>
  • 48. Aplicação Ginga-NCL 30 - Adicionando interface 2. <link xconnector="onEndStop"> <bind role="onEnd" component="timer" interface="area02"/> <bind role="stop" component="button"/> </link>
  • 49. Aplicação Ginga-NCL 31 - Adicionando interface 3. <link xconnector="onEndStop"> <bind role="onEnd" component="timer" interface="area03"/> <bind role="stop" component="button"/> </link>
  • 50. Aplicação Ginga-NCL 32 - Adicionando interface 4. <link xconnector="onEndStop"> <bind role="onEnd" component="timer" interface="area04"/> <bind role="stop" component="button"/> </link>
  • 51. Aplicação Ginga-NCL 33 - Aplicando as regras a cada componente. <link xconnector="onEndStop"> <bind role="onEnd" component="timer"/> <bind role="stop" component="button"/> <bind role="stop" component="win"/> <bind role="stop" component="lose"/> <bind role="stop" component="clicks"/> </link>
  • 52. Aplicação Ginga-NCL 34 - Chamada a funcao ‘inc’ quando o botão é pressionado. <link xconnector="onSelectionStopSet"> <bind role="onSelection" component="button"/> <bind role="stop" component="button"/> <bind role="set" component="clicks" interface="inc"> <bindParam name="var" value="1"/> </bind> </link>
  • 53. Aplicação Ginga-NCL 35 - Exibindo o resultado se o user vencer. <link xconnector="onCondGteBeginStart"> <linkParam name="var" value="3"/> <bind role="onBegin" component="timer" interface="areaTotal"/> <bind role="attNodeTest" component="clicks" interface="counter"/> <bind role="start" component="win"/> </link>
  • 54. Aplicação Ginga-NCL 36 - Exibindo o resultado se o user perder. <link xconnector="onCondLtBeginStart"> <linkParam name="var" value="3"/> <bind role="onBegin" component="timer" interface="areaTotal"/> <bind role="attNodeTest" component="clicks" interface="counter"/> <bind role="start" component="lose"/> </link>
  • 55. Aplicação Ginga-NCL 37 - Dentro de Ginga-NCL crie um diretório chamado ‘scripts’ e dentro desse diretório crie um arquivo do tipo ‘New Lua File’ com o nome de ‘clicks.lua’.
  • 56. Aplicação Ginga-NCL 38 - Dentro de ‘clicks.lua’ crie uma variável do tipo local e inicie ela com ‘0’. local counter = 0
  • 57. Aplicação Ginga-NCL 39 - Declare os atributos para a variável. local counterEvt = { class = 'ncl', type = 'attribution', name = 'counter', }
  • 58. Aplicação Ginga-NCL 40 - Crie a funcao para verificar os atributos e some o contador. function handler (evt) if evt.class ~= 'ncl' then return end if evt.type ~= 'attribution' then return end if evt.name ~= 'inc' then return end counter = counter + evt.value
  • 59. Aplicação Ginga-NCL 41 - Set os stributos para o post do evento. event.post { class = 'ncl', type = 'attribution', name = 'inc', action = 'stop', value = counter, }
  • 60. Aplicação Ginga-NCL 42 - Escute os métodos start e stop. counterEvt.value = counter counterEvt.action = 'start'; event.post(counterEvt) counterEvt.action = 'stop'; event.post(counterEvt)
  • 61. Aplicação Ginga-NCL 43 - Feche a função e registre o evento. end event.register(handler)
  • 62. Aplicação Ginga-NCL 44 - Start o Set-top-Box Ginga.
  • 63. Aplicação Ginga-NCL 45 - Copie o projeto para o diretório ‘misc/ncl30’ usando o winSCP ou outro cliente.
  • 64. Aplicação Ginga-NCL 46 - Abra o putty e logue no set-top-box.
  • 65. Aplicação Ginga-NCL 47 - Dentro de ‘misc’, execute a aplicação com o comando: ./launcher.sh ncl30/Ginga-NCL/main.ncl
  • 69. Aplicação Ginga-J 1 - Abra o eclipse e crie um novo projeto Java com o nome Ginga-J.
  • 70. Aplicação Ginga-J 2 - Clique com o botão direito no projeto e vá para ‘propriedades’.
  • 71. Aplicação Ginga-J 3 - Clique em ‘Java Build Path’ e na aba ‘library’ clique no botão ‘Add External Jars’.
  • 72. Aplicação Ginga-J 4 - Adicione o jar do xletview.
  • 73. Aplicação Ginga-J 5 - Adicione o jar do JavaTV.
  • 74. Aplicação Ginga-J 6 - Clique no botão ‘Add External Class Folder’ e adicione o diretório ‘lib’ do JavaTV.
  • 75. Aplicação Ginga-J 7 - Clique no botão ‘Ok’.
  • 76. Aplicação Ginga-J 8 - Clique com o botão direito no projeto e adicione um novo pacote com o nome ‘br.com.gingams’.
  • 77. Aplicação Ginga-J 9 - No pacote criado, clique com o botão direito e crie uma nova classe chamada ‘GingaMSXlet’.
  • 78. Aplicação Ginga-J 10 - Implemente a classe Xlet na nossa classe criada. public class GingaMSXlet implements Xlet { }
  • 79. Aplicação Ginga-J 11 - Clique no ‘problema’ para resolver a dependência. import javax.tv.xlet
  • 80. Aplicação Ginga-J 12 - Clique no ‘problema’ para implementar os métodos da Xlet.
  • 81. Aplicação Ginga-J 13 - Método destroyXlet public void destroyXlet(boolean arg0) throws XletStateChangeException { }
  • 82. Aplicação Ginga-J 14 - Método initXlet public void initXlet(XletContext arg0) throws XletStateChangeException { }
  • 83. Aplicação Ginga-J 15 - Método pauseXlet public void pauseXlet() { }
  • 84. Aplicação Ginga-J 16 - Método startXlet public void startXlet() throws XletStateChangeException { }
  • 85. Aplicação Ginga-J 17 - Declarar os objetos que serão utilizados. private XletContext contexto; private HStaticText labelAcima; private HStaticText labelMeio; private HStaticText labelAbaixo; private HScene scene;
  • 86. Aplicação Ginga-J 18 - Clique no ‘problema’ para resolver as dependências. import org.havi.ui.HScene; import org.havi.ui.HStaticText;
  • 87. Aplicação Ginga-J 19 - Crie o método construtor da classe. public GingaMSXlet(){ //vazio }
  • 88. Aplicação Ginga-J 20 - Configure o método destroyXlet. public void destroyXlet(boolean arg0) throws XletStateChangeException { this.contexto.notifyDestroyed(); }
  • 89. Aplicação Ginga-J 21 - Adicione a notificação do contexto ao método destroyXlet. public void destroyXlet(boolean arg0) throws XletStateChangeException { this.contexto.notifyDestroyed(); }
  • 90. Aplicação Ginga-J 22 - Adicione a variável ‘contexto’ no método initXlet. public void initXlet(XletContext contexto) throws XletStateChangeException { }
  • 91. Aplicação Ginga-J 23 - Dentro do método initXlet adicione: public void initXlet(XletContext contexto) throws XletStateChangeException { this.contexto = contexto; }
  • 92. Aplicação Ginga-J 24 - Dentro do método initXlet adicione: public void initXlet(XletContext contexto) throws XletStateChangeException { this.contexto = contexto; this.scene = HSceneFactory.getInstance() .getFullScreenScene(HScreen.getDefaultHScreen() .getDefaultHGraphicsDevice()); }
  • 93. Aplicação Ginga-J 25 - Clique no ‘problema’ para resolver a dependência. import org.havi.ui.HScreen; import org.havi.ui.HSceneFactory;
  • 94. Aplicação Ginga-J 26 - Ainda dentro do initXlet adicione: public void initXlet(XletContext contexto) throws XletStateChangeException { ... this.labelAcima = new HStaticText("Grupo Ginga MS"); this.labelAcima.setFont(new Font("Arial", Font.BOLD, 90)); this.labelAcima.setBounds(10, 10, 700, 200); this.labelAcima.setForeground(Color.white); this.labelAcima.setBackground(new Color(0,100,0)); }
  • 95. Aplicação Ginga-J 27 - Clique no ‘problema’ para tratar a dependência. import java.awt.Color; import java.awt.Font;
  • 96. Aplicação Ginga-J 28 - Ainda dentro do initXlet adicione: public void initXlet(XletContext contexto) throws XletStateChangeException { ... this.labelMeio = new HStaticText("TV Digital se faz com Ginga!"); this.labelMeio.setFont(new Font("Arial", Font.BOLD, 40)); this.labelMeio.setBounds(10, 200, 700, 200); this.labelMeio.setForeground(new Color(0,0,139)); this.labelMeio.setBackground(Color.white); }
  • 97. Aplicação Ginga-J 29 - Ainda dentro do initXlet adicione: public void initXlet(XletContext contexto) throws XletStateChangeException { ... this.labelAbaixo = new HStaticText("www.gingams.com.br"); this.labelAbaixo.setFont(new Font("Arial", Font.BOLD, 60)); this.labelAbaixo.setBounds(10, 370, 700, 200); this.labelAbaixo.setForeground(Color.yellow); this.labelAbaixo.setBackground(new Color(50,153,204)); }
  • 98. Aplicação Ginga-J 30 - Ainda dentro do initXlet adicione: public void initXlet(XletContext contexto) throws XletStateChangeException { ... this.scene.add(this.labelAcima); this.scene.add(this.labelMeio); this.scene.add(this.labelAbaixo); }
  • 99. Aplicação Ginga-J 31 - No método do startXlet adicione: public void startXlet() throws XletStateChangeException { this.scene.setVisible(true); }
  • 100. Aplicação Ginga-J 32 - Clique no menu ‘Project’->‘Clean’ para compilar nossa aplicação.
  • 101. Aplicação Ginga-J 33 - Abra o promp de comando e inicie o XletView. java -jar xletview.jar
  • 102. Aplicação Ginga-J 34 - Clique no menu ‘Applications->Manage Applications’.
  • 103. Aplicação Ginga-J 35 - Clique em ‘Defaul Group’ e no menu lateral clique em ‘New Application’.
  • 104. Aplicação Ginga-J 36 - Clique em ‘new app 1’ e no formulário especifique os seguintes dados: Name: GingaMS Path: Pasta ‘bin’ do projeto Ginga-J Xlet: br.com.gingams.GingaMSXlet
  • 105. Aplicação Ginga-J 37 - Deverá ficar desta forma:
  • 106. Aplicação Ginga-J 38 - Clique em ‘Save & Close’
  • 107. Aplicação Ginga-J 39 - Volte no menu ‘Applications’ e clique na aplicação ‘GingaMS’ criada.
  • 108. Aplicação Ginga-J 40 - Se estiver tudo ok a aplicação irá rodar.
  • 109. Conclusão. • Mercado altamente promissor. • Diversos nichos a serem explorados. • Hora de se capacitar. • Levar a ideia para as universidades. • Promover eventos. • Se divertir.
  • 110. Referências. • Livro: Programando em NCL 3.0 • www.itvbr.com.br • www.ginga.org.br • www.gingancl.org.br • www.grupogingagoias.com.br • www.gingadf.com.br • www.google.com.br
  • 112. Obrigado • Contato: – www.diemesleno.com.br – [email protected] – @diemesleno
  • 113. Fim do 3 dia GingaMS