SlideShare uma empresa Scribd logo
1 de 58
Baixar para ler offline
Web Offline
Bruno Gama Catão
– Eu, quando meu cliente pediu isso !
“Hã ?!”
Qual o Problema ?
Sistema da PCCG
70 delegacias com acesso à Internet
SEM software
Requisitos do Sistema
Quero ter acesso ao software em todas as delegacias
Quero poder emitir relatórios em tempo real de qualquer
local
Características “especiais”
Baixa qualificação dos usuários
Frequente instabilidade da conexão com a Internet
Resumindo
Baixa Qualificação dos Usuários
Não dá para instalar aplicativos complicados
Acessar de qualquer lugar
Tem “cheiro” de Internet
Instabilidade da conexão
Ninguém costa de ouvir: “Desculpe senhor, mas o
sistema está fora do ar"
“Quero algo que esteja
na Internet, mas que
funcione quando a
Internet cair"
Alternativas
Arquiteturas Cliente / Servidor:
Delphi, Java Webstart, Adobe AIR, WPF, …
Problema:
- Alô, é do TI ? Então, o programa não tá abrindo !
- Você fez alguma coisa diferente ?
- Não, só abri uma página dizendo que ganhei um ringtone …
Por que HTML5 ?
HTML5 = HTML + CSS3 + JS
AppCache + Web Storage !!!
Não preciso instalar software no computador de
ninguém !
Se a Internet não abrir chame o suporte e não o
programador ;)
AppCache +
Web Storage
=
Vantagens
Carregamento mais rápido
Suporta instabilidades de conexão
Bom para aplicativos móveis (o 3G não é tão bom assim)
Coleta de dados
…
–Clarice Lispector
“Bora programar galera !”
AppCache 1/2
HTML
Manifesto
Browser
1 - Primeiro Acesso
Eu tenho um
manifesto !
2 - Faz download
Cache
—————
arquivo 1
arquivo 2
….
3 - Define
4 - Faz download
Cache Local
—————
arquivo 1
arquivo 2
….
5 - Cria
WEB LOCAL
AppCache 2/2
HTML
Manifesto
Browser
1 - Outros Acessos
Eu tenho um
manifesto !
Cache
—————
arquivo 1
arquivo 2
….
Cache Local
—————
arquivo 1
arquivo 2
….
3 - Acessa arquivos locais
WEB LOCAL
2 - Tem cache ?
NÃO HÁ
COMUNICAÇÃO !
Manifesto
CACHE MANIFEST!
!
/index.html!
/imagens/logo.png!
/javascript/script.js!
/css/estilo.css
HTML
<html manifest="minha_app.appcache">
HTML
Manifesto
Eu tenho um
manifesto !
FIM
O que falta ?
Mime-type
Como atualizar o conteúdo ?
E a comunicação cliente / servidor ?
Posso ter dados mistos (online / offline) ?
E o banco de dados ?
text/cache-manifest
Mime-Type
No Apache, adicionar ao .htaccess
AddType text/cache-manifest .appcache!
Em Java, criar um filtro (próximo slide)
No IIS, Sei Lá !!!
Atualização de Conteúdo
O conteúdo é atualizado se a cache for invalidada
Coisas que NÃO invalidam a AppCache:
F5, Control F5, limpar a cache e limpar dados offline
Como invalidar a cache ?
Alterando o manifesto
Page miss (404 ou 500)
No Chrome: chrome://appcache-internals/
Esqueci de Colocar um
Arquivo no Manifesto
F5
– Dalai Lama
“Tudo tem que estar no
manifesto”
Atualização Controlada
Colocar um número de versão no manifesto ajuda ;)
# Versao 1.0!
CACHE MANIFEST!
!
/index.html!
/imagens/logo.png!
/javascript/script.js!
/css/estilo.css
Dados Mistos
Seção Network
Recursos que estão na rede
Seção Fallback
Baixa da rede, mas se estiver offline usa esse arquivo
Seção Network
CACHE MANIFEST!
!
/index.html!
/imagens/logo.png!
/javascript/script.js!
/css/estilo.css!
!
NETWORK:!
http://www.google-analytics.com/ga.js
Seção Network ;)
CACHE MANIFEST!
!
/index.html!
/imagens/logo.png!
/javascript/script.js!
/css/estilo.css!
!
NETWORK:!
*
Imagine o cenário …
Seu aplicativo tem usuários
Cada usuário tem sua fotografia
Como seu sistema se comportará offline ?
Você vai baixar todas as fotos ?
Teria que atualizar o manifesto para cada nova foto
Online
Offline
Solução
Seção Fallback
Forneça uma foto padrão para quando estiver offline
Seção Fallback
CACHE MANIFEST!
!
/index.html!
/imagens/logo.png!
/javascript/script.js!
/css/estilo.css!
!
NETWORK:!
*!
!
FALLBACK:!
/img/avatares/ /img/avatar-generico.png
Seção Fallback
Comunicação Cliente / Servidor
Javascript !!!
REST
JSON
Inversão de arquitetura
Arquitetura Inversa
Normalmente
Lógica no servidor
Cliente possui lógica apenas de apresentação
Porém, precisamos de uma arquitetura inversa
Por quê ?
JavaScript
Aprendam !
Javascript != Java
Linguagem Funcional
WEB => JavaScript
node.js => Javascript server-side !
Vale a pena olhar …
E o Banco de Dados
Web Storage
Session Storage
Local Storage
temporário
permanente (5 a 10mb por página)
PouchDB
Dupla Dinâmica:
PouchDB + CouchDB
var db = new PouchDB('dbname');
!
db.put({
_id: 'dave@gmail.com',
name: 'David',
age: 67
});
!
db.changes().on('change', function() {
console.log('Ch-Ch-Changes');
});
!
db.replicate.to('http://example.com/mydb');
Bibliotecas
require.js - http://requirejs.org
jquery - http://jquery.com
handlebars - http://handlebarsjs.com
require.js
jQuery
Uniformização
Busca de elementos por seletores CSS
Suporte a plugins
Ex:
$(‘a’).hide( ); // Esconde todos os links
$(‘h1’).css(‘color’, ‘red’); // Todos os títulos ficam vermelho
Handlebars
Templating Engine (ex: JSP, ASP, PHP, …)
Facilita a produção de texto (normalmente HTML)
TEMPLATE DADOS String+ =
Normalmente
HTML
PROBLEMAS
Problemas
Cache-control:!
no-store
Problemas
Muito inovador
Falta de frameworks
Falta de ferramentas
Vantagens
Muito inovador
Acelera muito a velocidade do acesso
Diminui bastante o processamento no servidor
Aumenta as possibilidades de interação com o aplicativo
Resultados
docx gerado 100% em JavaScript !
DocxGenJS
https://github.com/edi9999/docxtemplater
Perguntas ?
Referências
Sérgio Lopes - http://sergiolopes.org/palestra-
appcache-html5-offline
W3Schools - http://www.w3schools.com/html/
html5_app_cache.asp
Zeno Rocha - http://zenorocha.com/html5-local-
storage/
Web Offline com HTML5

Mais conteúdo relacionado

Mais procurados

Flask for CMS/App Framework development.
Flask for CMS/App Framework development.Flask for CMS/App Framework development.
Flask for CMS/App Framework development.Bruno Rocha
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPMarcelo Andrade
 
Evitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadDanilo Esser
 
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphereCriando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphereJuliano Martins
 
Desenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDesenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDaniel Paz
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e HudsonRodrigo Branas
 
A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )Michael Douglas
 
Zend Framework 1.11
Zend Framework 1.11Zend Framework 1.11
Zend Framework 1.11Cezar Souza
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Frameworkelliando dias
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Julian Cesar
 
Iniciando com o_zend_framework
Iniciando com o_zend_frameworkIniciando com o_zend_framework
Iniciando com o_zend_frameworkMilton Rodrigues
 
Cya grunt.js, hello gulp.js
Cya grunt.js, hello gulp.jsCya grunt.js, hello gulp.js
Cya grunt.js, hello gulp.jsMichael Douglas
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito CertoRavan Scafi
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2Cezar Souza
 

Mais procurados (20)

Python 08
Python 08Python 08
Python 08
 
Python 07
Python 07Python 07
Python 07
 
Flask for CMS/App Framework development.
Flask for CMS/App Framework development.Flask for CMS/App Framework development.
Flask for CMS/App Framework development.
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHP
 
Evitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel Homestead
 
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphereCriando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
Criando um Web Service Restful com Jersey, Eclipse, JBoss, Tomcat, WebSphere
 
Desenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi BuilderDesenvolvimento de Módulos Divi Builder
Desenvolvimento de Módulos Divi Builder
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e Hudson
 
A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )A mágica por trás dos aplicativos ( Api com o Laravel )
A mágica por trás dos aplicativos ( Api com o Laravel )
 
Zend Framework 1.11
Zend Framework 1.11Zend Framework 1.11
Zend Framework 1.11
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)
 
Iniciando com o_zend_framework
Iniciando com o_zend_frameworkIniciando com o_zend_framework
Iniciando com o_zend_framework
 
Como fazer boas libs
Como fazer boas libs Como fazer boas libs
Como fazer boas libs
 
Cya grunt.js, hello gulp.js
Cya grunt.js, hello gulp.jsCya grunt.js, hello gulp.js
Cya grunt.js, hello gulp.js
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito Certo
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
 
ASP.NET MVC 5.x
ASP.NET MVC 5.xASP.NET MVC 5.x
ASP.NET MVC 5.x
 
Apostila MVC
Apostila MVCApostila MVC
Apostila MVC
 

Destaque (9)

Python 05
Python 05Python 05
Python 05
 
Python 02
Python 02Python 02
Python 02
 
Python 03
Python 03Python 03
Python 03
 
Python 04
Python 04Python 04
Python 04
 
Python 01
Python 01Python 01
Python 01
 
Angular js
Angular jsAngular js
Angular js
 
Retina e Retinose Pigmentar
Retina e Retinose PigmentarRetina e Retinose Pigmentar
Retina e Retinose Pigmentar
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 

Semelhante a Web Offline com HTML5

JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3
JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3
JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3Loiane Groner
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPelliando dias
 
2290494 integrando-flex-com-php
2290494 integrando-flex-com-php2290494 integrando-flex-com-php
2290494 integrando-flex-com-phpBrenno Abreu
 
Seminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec CafelândiaSeminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec CafelândiaDiego Cavalca
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento WebSérgio Souza Costa
 
Iniciando com desenvolvimento híbrido de aplicações mobile com HTML5
Iniciando com desenvolvimento híbrido de aplicações mobile com HTML5Iniciando com desenvolvimento híbrido de aplicações mobile com HTML5
Iniciando com desenvolvimento híbrido de aplicações mobile com HTML5Loiane Groner
 
Performance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkPerformance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkJaime Neto
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)Carlos Santos
 
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)Douglas Fischer
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScriptCarlos Santos
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizadosThiago Rodrigues
 
Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3Rodrigo Kono
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sitesthiagolima
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemRodrigo Valerio
 
Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3Rodrigo Kono
 
Desenvolvimento RIA com Java
Desenvolvimento RIA com JavaDesenvolvimento RIA com Java
Desenvolvimento RIA com Javaarmeniocardoso
 

Semelhante a Web Offline com HTML5 (20)

JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3
JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3
JustJava 2013: Aplicações Desktop HTML5, CSS3, Javascript com Servlets 3
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHP
 
2290494 integrando-flex-com-php
2290494 integrando-flex-com-php2290494 integrando-flex-com-php
2290494 integrando-flex-com-php
 
Cake Php
Cake PhpCake Php
Cake Php
 
Seminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec CafelândiaSeminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec Cafelândia
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
Introdução ao desenvolvimento Web
Introdução ao desenvolvimento WebIntrodução ao desenvolvimento Web
Introdução ao desenvolvimento Web
 
Iniciando com desenvolvimento híbrido de aplicações mobile com HTML5
Iniciando com desenvolvimento híbrido de aplicações mobile com HTML5Iniciando com desenvolvimento híbrido de aplicações mobile com HTML5
Iniciando com desenvolvimento híbrido de aplicações mobile com HTML5
 
Performance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkPerformance de verdade com Phalcon Framework
Performance de verdade com Phalcon Framework
 
T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)
 
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
Cocoaheads RJ - Como você faz? (Douglas Fischer - 26/03/2015)
 
(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript(A04 e A05) LabMM3 - JavaScript
(A04 e A05) LabMM3 - JavaScript
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizados
 
Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3
 
Minicurso Web. Front-end e HTML5 (parte 2)
Minicurso Web. Front-end e HTML5 (parte 2)Minicurso Web. Front-end e HTML5 (parte 2)
Minicurso Web. Front-end e HTML5 (parte 2)
 
ASP.NET 5, MVC 6 e além
ASP.NET 5, MVC 6 e alémASP.NET 5, MVC 6 e além
ASP.NET 5, MVC 6 e além
 
Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sites
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvem
 
Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3
 
Desenvolvimento RIA com Java
Desenvolvimento RIA com JavaDesenvolvimento RIA com Java
Desenvolvimento RIA com Java
 

Mais de Bruno Catão

Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Bruno Catão
 
Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Bruno Catão
 
React JS - Parte 2
React JS - Parte 2React JS - Parte 2
React JS - Parte 2Bruno Catão
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1Bruno Catão
 
Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)Bruno Catão
 
Introdução ao Framework Grails
Introdução ao Framework GrailsIntrodução ao Framework Grails
Introdução ao Framework GrailsBruno Catão
 
O framework spring
O framework springO framework spring
O framework springBruno Catão
 

Mais de Bruno Catão (11)

Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2
 
Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2
 
React JS - Parte 2
React JS - Parte 2React JS - Parte 2
React JS - Parte 2
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1
 
Node JS - Parte 4
Node JS - Parte 4Node JS - Parte 4
Node JS - Parte 4
 
Node JS - Parte 3
Node JS - Parte 3Node JS - Parte 3
Node JS - Parte 3
 
Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
Node JS - Parte 1
Node JS - Parte 1Node JS - Parte 1
Node JS - Parte 1
 
Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)
 
Introdução ao Framework Grails
Introdução ao Framework GrailsIntrodução ao Framework Grails
Introdução ao Framework Grails
 
O framework spring
O framework springO framework spring
O framework spring
 

Web Offline com HTML5