Escolar Documentos
Profissional Documentos
Cultura Documentos
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
Lua WebTV
3 / 47
Lua WebTV
4 / 47
Lua WebTV
Lua WebTV
6 / 47
Lua WebTV
7 / 47
Lua WebTV
8 / 47
Lua WebTV
9 / 47
Lua WebTV
10 / 47
Lua WebTV
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 )
11 / 47
Lua WebTV
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
12 / 47
Lua WebTV
13 / 47
Lua WebTV
14 / 47
Lua WebTV
15 / 47
Lua WebTV
16 / 47
Lua WebTV
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
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
18 / 47
Lua WebTV
19 / 47
Lua WebTV
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
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
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
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
for
24 / 47
Lua WebTV
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
25 / 47
Lua WebTV
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
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
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
28 / 47
Lua WebTV
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
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
31 / 47
Lua WebTV
#!/ 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
Lua WebTV
33 / 47
Lua WebTV
34 / 47
Lua WebTV
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
@ 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
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
37 / 47
Lua WebTV
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
40 / 47
Lua WebTV
HTTP
41 / 47
Lua WebTV
HTTP
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
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
44 / 47
Lua WebTV
HTTP
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)
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
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
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