Sex 15 Jan 2010
Trabalhando com variáveis na linguagem NCL
Publicado por Valdecir Becker sob FormaçãoSem Comentários
Artigo originalmente publicado no Portal Imasters.
Como já visto em textos anteriores, nem sempre é possível antecipar a ação do usuário diante da aplicação. Podem acontecer casos em que os usuários sigam caminhos diferentes ou mesmo executem aplicações diferentes durante um mesmo programa de TV. Neste caso, pode ser necessário saber em que estágio está a aplicação em execução e quais as ações feitas pelo telespectador. Isso é feito com uso de variáveis, que podem ser armazenadas para uso posterior, incluindo testes de estado da aplicação. Também é possível fazer jogos bem sofisticados com esse recurso.
A linguagem NCL, apesar de ser declarativa, chega a níveis de sofisticação e complexidade relativamente altos. O uso de variáveis permite o desenvolvimento de aplicações bastante complexas, com identificação do perfil do usuário, seu local, tipo de dispositivo, e adaptação do conteúdo a essas características. Durante uma programação de TV qualquer, é possível adaptar o conteúdo ao perfil do telespectador, usando apenas programação na linguagem NCL.
Para tanto, vamos usar o elemento nó de mídia x-ginga-settings, regras que definem a apresentação e switches com alternativas para a apresentação. Todos trabalham de forma integrada, sendo usados pelos links através de conectores. A apresentação da aplicação pode ser feita de duas formas: usando um contexto chamado switch ou testando as variáveis a cada uso. Neste exemplo vamos mostrar como usar o switch. Para tanto, vamos dividir o texto em duas partes: hoje apresentaremos os conceitos mais importantes, e no próximo texto discutiremos um exemplo de um comercial que se adapta ao perfil do usuário: homem ou mulher. O teste de variáveis fica para um segundo momento.
Elemento x-ginga-settings
Trata-se de um tipo de nó de mídia utilizado para agrupar variáveis definidas pelo autor do documento ou reservadas pelo sistema. Em ambos os casos, as variáveis podem ser utilizadas nas regras ou testadas. No exemplo abaixo, a primeira variável é de sistema, e define a linguagem configurada. A segunda é definida pelo autor do documento, visando, neste caso, estabelecer uma regra para testar o perfil do usuário.
<media id=”nodeSettings” type=”application/x-ginga-settings”>
<property name=”system.language”/>
<property name=”sexo”/>
</media>
Os valores não reservados são atribuídos através de links usando conectores.
Regras
As regras são definidas dentro do cabeçalho, em uma seção <ruleBase>, tal qual as regiões, descritores e conectores. Cada regra deve possuir um identificador único, uma referência a uma propriedade do objeto settings, um operador de comparação e um valor. Segue um exemplo:
<ruleBase>
<rule comparator=”eq” id=”r1″ value=”mulher” var=”sexo”/>
<rule comparator=”eq” id=”r2″ value=”homem” var=”sexo”/>
</ruleBase>
Os comparadores podem ser:
eq - igual a (equal to)
ne - diferente de (not equal to)
gt - maior que (greater than)
lt - menor que (less than)
gte - maior ou igual a (greater than or equal to)
lte - menor ou igual a (less than or equal to)
No exemplo acima, caso a variável “sexo” seja “homem”, a regra “r2” era verdadeira, executando a mídia correspondente no switch, descrito abaixo.
Além das comparações, é possível combinar regras para atingir um objetivo mais preciso, usando <compositeRule>. Por exemplo, checar o idioma da legenda e a língua da dublagem em que o telespectador está assistindo um determinado filme. Isso pode ser útil para direcionar comerciais, que podem usar o mesmo idioma e a mesma dublagem do filme.
Switch
Trata-se de uma composição contendo nós alternativos, que serão executados de acordo com as regras. Um switch pode conter qualquer tipo de nó: de mídia, de contexto ou mesmo outros switches. Assim, é preciso definir todas as possibilidade de execução dos nós, e relacionar cada uma com uma regra. Se a regra for verdadeira, executa o nó correspondente.
Ou seja, um switch seleciona um conteúdo de acordo com uma regra. Isso é útil para adaptar diferentes conteúdos a perfis de usuário. No entanto, também é possível adaptar o conteúdo para aparecer em diferentes áreas da tela, caso a área original já esteja ocupada com outra aplicação. Por exemplo, se o filme estiver sendo assistido com legenda, o comercial aparece na parte superior da tela. Caso contrário, na parte inferior. Isso é feito através do <descriptorSwitch>.
No próximo texto detalharemos um exemplo onde um anúncio é diferente para cada tipo de audiência.





















