Slide 1

Slide 1 text

nobackend e offlinefirst joselito.ninja // @joselitojunior1 // alagoasdevday.com.br

Slide 2

Slide 2 text

Olá, meu nome é Joselito Júnior » Modelo e atriz » Instrutor, palestrante » Vencedor de hackathon profissional » Fundador do GDG Recife » Fã de Fórmula 1 » Apaixonado por entender e resolver

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

Vamos falar sobre Internet

Slide 5

Slide 5 text

The State of LTE, OpenSignal. Acesso em 17/04/2014

Slide 6

Slide 6 text

4G? Alagoas: - Maceió Pernambuco: - Recife - Jaboatão

Slide 7

Slide 7 text

4G? Minas Gerais: 4 Cidades Rio de Janeiro: 4 Cidades São Paulo: 8 Cidades Demais estados: capitais

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

Ter internet o tempo todo é normal?

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

Estar Offline é comum bem mais comum do que parece

Slide 16

Slide 16 text

Estar Offline Não é um problema

Slide 17

Slide 17 text

Estar Offline Não deveria ser um problema

Slide 18

Slide 18 text

Desktop Connected World

Slide 19

Slide 19 text

Mobile First

Slide 20

Slide 20 text

Offline First

Slide 21

Slide 21 text

Offline First é sobre UX

Slide 22

Slide 22 text

Offline First é sobre PESSOAS

Slide 23

Slide 23 text

+ Pessoas + Usuários + $

Slide 24

Slide 24 text

Mudanças

Slide 25

Slide 25 text

Offline tem que ser mais do que tratar erros

Slide 26

Slide 26 text

Trate a rede de dados como uma funcionalidade

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

Não perderás informação Primeiro mandamento do Offline First

Slide 29

Slide 29 text

Armazenamento » localStorage » sessionStorage » WebSQL » IndexedDB

Slide 30

Slide 30 text

Armazenamento Sincronize ao invés de salvar!

Slide 31

Slide 31 text

Armazenamento Sincronize ao invés de salvar! » Se o usuário está online, envie e sincronize com servidor » Se não, salve localmente e sincronize depois!

Slide 32

Slide 32 text

Armazenamento Sincronize ao invés de salvar!

Slide 33

Slide 33 text

Armazenamento Sincronize ao invés de salvar! Use o StorageEvent! - key - oldValue - newValue - url

Slide 34

Slide 34 text

Armazenamento Sincronize ao invés de salvar! Tem jeito mais fácil? Tem. Falaremos em breve.

Slide 35

Slide 35 text

Service Workers É um Web Worker que tomou muito Whey. Roda no background do navegador e não tem acesso ao DOM.

Slide 36

Slide 36 text

Service Workers É um Web Worker que tomou muito Whey. Roda no background do navegador e não tem acesso ao DOM. Rende outra talk inteira.

Slide 37

Slide 37 text

Service Workers É um Web Worker que tomou muito Whey. Roda no background do navegador e não tem acesso ao DOM. Rende outra talk inteira. Por exemplo, essa: Offline Web do jeito certo com ServiceWorkers, Sérgio Lopes.

Slide 38

Slide 38 text

App Cache Poderosissímo e um grande filho da p*ta. O manifesto deve estar em todas as páginas que você desejam que devem se cacheadas.

Slide 39

Slide 39 text

App Cache CACHE MANIFEST index.html stylesheet.css images/logo.png scripts/main.js http://cdn.example.com/scripts/main.js

Slide 40

Slide 40 text

App Cache Podemos dividir em 3 seções principais: » CACHE » NETOWRK » FALLBACK

Slide 41

Slide 41 text

App Cache CACHE Aquivos abaixo do cabeçalho CACHE (ou sem cabeçalho, é a seção default) serão armazenados na primeira vez que forem acessados.

Slide 42

Slide 42 text

App Cache NETWORK Aqui que começa a confusão. Arquivos listados aqui podem vir do servidor se eles não estão no cache. Na maioria dos casos, usa-se *, para todas as páginas. NETWORK: *

Slide 43

Slide 43 text

App Cache FALLBACK Os arquivos na seção de fallback tem dois "parâmetros". O primeiro, o arquivo original (ou pasta), do servidor. O segundo, o arquivo que vai substituir os arquivos. FALLBACK: / fallback.html cardapio/pizzas/calabresa.jpg cardapio/pizza.jpg cardapio/pizzas/ cardapio/pizza.jpg

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

App Cache Cuidados » O cache tem prioridade ao que está no servidor. » O manifesto só será atualizado se o conteúdo dele for alterado. » Arquivos não cacheados nao vão carregar em páginas cacheadas » E mais: Application Cache is a Douchebag, Jake Archibald.

Slide 46

Slide 46 text

Offline First ❤ SPA Static Front-end driven

Slide 47

Slide 47 text

E a parte fácil?

Slide 48

Slide 48 text

noBackend

Slide 49

Slide 49 text

"noBackend"

Slide 50

Slide 50 text

Não é não de "não existe" É não de "não se preocupe"

Slide 51

Slide 51 text

localStorage.setItem("chave", "valor");

Slide 52

Slide 52 text

app.login(user, pass);

Slide 53

Slide 53 text

app.signUp(email, user, pass);

Slide 54

Slide 54 text

Email sendEmail({ to: "[email protected]", subject: "Hoje à noite\n\n…", content: "

Olá Marilene

… p>", attachments: [ 'vinhos.pdf' ] });

Slide 55

Slide 55 text

{\o/} Dreamcode

Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

No content

Slide 65

Slide 65 text

APIs do Hoodie var hoodie = new Hoodie(url); » hoodie.store » hoodie.account » hoodie.id() » on() » online ou offline » change, update

Slide 66

Slide 66 text

Plugins do Hoodie AppCache Nanny Automatização completa do manifesto! » hoodie install appcache » npm install -S appcache-nanny » hoodie.appCache.start();

Slide 67

Slide 67 text

Parse e Firebase » Comerciais e mais robustos (BaaS) » Armazenamento sob demanda » Plugins » Push (local) e outros serviços

Slide 68

Slide 68 text

API Parse var user = new Parse.User(); user.set("username", "my name"); user.set("password", "my pass"); user.set("email", "[email protected]"); user.set("phone", "415-392-0202"); user.signUp(null, { success: function(user) { ... }, error: function(user, error) { ... } });

Slide 69

Slide 69 text

API Parse var base64 = "V29ya2luZyBhdCBQYXJzZSBpcyBncmVhdCE="; var file = new Parse.File("myfile.txt", { base64: base64 });

Slide 70

Slide 70 text

API Parse var parseFile = new Parse.File("myfile.zzz", fileData, "image/png"); parseFile.save().then(function() { // Imagem salva }, function(error) { // Ou ocorreu um erro ou a imagem não foi enviada ao Parse });

Slide 71

Slide 71 text

No content

Slide 72

Slide 72 text

atwood's law “Any application that can be written in JavaScript, will eventually be written in JavaScript.” Jeff Atwood

Slide 73

Slide 73 text

E isso é só o começo

Slide 74

Slide 74 text

offlinefirst.org

Slide 75

Slide 75 text

nobackend.org

Slide 76

Slide 76 text

Isso é tudo pessoal!

Slide 77

Slide 77 text

Obrigado! Joselito Júnior joselito.ninja @joselitojunior1 Slides em: http://jfnj.me/ addnobackendoffline