SlideShare une entreprise Scribd logo
1  sur  43
Télécharger pour lire hors ligne
Aplicações com

tecnologias web
Palestra no
Congresso de Software Livre do NE
→ Fac. FIR/Estácio
9 de novembro de 2013

Rildo Pragana
Prehistória: anos 70
Trieste (Ita) - ICTP
Anos 80: Corisco
Microterminais
HandTerm
Adotando o Linux e
software livre
●

●

●

Novembro/Dezembro de 1994
Status Quo: Windows 3.1 (crashes,
erros, lentidão, API obscura,...)
Linux! Luz no fim do túnel. Tudo
documentado, multiuser/task, rápido.
Um sonho para o desenvolvedor.
Device drivers:
scanner Genius
●

Scanner Genius Color page CS.

●

Não havia driver para o Linux

●

●

Duração do projeto: 1 semana (incl.
engenharia reversa - Bochs) - 1997
Pode ser encontrado no
http://www.ibiblio.org/pub/Linux/apps/graphics/capture/
Winprinters
●

Samsung ML-85G

●

ASIC proprietária da M$

●

●

●

Classificada no linuxprinting.org
como “paper weight” (peso de papel)
Duração do projeto: 8 dias.
6 artigos publicados no Linux Today
(descrevendo toda a interface e
ferramentas usadas para decifrar)
Desdobramentos do driver
para winprinters

http://www.boichat.ch/nicolas/lbp660/
Pentax USA

Impressoras (Pocket Jet 200, II e III)
●Scanner (dsmobile)
●
Dsmobile (scanner)
dsmobile
TinyCobol
●

●

●

http://tiny-cobol.sourceforge.net
Compilador Cobol standard (antes
inexistente como software livre)
“fork”: Open Cobol (Keisuke Nishida),
depois reescrito para gerar C (no lugar
de asm86)
Logo Design by James Richardson in the isle of Man
TinyCobol (tools)
Projeto radiola
(jukebox)
Linux com transaçoes
eletronicas
Starkits
●

●

●

Scripts e extensões encapsulados em um único
arquivo (.kit), portável (Linux/Windows/Mac)
Executável separado para cada plataforma: tclkit,
tclkit.exe
Diretório virtual. Pode conter scripts, bibliotecas
(multiplas versões, uma para cada OS),
documentação. Implementado no topo do
banco de dados Metakit.
Manipulando kits
●

Utilitário sdx
●

sdx qwrap programa.tcl
–

●

sdx unwrap programa.kit
–

●

Gera um kit a partir do script fornecido
Expande o kit como o diretório programa.vfs

sdx wrap programa.kit
–
–

Reempacota o kit usando o diretório programa.vfs
Opcionalmente, podemos usar
-runtime tclkit para produzir um starpack
(tudo em um só executável).
Tatu web server
Tatu web server 2
Tatu web server 3
Raspberry Pi
rssReader
Programação ”social“
Tatu+Bootstrap

https://github.com/rpragana/tatuMin-FIR
Usando Geany para
desenvolvimento
Métodos da API
method outHeader {{status 200} {headers {}} {delayed 0}}
method out {s {bin 0}}
method queryNames {}
method queryData {name {multiple 0} {index -1}}
method reqCmd {}
method cliHeaders {}
-------------------------------------------tatu::addRoute {route cmd {log 1}
{protocols {http https}}}
tatu::log {msg {type "warn"}}
Usado com várias “keys” iguais na query.

(*) Conexões são objetos do Snit; o ::tatu é simplesmente um namespace
Plugins básicos 1
namespace eval myapp {}
proc myapp::service {conn parms} {
tatu::log "******** myapp starting..."
$conn outHeader 200 {Content-Type text/plain}
$conn out "Example output of a simple service"
}
tatu::addRoute "/myapp" myapp::service
error "This is an error on purpose.nComment to
remove error msg."
Plugins básicos 2
proc bookService {conn parms} {
tatu::log "*** method=[$conn reqCmd] 
conn=$conn parms=$parms"
$conn outHeader 200 {Content-Type text/plain}
$conn out "Plain text output from a servicen"
$conn out "title= [dict get $parms title]"
return
}
tatu::addRoute "/book/:title/author/:author" route1
html
<div ng-controller="widgetCtrl">
<label for="checkbox1">
<input id="checkbox1" type="checkbox" ng-model="visible">Toggle me
</label>
<div show="visible" my-widget="Olá, mundo!"></div>
</div>
app.controller("widgetCtrl", function($scope) {
$scope.visible = true;
});
javascript
app.directive("myWidget", function() {
return {
templateUrl: "partials/widget1.html",
link: function(scope, element, attributes) {
scope.$watch(attributes.show, function(value) {
element.css('display', value ? ' ' : 'none');
});
scope.frase = attributes.myWidget;
}
};
});
2
<div ng-app="rpApp" … >
var app = angular.module("rpApp", ['ui.bootstrap']);
partials/widget1.html
<input type="text" ng-model="frase"></input>
<ol>
<li>Partial with the widget (using a variable)</li>
<li>Widget contents:<strong>{{frase}}</strong></li>
<li>===== end of partial ======</li>
</ol>
multipart/form-data
Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
content-disposition: form-data; name="user"
content-type: text/plain;charset=utf-8
Maria dos Santos Lima
--AaB03x
Tatu:
$conn queryValue formVar fieldVar
Exemplo:
$conn queryValue user content_type
REST client (GoogleChrome)
REST client (Firefox)
REST client (standalone)
File upload
File upload (browser)
HTML: <div file-upload>File Upload in AngularJS</div>
Jquery.fileTree (javascript)
$('.filetree').fileTree({
root: './',
script: '/filetree'
},function(file){alert(file);});

(*) O elemento .filetree (CSS class) poderá ser uma <div>
no <html> da página:
<div class="filetree"></div>

(**) A rota /filetree irá disparar o script filetree::filetree.
Exemplo de web service
namespace eval filetree { }
proc filetree::filetree {conn params} {
set dir [$conn queryData dir]
tatu::log "filetree dir=$dir"
set s {<ul class="jqueryFileTree">}
foreach f [glob -directory $dir *] {
if {![file isdirectory $f]} continue
append s {<ul><li class="directory collapsed">}
append s "<a href="#" rel="$f/">"
append s "[file tail $f]</a></li></ul>" }
foreach f [glob -directory $dir *] {
if {[file isdirectory $f]} continue
set ext [string range [file extension $f] 1 end]
append s "<ul><li class="file">"
append s "<a href=""#"" rel=""$f">[file tail $f]</a></li> }
append s "</ul>"
$conn outHeader 200 {Content-Type text/html}
$conn out $s
}
tatu::addRoute "/filetree" filetree::filetree 0 {http}
Tatu plugin
Tatu plugin 2
Perguntas
?
?

?

?
?

http://pragana.net
Adventures in Linux Programming
@rpragana

Contenu connexe

Tendances

Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!magnunleno
 
Compartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.jsCompartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.jsGiovanni Bassi
 
NodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingNodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingRhuan Karlus Silva
 
Frameworks Web e Python
Frameworks Web e PythonFrameworks Web e Python
Frameworks Web e PythonÁlvaro Justen
 
.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux.NET com contêineres Windows e Linux
.NET com contêineres Windows e LinuxGiovanni Bassi
 
Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017
Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017
Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017Renato Groff
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascriptLaís Lima
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panosLaís Lima
 
Palestra caruaru2016
Palestra caruaru2016Palestra caruaru2016
Palestra caruaru2016Rildo Pragana
 
Estaleiro o uso de kubernetes no serpro
Estaleiro   o uso de kubernetes no serproEstaleiro   o uso de kubernetes no serpro
Estaleiro o uso de kubernetes no serproRicardo Katz
 
Linux e Docker: novas possibilidades com tecnologias Microsoft - 2o. Stone Te...
Linux e Docker: novas possibilidades com tecnologias Microsoft - 2o. Stone Te...Linux e Docker: novas possibilidades com tecnologias Microsoft - 2o. Stone Te...
Linux e Docker: novas possibilidades com tecnologias Microsoft - 2o. Stone Te...Renato Groff
 
TDC2018SP | Trilha Containers - Linux Conteineres na unha
TDC2018SP | Trilha Containers - Linux Conteineres na unhaTDC2018SP | Trilha Containers - Linux Conteineres na unha
TDC2018SP | Trilha Containers - Linux Conteineres na unhatdc-globalcode
 

Tendances (19)

Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!Adeus Wordpress. Ola Pelican!
Adeus Wordpress. Ola Pelican!
 
Compartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.jsCompartilhando código entre frontend e backend com Node.js
Compartilhando código entre frontend e backend com Node.js
 
Vim Rocks!
Vim Rocks!Vim Rocks!
Vim Rocks!
 
NodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and MultithreadingNodeJS Under the Hood - Concurrency and Multithreading
NodeJS Under the Hood - Concurrency and Multithreading
 
Frameworks Web e Python
Frameworks Web e PythonFrameworks Web e Python
Frameworks Web e Python
 
.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux.NET com contêineres Windows e Linux
.NET com contêineres Windows e Linux
 
Gulp
GulpGulp
Gulp
 
Palestra parse
Palestra parsePalestra parse
Palestra parse
 
Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017
Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017
Linux, Docker, Open Source e Tecnologias Microsoft - Dezembro/2017
 
Testes com javascript
Testes com javascriptTestes com javascript
Testes com javascript
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
Palestra caruaru2016
Palestra caruaru2016Palestra caruaru2016
Palestra caruaru2016
 
Estaleiro o uso de kubernetes no serpro
Estaleiro   o uso de kubernetes no serproEstaleiro   o uso de kubernetes no serpro
Estaleiro o uso de kubernetes no serpro
 
Bricklayer
BricklayerBricklayer
Bricklayer
 
Curso de Grails
Curso de GrailsCurso de Grails
Curso de Grails
 
Linux e Docker: novas possibilidades com tecnologias Microsoft - 2o. Stone Te...
Linux e Docker: novas possibilidades com tecnologias Microsoft - 2o. Stone Te...Linux e Docker: novas possibilidades com tecnologias Microsoft - 2o. Stone Te...
Linux e Docker: novas possibilidades com tecnologias Microsoft - 2o. Stone Te...
 
Secomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao ElixirSecomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao Elixir
 
Introdução ao Qt
Introdução ao QtIntrodução ao Qt
Introdução ao Qt
 
TDC2018SP | Trilha Containers - Linux Conteineres na unha
TDC2018SP | Trilha Containers - Linux Conteineres na unhaTDC2018SP | Trilha Containers - Linux Conteineres na unha
TDC2018SP | Trilha Containers - Linux Conteineres na unha
 

En vedette

Problem Set Solution To No.5
Problem Set Solution To No.5Problem Set Solution To No.5
Problem Set Solution To No.55CHEAgroup5a
 
Nassers Pitchbook 112109 Blue1
Nassers Pitchbook 112109 Blue1Nassers Pitchbook 112109 Blue1
Nassers Pitchbook 112109 Blue1Nasser J Khan
 
Enforcement provisions of the localism act 2011
Enforcement provisions of the localism act 2011Enforcement provisions of the localism act 2011
Enforcement provisions of the localism act 2011Graham Gover
 
Problem Set Solution To No5
Problem Set Solution To No5Problem Set Solution To No5
Problem Set Solution To No55CHEAgroup5a
 
Immunity from enforcement
Immunity from enforcementImmunity from enforcement
Immunity from enforcementGraham Gover
 
solution to no. 11 (plant design assignment)
solution to no. 11 (plant design assignment)solution to no. 11 (plant design assignment)
solution to no. 11 (plant design assignment)5CHEAgroup5a
 
Introduction to the Community Infrastructure Levy
Introduction to the Community Infrastructure Levy Introduction to the Community Infrastructure Levy
Introduction to the Community Infrastructure Levy Graham Gover
 
Making a planning application under the Localism Act 2011
Making a planning application under the Localism Act 2011Making a planning application under the Localism Act 2011
Making a planning application under the Localism Act 2011Graham Gover
 
Dadaab Cultural Orientation Mankato MN - What Do Refugees Know About The U.S....
Dadaab Cultural Orientation Mankato MN - What Do Refugees Know About The U.S....Dadaab Cultural Orientation Mankato MN - What Do Refugees Know About The U.S....
Dadaab Cultural Orientation Mankato MN - What Do Refugees Know About The U.S....Robinson Cook
 
solution to problem no.11
solution to problem no.11solution to problem no.11
solution to problem no.115CHEAgroup5a
 
Cultural Orientation
Cultural OrientationCultural Orientation
Cultural OrientationRobinson Cook
 
Kelly Services
Kelly ServicesKelly Services
Kelly Serviceslpearson
 

En vedette (18)

9 мая
9 мая9 мая
9 мая
 
Problem Set Solution To No.5
Problem Set Solution To No.5Problem Set Solution To No.5
Problem Set Solution To No.5
 
Nassers Pitchbook 112109 Blue1
Nassers Pitchbook 112109 Blue1Nassers Pitchbook 112109 Blue1
Nassers Pitchbook 112109 Blue1
 
Enforcement provisions of the localism act 2011
Enforcement provisions of the localism act 2011Enforcement provisions of the localism act 2011
Enforcement provisions of the localism act 2011
 
Problem Set Solution To No5
Problem Set Solution To No5Problem Set Solution To No5
Problem Set Solution To No5
 
Immunity from enforcement
Immunity from enforcementImmunity from enforcement
Immunity from enforcement
 
VACO Team
VACO TeamVACO Team
VACO Team
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
solution to no. 11 (plant design assignment)
solution to no. 11 (plant design assignment)solution to no. 11 (plant design assignment)
solution to no. 11 (plant design assignment)
 
Introduction to the Community Infrastructure Levy
Introduction to the Community Infrastructure Levy Introduction to the Community Infrastructure Levy
Introduction to the Community Infrastructure Levy
 
Making a planning application under the Localism Act 2011
Making a planning application under the Localism Act 2011Making a planning application under the Localism Act 2011
Making a planning application under the Localism Act 2011
 
Dadaab Cultural Orientation Mankato MN - What Do Refugees Know About The U.S....
Dadaab Cultural Orientation Mankato MN - What Do Refugees Know About The U.S....Dadaab Cultural Orientation Mankato MN - What Do Refugees Know About The U.S....
Dadaab Cultural Orientation Mankato MN - What Do Refugees Know About The U.S....
 
solution to problem no.11
solution to problem no.11solution to problem no.11
solution to problem no.11
 
Cultural Orientation
Cultural OrientationCultural Orientation
Cultural Orientation
 
Kelly Services
Kelly ServicesKelly Services
Kelly Services
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Impianto Hc N10
Impianto Hc N10Impianto Hc N10
Impianto Hc N10
 
Impianto Hc N02
Impianto Hc N02Impianto Hc N02
Impianto Hc N02
 

Similaire à Aplicações com Tecnologias Web

Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLtarginosilveira
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )João Moura
 
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 FrameworkPablo Dall'Oglio
 
Supervisão e Monitorização
Supervisão e MonitorizaçãoSupervisão e Monitorização
Supervisão e MonitorizaçãoSAPO Sessions
 
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoCurso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoGuilhermeJorgeAragod
 
HUGSP#6 Opus uDSL - Uma DSL para Microserviços
HUGSP#6 Opus uDSL - Uma DSL para MicroserviçosHUGSP#6 Opus uDSL - Uma DSL para Microserviços
HUGSP#6 Opus uDSL - Uma DSL para MicroserviçosPhilippe Sevestre
 
Oficina Python e Google App Engine
Oficina Python e Google App EngineOficina Python e Google App Engine
Oficina Python e Google App EngineRodrigo Amaral
 
O que esperar do Zend Framework 3
O que esperar do Zend Framework 3O que esperar do Zend Framework 3
O que esperar do Zend Framework 3Flávio Lisboa
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Elton Minetto
 
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015  - Interfaces Ricas com Rails e React.JSTDC São Paulo 2015  - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JSRodrigo Urubatan
 
Implementando PSR-3 com Monolog @ PHP Community Summit 2019
Implementando PSR-3 com Monolog @ PHP Community Summit 2019Implementando PSR-3 com Monolog @ PHP Community Summit 2019
Implementando PSR-3 com Monolog @ PHP Community Summit 2019Gabriel Machado
 
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonMinicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonRicardo Longa
 
Criando aplicações com PHP-GTK
Criando aplicações com PHP-GTKCriando aplicações com PHP-GTK
Criando aplicações com PHP-GTKPablo Dall'Oglio
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04Carlos Santos
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Introdução a Plataforma Android
Introdução a Plataforma AndroidIntrodução a Plataforma Android
Introdução a Plataforma AndroidÉdipo Souza
 
12 factor app. Melhor com Docker
12 factor app. Melhor com Docker12 factor app. Melhor com Docker
12 factor app. Melhor com DockerWellington Silva
 

Similaire à Aplicações com Tecnologias Web (20)

Mini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOLMini-curso RubyOnRails CESOL
Mini-curso RubyOnRails CESOL
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
 
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
 
Supervisão e Monitorização
Supervisão e MonitorizaçãoSupervisão e Monitorização
Supervisão e Monitorização
 
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoCurso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
 
Android
AndroidAndroid
Android
 
HUGSP#6 Opus uDSL - Uma DSL para Microserviços
HUGSP#6 Opus uDSL - Uma DSL para MicroserviçosHUGSP#6 Opus uDSL - Uma DSL para Microserviços
HUGSP#6 Opus uDSL - Uma DSL para Microserviços
 
Oficina Python e Google App Engine
Oficina Python e Google App EngineOficina Python e Google App Engine
Oficina Python e Google App Engine
 
O que esperar do Zend Framework 3
O que esperar do Zend Framework 3O que esperar do Zend Framework 3
O que esperar do Zend Framework 3
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015  - Interfaces Ricas com Rails e React.JSTDC São Paulo 2015  - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
 
Implementando PSR-3 com Monolog @ PHP Community Summit 2019
Implementando PSR-3 com Monolog @ PHP Community Summit 2019Implementando PSR-3 com Monolog @ PHP Community Summit 2019
Implementando PSR-3 com Monolog @ PHP Community Summit 2019
 
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonMinicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
 
Criando aplicações com PHP-GTK
Criando aplicações com PHP-GTKCriando aplicações com PHP-GTK
Criando aplicações com PHP-GTK
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
 
Python 08
Python 08Python 08
Python 08
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Introdução a Plataforma Android
Introdução a Plataforma AndroidIntrodução a Plataforma Android
Introdução a Plataforma Android
 
12 factor app. Melhor com Docker
12 factor app. Melhor com Docker12 factor app. Melhor com Docker
12 factor app. Melhor com Docker
 

Aplicações com Tecnologias Web