Você está na página 1de 47

Lua WebTV

Ps graduao em Telemtica o ca a Desenvolvimento de Aplicaoes Interativas para o c Sistema Brasileiro de TV Digital (SBTVD)
Manoel Campos da Silva Filho Mestre em Engenharia Eltrica / UnB e http://manoelcampos.com
Instituto Federal de Educao, Cincia e Tecnologia do Tocantins (IFTO/Palmas) ca e

21 de junho de 2012

1 / 47

Lua WebTV

Roteiro
1

Introduo ` Linguagem Lua ca a Histrico o Utilizao ca Caracter sticas Interpretador/Compilador Lua Plugin LuaEclipse Viso Geral da Linguagem a
Escrevendo no Terminal Variveis e Comentrios a a if/else Concatenao e Inicializao de diversas variveis ca ca a Operadores Operadores Operadores New New

Integrao Web/TV ca HTTP


2 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Histrico [?] [?] [?] ca a o


Nascida em 1993 na PUC-Rio, no laboratrio Tecgraf o Projetada para ser simples, pequena, rpida, portvel e fcil a a a de embutir em outras aplicaes co Projetada para permitir a personalizao de aplicaes em ca co outras linguagens Projeto iniciado por Roberto Ierusalimschy, Waldemar Celes e Luiz Henrique de Figueiredo Lua signica Lua, no uma sigla :) a e

3 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Utilizao [?] [?] ca a ca


Atualmente utilizada nas mais diversas reas como: a
simuladores de voo jogos IDEs, editores de texto processamento de imagens Equipamentos de rede robtica, etc o

Linguagem procedural padro do subsistema Ginga-NCL do a middleware Ginga do SBTVD

4 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Caracter ca a sticas


Linguagem de script (interpretada/dinmica) estruturada a Possui recursos que possibilitam denir um modelo para desenvolvimento Orientado a Objetos (mas no o objetivo a e da mesma) Rpida, leve, portvel, simples, pequena (cdigo e a a o documentao: 214KB compactado) ca Embut vel Multiplataforma Baseada em maquina virtual Fracamente tipada Possui Garbage Collection (Coleta de Lixo) OpenSource (Licena MIT) c Unico tipo de estrutura de dados para os mais diferentes usos: as tabelas (tables)
5 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Interpretador/Compilador ca a


Interpretador Responsvel por interpretar cdigos lua e converter para a o bytecodes para ser executado pela Mquina Virtual Lua (cerca a de 167KB em Linux) Compilador Uso opcional, quando se deseja gerar um arquivo com o bytecode Lua e assim no distribuir o cdigo fonte da a o aplicao (apesar de poder-se descompilar o bytecode) ca

6 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Plugin LuaEclipse ca a


Plugin para o IDE Eclipse para desenvolvimento em Lua Incorpora a documentao (LuaDoc) dos mdulos padres de ca o o Lua Possui auto-completar, sintaxe colorida, debugger e exibio ca de erros Necessita do interpretador Lua instalado

7 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Viso Geral ca a a


As variveis no declaradas explicitamente como locais, por a a padro so globais a a Toda passagem de parmetro por referncia a e e O delimitador de strings pode ser (apstrofo) ou (aspas) o O uso de ponto-e-v rgula (;) ao nal de cada instruo ca e opcional e normalmente no utilizado por programadores Lua a Pode-se usar ponto-e-v rgula (;) quando deseja-se escrever vrias instrues em uma mesma linha a co Todos os blocos de cdigo envolvidos em estruturas de seleo o ca ou laos de repetio sempre tem um terminador end, c ca independente de quantas linhas de cdigo tenham o

8 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Escrevendo no Terminal ca a


Cdigo Fonte 1: Hello World o
1 2 3 4 5 6 7 8

os . execute ( c l e a r ) p r i n t ( Meu p r i m e i r o p r o gr a m a em Lua ) p r i n t ( I n i c i a n d o o d e s e n v o l v i m e n t o de a p l i c a c o e s ) i o . w r i t e ( Nunca e s c r e v a LUA e s i m Lua , \ n ) i o . w r i t e ( p o r q u e ninguem e s c r e v e JAVA e s i m J a v a . \ n ) i o . w r i t e ( O a u t o r da l i n g u a g e m a g r a d e c e : ) \n\n )

9 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Variveis, Tipos e ca a a Comentrios a


Os tipos bsicos da linguagem Lua so number, string, boolean, a a table, function, nil, userdata e thread.
Cdigo Fonte 2: Variveis/Tipos e Comentrios o a a
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

C o m e n t a r i o de uma l i n h a [[ C o m e n t a r i o de varias linhas ]] V a r i a v e i s l o c a i s n u m e r i c a s l o c a l n1 = 10 l o c a l n2 = 5 . 3 V a r i a v e l g l o b a l s t r i n g nome = Manoel Campos A f u n c a o p r i n t pode r e c e b e r q u a n t o s p a r a m e t r o s d e s e j a r p r i n t E x i b i n d o v a l o r e s de v a r i a v e i s p r i n t ( n1 = , n1 , n2 = , n2 , \ n ) p r i n t ( nome = , nome )

10 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Estrutura de Seleo if ca a ca


Os parntereses so opcionais e a
Cdigo Fonte 3: if/else o
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Ge ra um numero a l e a t o r i o e n t r e 1 e 100 math . r a n d o m s e e d ( o s . t i m e ( ) ) l o c a l x = math . f l o o r ( ( math . random ( ) 1 0 0 ) +1) p r i n t ( x = , x ) i f ( x < 50) then p r i n t ( x eh menor que 50 ) p r i n t ( nao ha um e l s e n e s t e end

i f \n )

i f x < 10 t h e n p r i n t ( x eh menor que 10 ) else p r i n t ( x eh m a i o r ou i g u a l a 10 ) end

11 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Concatenao e Inicializao ca a ca ca


Cdigo Fonte 4: Concatenao/Inicializao de diversas variveis o ca ca a
1 2 3 4 5 6 7 8 9

I n i c i a l i z a n d o d i v e r s a s v a r i a v e i s A v a r i a v e l x3 nao t e r a um v a l o r e s e r a l o c a l x1 , x2 , x3 = 1 0 , 20

nil

Q u a l q u e r v a r i a v e l eh c o n v e r t i d a p a r a s t r i n g a u t o m a t i c a m e n t e numa c o n c a t e n a c a o . Nao s e pode c o n c a t e n a r uma s t r i n g a um v a l o r n i l , da pau : ( p r i n t ( x1 = . . x1 . . x2 = . . x2 , x3 = , x3 )

12 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Operadores Aritimticos ca a e


No h operadores unrios ++ e a a a
Cdigo Fonte 5: Operadores o
1 2 3 4 5 6 7 8 9 10 11 12 13 14

local local local local local local

x , y = 20 , 3 soma = x+y s u b = xy mult = xy div = x/y r e s t o = x%y

Quando d e s e j a s e i m p r i m i r d i v e r s o s v a l o r e s , podes e s e p a r a r c a d a v a l o r p o r v i r g u l a ou c o n c a t e n a r ( t a n t o f a z ) p r i n t ( x = . . x , y = . . y ) p r i n t ( x + y = . . soma , x y = . . s u b ) p r i n t ( x y = . . mult , x / y = . . d i v ) p r i n t ( x % y = . . r e s t o )

13 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Operadores de Atribuio e ca a ca Relacionais


= atribuio ca == igualdade = diferena c , =, , =

14 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Operadores Lgicos ca a o


and (e) or (ou) not (no) a

15 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Valores Lgicos ca a o


true (verdade) e false (falso) Qualquer valor diferente de false e nil so considerados a verdade (nil como null do Java) e At 0 verdade em Lua e e

16 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Valores Lgicos ca a o


Cdigo Fonte 6: Valores Lgicos o o
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

l o c a l s = T r a t a o v a l o r de s como b o o l e a n o i f s then p r i n t ( s eh c o n s i d e r a d a t r u e ) else p r i n t ( s eh c o n s i d e r a d a f a l s e ) end local val = nil T r a t a o v a l o r de v a l como b o o l e a n o i f v a l then p r i n t ( v a l eh c o n s i d e r a d a t r u e ) else p r i n t ( v a l eh c o n s i d e r a d a f a l s e ) end

17 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Valores Lgicos ca a o


Cdigo Fonte 7: Valores Lgicos o o
1 2 3 4 5 6 7 8

l o c a l ok = 0 T r a t a o v a l o r At o z e r o e e i f ok t h e n p r i n t ( ok eh else p r i n t ( ok eh end

de ok como b o o l e a n o c o n s i d e r a d o t r u e em Lua considerada true ) considerada f a l s e )

18 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: For ca a


Cdigo Fonte 8: For o
1 2 3 4 5 6 7 8 9 10 11 12

f o r de 1 a 5 f o r i =1 , 5 do io . write ( i . . ) end p r i n t ( ) f o r de 5 a 1 f o r i =5 , 1 , 1 do io . write ( i . . ) end p r i n t ( )

19 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

New
Tabelas com ndices no sequenciais a Metatabelas: tostring, index(key), newindex(key,value) Funes co Carregando arquivos de texto Gravar arquivos de texto Carregar cdigo lua a partir de strings/arquivos de texto o Gerar cdigo lua dinamicamente e salvar em arquivo o Carregar arquivos Lua com dole

20 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Criando Mdulos I ca a o


Cdigo Fonte 9: Criando mdulos o o
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

A v a r i v e l G uma v a r i v e l a e a g l o b a l i m p l i c i t a m e n t e d e c l a r a d a em t o d o s c r i p t l u a . Por meio d e l a tems e a c e s s o a q u a l q u e r f u n o ou o u t r a s v a r i v e i s ca a g l o b a i s As l i n h a s a b a i x o , c r i a m v a r i v e i s a l o c a i s , a n t e s de d e f i n i r o s c r i p t como um m dulo , o p a r a que a s mesmas possam s e r a c e s s a d a s d e n t r o do m dulo , o local G , print , i p a i r s = G , print , i p a i r s Exemplo de m dulo . o O nome do m dulo o nome do a r q u i v o . o e module meumodulo

21 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Criando Mdulos II ca a o


19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

A b a i x o da l i n h a module , s s e tem o a c e s s o , p o r p a d r o , ` s v a r i v e i s l o c a i s . a a a Nem a s f u n o e s g l o b a i s como p r i n t c s e tem a c e s s o . R e a l i z a uma o p e r a o no f o r m a t o num1 op ca s e n d o que o o p e r a d o r pode s e r +, , ou @param num1 P r i m e i r o v a l o r da o p e r a o ca @param op O p e r a d o r da e x p r e s s o (+ , , a @param num2 Segundo v a l o r da o p e r a o ca @ r e t u r n R e t o r n a o r e s u l t a d o da e x p r e s s o a f u n c t i o n c a l c u l a r ( num1 , op , num2 ) i f op == + t h e n r e t u r n num1 + num2 e l s e i f op == t h e n r e t u r n num1 num2 e l s e i f op == t h e n r e t u r n num1 num2 e l s e i f op == / t h e n r e t u r n num1 / num2 num2 / ou / ) aritmtica e

22 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Criando Mdulos III ca a o


40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

else p r i n t ( Operador i n v l i d o ) a return n i l end end C a l c u l a uma e x p r e s s o a r i t m t i c a com a e q u a n t i d a d e i n d e t e r m i n a d a de v a l o r e s @param . . . L i s t a de v a l o r e s no f o r m a t o num1 op num2 op numN @ r e t u r n R e t o r n a o r e s u l t a d o da e x p r e s s o a function calcExpressao ( . . . ) Pega t o d o s o s p a r m e t r o s e c r i a um v e t o r ( t a b e l a ) a l o c a l params = { . . . } P e r c o r r e o v e t o r de p a r m e t r o s . a A c a d a i t e r a o , armazena o v a l o r ca da p o s i o a t u a l do v e t o r em v a l ca local i , res = 1 , 0 l o c a l num1 , num2 , op = 0 , 0 ,

23 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Criando Mdulos IV ca a o


61 62 63 64 65 66 67 68 69 70 71 72 73 74 75

for

, v a l i n i p a i r s ( params ) do i == 1 t h e n num1 = v a l e l s e i f i == 2 t h e n op = v a l e l s e i f i == 3 t h e n num2 = v a l r e s = c a l c u l a r ( num1 , op , num2 ) num1 = r e s i = 1 end i=i +1 if

end return res end

24 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Usando Mdulos I ca a o


Cdigo Fonte 10: Usando mdulo criado o o
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Se o a r q u i v o do m dulo e s t i v e r o no mesmo d i r e t r i o da a p l i c a o , o ca e l e e n c o n t r a d o sem p r o b l e m a s . e Nos c a s o s de a p p s de TVD, o s m d ul o s l u a e s t a r o o a j u n t o com a app p a r a s e r e m e n v i a d o s v i a b r o a c a s t ( p o r e x e m p l o ) A l i n h a a b a i x o u s a o meumodulo . l u a que o b r i g a t o r i a m e n t e d e v e t e r s i d o d e f i n i d o com a i n s t r u o module ca l no a r q u i v o meumodulo . l u a a Se o a r q u i v o n o um m dulo , a e o usas e d o f i l e ( n o m e d o a r q u i v o . l u a ) r e q u i r e meumodulo

l o c a l num1 , op , num2 = 1 0 , $ , 5 Ao chamar uma f u n o de um m dulo , ca o

25 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Usando Mdulos II ca a o


19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

a mesma d e v e s e r p r e c e d i d a p e l o nome do mesmo ( f u n c i o n a n d o como um namespace ) l o c a l r e s = meumodulo . c a l c u l a r ( num1 , op , num2 ) p r i n t ( num1 , op , num2 , = , r e s ) l o c a l r e s = meumodulo . c a l c E x p r e s s a o ( 1 0 , , 3 , + , 6 ) p r i n t ( R e s u l t a d o = , r e s ) O c d i g o d a q u i p r a b a i x o c a l c u l a o o r e s u l t a d o de uma e x p r e s s o , a mas u s a n d o a s f a c i l i d a d e s de l u a , p o r meio da f u n o l o a d s t r i n g ca l o c a l c o d i g o = r e s 1 = 10 3 2 U t i l i z a o s r e c u r s o s de l u a p a r a a v a l i a r uma e x p r e s s o a ou q u a l q u e r c d i g o l u a c o n t i d o o numa s t r i n g e e x e c u t a r . N e s t e c a s o , c o n s i d e r a a t e a p r e c e d n c i a d o s o p e r a d o r e s e l o c a l executa , e r r o = l o a d s t r i n g ( codigo ) Se o c d i g o na s t r i n g do l o a d s t r i n g o

26 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Usando Mdulos III ca a o


40 41 42 43 44 45 46 47 48 49 50 51 52 53

f o r c o m p i l a d o com s u c e s s o , l o a d s t r i n g r e t o r n a uma f u n o . ca Se r e t o r n o u uma f u n o , ca o c d i g o f o i c o m p i l a d o , o a s s i m , b a s t a chamar a f u n c o a r e t o r n a d a i f e x e c u t a = n i l t h e n chama a f u n o que e x e c u t a r ca a o c d i g o c o m p i l a d o p e l a l o a d s t r i n g o executa () p r i n t ( c o d i g o , = , r e s 1 ) else print ( erro ) end

27 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Tratamento de excees I ca a co


Cdigo Fonte 11: Tratamento de Excees com pcall o co
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Se o a r q u i v o do m dulo e s t i v e r o no mesmo d i r e t r i o da a p l i c a o , o ca e l e e n c o n t r a d o sem p r o b l e m a s . e Nos c a s o s de a p p s de TVD, o s m d ul o s l u a e s t a r o o a j u n t o com a app p a r a s e r e m e n v i a d o s v i a b r o a c a s t ( p o r e x e m p l o ) A l i n h a a b a i x o u s a o meumodulo . l u a que o b r i g a t o r i a m e n t e d e v e t e r s i d o d e f i n i d o com a i n s t r u o module ca l no a r q u i v o meumodulo . l u a a Se o a r q u i v o n o um m dulo , a e o usas e d o f i l e ( n o m e d o a r q u i v o . l u a ) r e q u i r e meumodulo

l o c a l num1 , op , num2 = 1 0 , $ , 5 Ao chamar uma f u n o de um m dulo , ca o

28 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Tratamento de excees II ca a co


19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

a mesma d e v e s e r p r e c e d i d a p e l o nome do mesmo ( f u n c i o n a n d o como um namespace ) l o c a l r e s = meumodulo . c a l c u l a r ( num1 , op , num2 ) p r i n t ( num1 , op , num2 , = , r e s ) l o c a l r e s = meumodulo . c a l c E x p r e s s a o ( 1 0 , , 3 , + , 6 ) p r i n t ( R e s u l t a d o = , r e s ) O c d i g o d a q u i p r a b a i x o c a l c u l a o o r e s u l t a d o de uma e x p r e s s o , a mas u s a n d o a s f a c i l i d a d e s de l u a , p o r meio da f u n o l o a d s t r i n g ca l o c a l c o d i g o = r e s 1 = 10 3 2 U t i l i z a o s r e c u r s o s de l u a p a r a a v a l i a r uma e x p r e s s o a ou q u a l q u e r c d i g o l u a c o n t i d o o numa s t r i n g e e x e c u t a r . N e s t e c a s o , c o n s i d e r a a t e a p r e c e d n c i a d o s o p e r a d o r e s e l o c a l executa , e r r o = l o a d s t r i n g ( codigo ) Se o c d i g o na s t r i n g do l o a d s t r i n g o

29 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Tratamento de excees III ca a co


40 41 42 43 44 45 46 47 48 49 50 51 52 53

f o r c o m p i l a d o com s u c e s s o , l o a d s t r i n g r e t o r n a uma f u n o . ca Se r e t o r n o u uma f u n o , ca o c d i g o f o i c o m p i l a d o , o a s s i m , b a s t a chamar a f u n c o a r e t o r n a d a i f e x e c u t a = n i l t h e n chama a f u n o que e x e c u t a r ca a o c d i g o c o m p i l a d o p e l a l o a d s t r i n g o executa () p r i n t ( c o d i g o , = , r e s 1 ) else print ( erro ) end

30 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Shell Script I ca a


Da mesma forma que pode-se criar arquivos *.sh para executar comandos do shell e automatizar tarefas em sistemas operacional da fam UNIX, pode-se usar lua para isto. lia A grande vantagem que lua bem mais simples que as e e linguagens tradicionais de Shell Script, alm do que, se voc e e j conhece Lua, menos trabalho. a e Para um script lua executar como um shell script, basta incluir a marcao conhecida como shebang ou hashbang ca (http://wiki.linuxquestions.org/wiki/Shebang), um comentrio na primeira linha do arquivo que indica qual o a programa que deve interpretar o mesmo quando este for executado.

31 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Shell Script II ca a


Cdigo Fonte 12: Lua como Shell Script o
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

#!/ u s r / b i n / l u a O c d i g o ac im a p e r m i t e e x e c u t a r o o s c r i p t l u a com . / n o m e d o s c r i p t . l u a ( sem p r e c i s a r u s a r o comando l u a a n t e s ) d e s d e que o a r q u i v o t e n h a p e r m i s s o a de e x e c u o em l i n u x ca a ( chmod a+x n o m e d o s c r i p t . l u a p r a d a r p e r m i s s o ) Usando l u a como s h e l l script

Pega p a r m e t r o s de l i n h a de comando a local args = { . . . } os . execute ( c l e a r ) D um p i n g no e n d e r e c o r e c e b i d o p o r p a r m e t r o a a Se r e t o r n a r z e r o , p o r q u e e x e c u t o u o p i n g e e o h o s t r e s p o n d e u ,


32 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: Shell Script III ca a


19 20 21 22 23 24

c a s o c o n t r i o , r e t o r n a um v a l o r d i f e r e n t e de z e r o a i f o s . e x e c u t e ( p i n g . . a r g s [ 1 ] . . c 3 )==0 t h e n p r i n t ( pingou ) else p r i n t ( NAO PINGOU ) end

33 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: LuaRocks ca a


O luarocks uma ferramenta, que como o apt-get, permite e baixar pacotes lua. Para baix-lo execute sudo apt-get install luarocks a Baixando alguns mdulos o
sudo luarocks install luasocket sudo luarocks install luadoc sudo luarocks install luasec

34 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: LuaDoc I ca a


O LuaDoc uma ferramenta de documentao de cdigos e ca o lua, assim como o JavaDoc. Para baix-lo execute sudo luarocks install luadoc ou sudo a apt-get install luadoc
Cdigo Fonte 13: Exemplo de mdulo documentado com LuaDoc o o
1 2 3 4 5 6 7 8 9 10 11 12

local

G , print , loadstring =

G , print , loadstring

Exemplo de m dulo ( Documentando um m dulo ) . o o Os c o m e n t r i o s i n i c i a d o s com a s o i n t e r p r e t a d o s p e l o l u a d o c p a r a a g e r a r a documenta o do c d i g o f o n t e do p r o j e t o . ca o O nome do m dulo o nome do a r q u i v o . o e module meumodulo C a l c u l a uma e x p r e s s o a r i t m t i c a com a e q u a n t i d a d e i n d e t e r m i n a d a de v a l o r e s @param e x p E x p r e s s o a r i t m t i c a a s e r c a l c u l a d a a e
35 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: LuaDoc II ca a


13 14 15 16 17 18 19 20 21 22

@ r e t u r n R e t o r n a o r e s u l t a d o da e x p r e s s o a f u n c t i o n c a l c u l a r ( exp ) l o c a l executa , e r r o = l o a d s t r i n g ( r e t u r n . . exp ) i f e x e c u t a = n i l t h e n return executa () else print ( erro ) return n i l end end

Cdigo Fonte 14: Exemplo de app documentada com LuaDoc o


1 2 3 4 5 6 7

Exemplo de u s o do m dulo c r i a d o o r e q u i r e meumodulo

l o c a l e x p = 10 3 2 l o c a l r e s = meumodulo . c a l c u l a r ( e x p ) p r i n t ( exp , = , r e s )
36 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

Introduo ` Linguagem Lua: LuaDoc III ca a


Para gerar a documentao, crie um diretrio doc dentro do ca o diretrio da aplicao o ca Execute o comando: luadoc *.lua -d doc Abra o index.html no diretrio criado. o Para corrigir os acentos nos HTML gerados: http://goo.gl/Dlb55

37 / 47

Lua WebTV

Hist. Uso Carac. Interp. LuaEclipse Overview

New
Analisando desempenho de programas Lua: luaproler, top, htop, collectgarbage(count). Tratando XML em Lua POO em Lua

38 / 47

Lua WebTV

HTTP

Integrao Web/TV ca
Ginga-NCL disponibiliza apenas API para o protocolo TCP Qualquer protocolo acima da camada de transporte precisa ser implementado pelo desenvolvedor Protocolos da Web como HTTP e SOAP so extremamente a simples de serem implementados por serem baseados em texto (protocolos ASCII)

39 / 47

Lua WebTV

HTTP

Transmission Control Protocol


O protocolo TCP no Ginga-NCL assincrono e A implementao do mesmo baseada no mdulo event ca e o Os passos de um processo de envio de uma requisio TCP, ca como conexo, envio de requisio e obteno de resposta, a ca ca so tratados por um manipulador de eventos (handler) a

40 / 47

Lua WebTV

HTTP

Hyper Text Transfer Protocol


Protocolo da Web utilizado basicamente para transferncia de e hyper texto (HTML), alm de diversos outros tipos de e contedo u Protocolo da camada de aplicao do modelo OSI, trafegando ca sobre TCP

41 / 47

Lua WebTV

HTTP

Hyper Text Transfer Protocol


Enviando requisio GET com telnet ca
Cdigo Fonte 15: Requisio HTTP GET com telnet o ca
1 2 3

t e l n e t manoelcampos . com 80 (ENTER) GET h t t p : / / manoelcampos . com/ v o t a c a o / HTTP/ 1 . 1 Host : manoelcampos . com (ENTER + ENTER)

42 / 47

Lua WebTV

HTTP

Hyper Text Transfer Protocol


Enviando requisio POST com telnet ca
Cdigo Fonte 16: Requisio HTTP POST com telnet o ca
1 2 3 4 5 6 7

t e l n e t manoelcampos . com 80 (ENTER) POST h t t p : / / manoelcampos . com/ v o t a c a o / v o t a c a o 2 . php HTTP /1.1 C o n t e n t t y p e : a p p l i c a t i o n / xwww formu r l e n c o d e d C o n t e n t L e n g t h : 8 Host : manoelcampos . com v o t o=s i m (ENTER + ENTER)

43 / 47

Lua WebTV

HTTP

Hyper Text Transfer Protocol


O atributo User-Agent identica o navegador do usurio a Faa o teste abrindo a pgina c a http://manoelcampos.com/apps/useragent.php em diferentes navegadores Por meio da vericao do User-Agent (do lado servidor), ca pode-se criar pginas Web espec a cas para a TVD

44 / 47

Lua WebTV

HTTP

Hyper Text Transfer Protocol


Exemplos de requisies HTTP co
Cdigo Fonte 17: Requisio HTTP para pgina que exibe o User-Agent o ca a
1 2 3

t e l n e t manoelcampos . com 80 (ENTER) GET h t t p : / / manoelcampos . com/ a p p s / u s e r a g e n t . php HTTP/ 1 . 1 Host : manoelcampos . com (ENTER + ENTER)

Cdigo Fonte 18: Requisio HTTP alterando o User-Agent o ca


1 2 3 4

t e l n e t manoelcampos . com 80 (ENTER) GET h t t p : / / manoelcampos . com/ a p p s / u s e r a g e n t . php HTTP/ 1 . 1 Host : manoelcampos . com UserAgent : A n d r o i d (ENTER + ENTER)

45 / 47

Lua WebTV

HTTP

Hyper Text Transfer Protocol


Usando TCP e HTTP no Ginga-NCL
Cdigo Fonte 19: Exemplo ultra resumido de requisio TCP usando API o ca nativa do Ginga-NCL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

function handler ( evt ) i f e v t . c l a s s = t c p t h e n return end e v t . t y p e == c o n n e c t t h e n s e u c d i g o o p r i n t ( evt . host , evt . port ) e l s e i f e v t . t y p e == d i s c o n n e c t t h e n s e u c d i g o o e l s e i f e v t . t y p e == d a t a t h e n s e u c d i g o o p r i n t ( Dados r e c e b i d o s : , e v t . v a l u e ) end end if

46 / 47

Lua WebTV

HTTP

Hyper Text Transfer Protocol


Usando mdulo TCP da PUC-Rio (http: o //www.telemidia.puc-rio.br/~francisco/nclua/)
Cdigo Fonte 20: Requisio HTTP com mdulo tcp da PUC-Rio o ca o
1 2 3 4 5 6 7 8 9 10 11 12 13

tcp . execute ( function () l o c a l h o s t , p o r t = manoelcampos . com , 80 tcp . connect ( host , port ) l o c a l req = r e q = GET h t t p : / / manoelcampos . com/ v o t a c a o / HTTP/ 1 . 1 \ n r e q = r e q . Host : manoelcampos . com\n\n tcp . send ( req ) l o c a l r e s p o n s e = tcp . r e c e i v e ( a ) tcp . disconnect () print ( response ) end )

47 / 47

Você também pode gostar