SlideShare uma empresa Scribd logo
1 de 113
Baixar para ler offline
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

Semelhante a Desenvolvimento para tv digital interativa [ dia 3]

plano_de_projeto_controlart_final
plano_de_projeto_controlart_finalplano_de_projeto_controlart_final
plano_de_projeto_controlart_final
userrx
 
Apostila pcs7 v8.0 v2
Apostila pcs7 v8.0 v2Apostila pcs7 v8.0 v2
Apostila pcs7 v8.0 v2
confidencial
 
XML Free Programming - Brazil
XML Free Programming - BrazilXML Free Programming - Brazil
XML Free Programming - Brazil
Stephen Chin
 

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

New Relic Insights
New Relic InsightsNew Relic Insights
New Relic Insights
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Mini curso de c#.net
Mini curso de c#.netMini curso de c#.net
Mini curso de c#.net
 
Construindo Diretivas com AngularJS
Construindo Diretivas com AngularJSConstruindo Diretivas com AngularJS
Construindo Diretivas com AngularJS
 
Aula 1 view model livedata e databinding.pptx
Aula 1   view model livedata e databinding.pptxAula 1   view model livedata e databinding.pptx
Aula 1 view model livedata e databinding.pptx
 
Cucumber Best Practices
Cucumber Best PracticesCucumber Best Practices
Cucumber Best Practices
 
TDC2016POA | Trilha Web - Front-end that scales
TDC2016POA | Trilha Web - Front-end that scalesTDC2016POA | Trilha Web - Front-end that scales
TDC2016POA | Trilha Web - Front-end that scales
 
plano_de_projeto_controlart_final
plano_de_projeto_controlart_finalplano_de_projeto_controlart_final
plano_de_projeto_controlart_final
 
Java script aula 10 - angularjs
Java script   aula 10 - angularjsJava script   aula 10 - angularjs
Java script aula 10 - angularjs
 
Apostila pcs7 v8.0 v2
Apostila pcs7 v8.0 v2Apostila pcs7 v8.0 v2
Apostila pcs7 v8.0 v2
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_on
 
TDC 2015 - Execução em Background e Live Tiles em Universal Apps
TDC 2015 - Execução em Background e Live Tiles em Universal AppsTDC 2015 - Execução em Background e Live Tiles em Universal Apps
TDC 2015 - Execução em Background e Live Tiles em Universal Apps
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
XML Free Programming - Brazil
XML Free Programming - BrazilXML Free Programming - Brazil
XML Free Programming - Brazil
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
Plano de projeto: Bichos do Campus na Web
Plano de projeto: Bichos do Campus na WebPlano de projeto: Bichos do Campus na Web
Plano de projeto: Bichos do Campus na Web
 
03_aperfeicoando a interface.pdf
03_aperfeicoando a interface.pdf03_aperfeicoando a interface.pdf
03_aperfeicoando a interface.pdf
 
Phonegap - Framework Mobile
Phonegap - Framework MobilePhonegap - Framework Mobile
Phonegap - Framework Mobile
 
Material Design - Melhorando a experiência de seu App
Material Design - Melhorando a experiência de seu AppMaterial Design - Melhorando a experiência de seu App
Material Design - Melhorando a experiência de seu App
 
Backbone.js - Desenvolvimento de Sistemas Corporativos - UFPB - Campus IV
Backbone.js - Desenvolvimento de Sistemas Corporativos - UFPB - Campus IVBackbone.js - Desenvolvimento de Sistemas Corporativos - UFPB - Campus IV
Backbone.js - Desenvolvimento de Sistemas Corporativos - UFPB - Campus IV
 

Mais de Diemesleno Souza Carvalho

Mais de Diemesleno Souza Carvalho (18)

Classificador de imagens com redes neurais
Classificador de imagens com redes neuraisClassificador de imagens com redes neurais
Classificador de imagens com redes neurais
 
O mercado e as oportunidades na terceira revolução insdustrial
O mercado e as oportunidades na terceira revolução insdustrialO mercado e as oportunidades na terceira revolução insdustrial
O mercado e as oportunidades na terceira revolução insdustrial
 
Minicurso android
Minicurso androidMinicurso android
Minicurso android
 
Desenvolvimento Android
Desenvolvimento AndroidDesenvolvimento Android
Desenvolvimento Android
 
Expandindo as oportunidades com Software Livre
Expandindo as oportunidades com Software LivreExpandindo as oportunidades com Software Livre
Expandindo as oportunidades com Software Livre
 
Internet das coisas na terceira revolução industrial
Internet das coisas na terceira revolução industrialInternet das coisas na terceira revolução industrial
Internet das coisas na terceira revolução industrial
 
E commerce: Da escolha do nicho até a primeira venda
E commerce:  Da escolha do nicho até a primeira vendaE commerce:  Da escolha do nicho até a primeira venda
E commerce: Da escolha do nicho até a primeira venda
 
Programando com Python
Programando com PythonProgramando com Python
Programando com Python
 
Internet das Coisas
Internet das CoisasInternet das Coisas
Internet das Coisas
 
Computação física com Arduino e Raspberry Pi
Computação física com Arduino e Raspberry PiComputação física com Arduino e Raspberry Pi
Computação física com Arduino e Raspberry Pi
 
Iniciando no mundo mobile - Programando para android
Iniciando no mundo mobile - Programando para androidIniciando no mundo mobile - Programando para android
Iniciando no mundo mobile - Programando para android
 
Palestra TV Digital Interativa - Hora Livre
Palestra TV Digital Interativa - Hora LivrePalestra TV Digital Interativa - Hora Livre
Palestra TV Digital Interativa - Hora Livre
 
Palestra tv digital interativa Dourados
Palestra tv digital interativa DouradosPalestra tv digital interativa Dourados
Palestra tv digital interativa Dourados
 
Desenvolvendo aplicacoes para TV Digital Interativa
Desenvolvendo aplicacoes para TV Digital InterativaDesenvolvendo aplicacoes para TV Digital Interativa
Desenvolvendo aplicacoes para TV Digital Interativa
 
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]
 
Desenvolvimento para tv digital interativa [ dia 1]
Desenvolvimento para tv digital interativa [ dia 1]Desenvolvimento para tv digital interativa [ dia 1]
Desenvolvimento para tv digital interativa [ dia 1]
 
ApresentaçAo Joomla
ApresentaçAo JoomlaApresentaçAo Joomla
ApresentaçAo Joomla
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 

Último

Último (6)

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

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 – diemesleno@gmail.com – @diemesleno
  • 113. Fim do 3 dia GingaMS