SlideShare a Scribd company logo
1 of 37
Download to read offline
Banco de Dados no
Mobile: Realm e
Firebase
Ricardo da Silva Ogliari
GDG
Um Pouco Sobre Mim
● Bacharel em Ciência da Computação;
● Especialista em Web - Inovacão e Tecnologia;
● MBA: Desenvolvimento de Jogos e Apps Mobile;
● Co-autor do Livro: Android do Básico ao Avançado - Ciência Moderna;
● Mobile Magazine;
● Desenvolvedor Android Bikoo/BovControl;
● Professor Especialização Senac e UPF. Professor Graduação UPF;
● Mais de 310 publicações;
● Fundador Things Hacker Team;
● 10 Nomes Open-Hardware 2013 - Revista iMasters;
SQLite
Introdução
● Uso de Banco de Dados Relacional - SQLite;
● API padrão do Android - Presente desde o Android 1.0;
● Código pesado, principalmente para novatos na plataforma ou oriundos de
concorrentes, como iOS e wPhone;
● Só uma olhadinha rápida:
● https://developer.android.com/training/basics/data-storage/databases.html?hl=
pt-br
Realm
Realm
● Promete ser mais rápido que qualquer outra solução de ORM;
● Promete ser mais rápido que o SQLite puro;
● Mais simples e Mais rápido;
● Suporte para:
○ Java/Android
○ Objective-C;
○ Swift;
○ Xamarim;
○ React Native;
Instalação - Pré-Requisitos
● Não suporta Java a não ser no Android. Neste momento.
● Android Studio >= 1.5.1.
● Versão do JDK >= 7.
● Android Api Level 9 ou superior (Android 2.3 Gingerbread).
Configuração da Biblioteca
● Gradle a nível de projeto:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath
"io.realm:realm-gradle-plugin:<versao>"
}
}
Configuração da Biblioteca
● Gradle a nível de módulo:
apply plugin: 'realm-android'
Modelo De Dados
● Uma simples classe que herda de RealmObject;
● Anotação para detalhes importantes de um banco de dados relacional, como o
@PrimeryKey para chave primária;
● Documentação detalha outras anotações e tipos de dados:
https://realm.io/docs/java
Modelo De Dados
public class Task extends RealmObject{
@PrimaryKey
public String nome;
public String descricao;
public long termino;
public String local;
public boolean iniciada;
@Override
public String toString() {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(termino);
int dia = cal.get(Calendar.DAY_OF_MONTH);
...
return "Nome: " + nome + "nDescrição: " + descricao + "nTérmino: " +
(dia < 10 ? "0" + dia : "" + dia) + "/" + …);
}
}
RealmConfiguration e Realm
● Necessária a criação de uma configuração para o Realm (Migração, Encriptação);
● Posteriormente cria-se a própria instância de Realm (Trabalha diretamente sobre
os dados);
● Indicado usar em uma classe que estende de Application;
public class CoreApplication extends Application{
public Realm realm;
@Override
public void onCreate() {
super.onCreate();
RealmConfiguration realmConfig = new RealmConfiguration.Builder(this).deleteRealmIfMigrationNeeded().build();
Realm.setDefaultConfiguration(realmConfig);
realm = Realm.getDefaultInstance();
}
}
Pesquisando Dados
● A classe Realm possui o método where que define o alvo das pesquisas;
● Depois, nos traz uma infinidade de métodos que espelham grande parte das
pesquisas com SQL;
● Métodos auxiliares do SQL como count e average também estão presentes;
● Perceba o uso do método Assíncrono. O changeListener recebe o resultado
da pesquisa.
@Override
protected void onCreate(Bundle savedInstanceState) {
...
RealmResults<Task> result = ((CoreApplication)getApplication()).realm.where(Task.class).findAllAsync();
result.addChangeListener(callback);
}
Pesquisando Dados
● O Listener possui um único método a ser sobrescrito;
● O RealResults<Task> se usado no mesmo contexto da instância de Realm, mantém o listener
ativo e registra qualquer mudança nos dados.
● O RealmResults também precisa ser único para manter o callback para futuras atualizações.
● Método sort para ordenação dos resultados;
public static RealmResults<Task> results;
private RealmChangeListener callback = new RealmChangeListener() {
public void onChange(Object element) {
results = (RealmResults<Task>) element;
results = results.sort("termino", Sort.ASCENDING);
listTasks.setAdapter(new ArrayAdapter<Task>(
MainActivity.this, android.R.layout.simple_list_item_1, results
)
);
}
};
Excluindo
● Usando a mesma instância de Realm da Application;
● Método executeTransaction é síncrono;
● Opção de trabalho assíncrono. Porém, neste caso obrigatoriamente, precisamos
usar a opção síncrona.
● Na própria instância RealmObject é possível chamar deleteFromRealm.
//só pode ser feito da mesma thread onde o objeto foi criado
((CoreApplication)getApplication()).realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
task.deleteFromRealm();
}
});
//results.deleteFirstFromRealm();
//results.deleteLastFromRealm();
Salvar Dados
● Executamos uma tarefa assíncrona;
● A assinatura do método recebe a implementação de um método de sucesso e de erro;
Task result = ((CoreApplication)getApplication()).realm.where(Task.class).equalTo("nome", key).findFirst();
saveTaskNome.setText(result.nome);
…
((CoreApplication)getApplication()).realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm bgRealm) {
Task task = new Task();
task.nome = saveTaskNome.getText().toString();
...
bgRealm.copyToRealmOrUpdate(task);
}
}, new Realm.Transaction.OnSuccess() {
public void onSuccess() {}
}, new Realm.Transaction.OnError() {
public void onError(Throwable error) {}
});
Firebase
O que é?
● Um set de ferramentas que auxiliam e agilizam o processo de
desenvolvimento de aplicativos móveis;
Detalhes
● Android;
● Web;
● iOS;
● Alguns serviços gratuitos, alguns pagos e, também tem serviços com o modelo
de cotas;
● Pré-Requisitos para Android:
○ Android 2.3 ou superior;
○ Google Play Services 9.0.2 ou superior;
○ O Google Play Services SDK;
○ Android Studio 1.5 ou Superior;
○ Um projeto Android Studio e seu package name;
Configuração no Android - Passo 1
● Acessar o console do Firebase: https://console.firebase.google.com.
Configuração no Android - Passo 2
● Criar o novo Projeto.
Configuração no Android - Passo 2
● Dashboard do projeto:
Configuração no Android - Passo 3.1
● Adicionar o Firebase ao Projeto Android:
Configuração no Android - Passo 3.2
● Adicionar o Firebase ao Projeto Android:
Configuração no Android - Passo 3.3
Pronto!
● Se essa tela apareceu, está tudo certo e o projeto Firebase adicionado no
projeto Android!!!!
Base de Dados
● Base de dados NOSQL. Tudo é JSON.
Base de Dados
● Para inicializar a base de dados podemos gerar um JSON;
● Minha dica: Json Generator: http://www.json-generator.com/;
Base de Dados
● O Json Generator permite o download do arquivo .json;
● No console do Firebase apenas importe o arquivo:
Base de Dados
● Logo a estrutura dos objetos Json vai ficar visível;
● Todos os dados podem ser editados;
E o Android???
● Todo o segredo é usar as classes FirebaseDatabase e DatabaseReference para
criar uma conexão com um path do bando de dados NOSql.
compile 'com.google.firebase:firebase-database:9.0.2'
FirebaseDatabase refCurrent = FirebaseDatabase.getInstance();
DatabaseReference myRef = refCurrent.getReference("tarefas");
compile 'com.google.firebase:firebase-database:9.0.2'
Pesquisa de Dados e Realtime Database
● As pesquisas de dados são possíveis com métodos que simulam boa parte das
consultas sql: queries, order by, first, limit, dentre outros;
● Na query ou na referência, temos listeners que funcionam realtime;
Query query = myRef.orderByChild("termino");
query.addValueEventListener(new ValueEventListener() {
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snap : dataSnapshot.getChildren()){
if (Integer.parseInt(snap.getKey()) > key){
key = Integer.parseInt(snap.getKey());
}
Task task = snap.getValue(Task.class);
}
}
public void onCancelled(DatabaseError databaseError) { }
}
Novos Dados
● Cria-se um novo filho na referência pai;
● Configuramos um valor para este filho que, pode ser a instância de uma classe
que espelha os objetos do JSON no banco de dados;
Task task = new Task();
task.nome = "Outra tarefa";
task.iniciada = false;
task.local = "Home";
task.termino = 22334455;
task.descricao = "Somente outra tarefa";
myRef.child("" + ++key).setValue(task);
Alteração de Dados
● Basta setar o valor de uma referência. Como nosso listener atua 100% do tempo
a própria interface da aplicação será atualizada;
…
tasks.get(position).termino = System.currentTimeMillis();
DatabaseReference refItem = refCurrent.getReference("tarefas/" + (position + 1));
refItem.setValue(tasks.get(position));
...
});
Remover Dados
● Basta configurar o valor de um filho para null;
● Ou ainda, de uma forma mais elegante, chamar o método removeValue
diretamente em uma referência;
…
DatabaseReference refItem = refCurrent.getReference("tarefas/" + (position + 1));
refItem.removeValue();
...
});
Conclusão
● O que é mesmo SQLiteOpenHelper;
● Opções rápidas e mais próximas ao código Java;
● Baixo custo e/ou grátis;
Perguntas
● Obrigado GDG;
● Obrigado IFSUL;
● Obrigado professor Élder Bernardi;
● Obrigado a todos!!!

More Related Content

What's hot

Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
 
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
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCLuiz Ricardo Silva
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidRicardo Longa
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'C. Augusto Proiete
 
Introdução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slidesIntrodução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slidesDerek Willian Stavis
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...iMasters
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)Fabrício Catae
 

What's hot (18)

Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Apache Wicket
Apache WicketApache Wicket
Apache Wicket
 
Python e bancos NoSQL
Python e bancos NoSQLPython e bancos NoSQL
Python e bancos NoSQL
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
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
 
#5 CRUD no MongoDB
#5   CRUD  no MongoDB#5   CRUD  no MongoDB
#5 CRUD no MongoDB
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBC
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento android
 
Aula android 04
Aula android 04Aula android 04
Aula android 04
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'
 
Introdução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slidesIntrodução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slides
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
Migrando para o PHP 5
Migrando para o PHP 5Migrando para o PHP 5
Migrando para o PHP 5
 
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Testes integrados automatizados
Testes integrados automatizadosTestes integrados automatizados
Testes integrados automatizados
 

Viewers also liked

Intro Multimedia
Intro MultimediaIntro Multimedia
Intro Multimediadribas
 
Introdução à Multimídia
Introdução à Multimídia Introdução à Multimídia
Introdução à Multimídia Windson Viana
 
Uma introdução ao multimédia: conceitos básicos
Uma introdução ao multimédia: conceitos básicosUma introdução ao multimédia: conceitos básicos
Uma introdução ao multimédia: conceitos básicosLuis Borges Gouveia
 
Aplicações Android Real-Time com Firebase
Aplicações Android Real-Time com FirebaseAplicações Android Real-Time com Firebase
Aplicações Android Real-Time com FirebaseYgor César
 
Técnico de Multimédia - Panfleto
Técnico de Multimédia - PanfletoTécnico de Multimédia - Panfleto
Técnico de Multimédia - Panfletoescolaprofissionalsm
 
Acesso ensino superior
Acesso ensino superiorAcesso ensino superior
Acesso ensino superiormmcoelho
 
Conceitos de multimédia
Conceitos de multimédiaConceitos de multimédia
Conceitos de multimédia12anogolega
 
Cálculo médias
Cálculo médiasCálculo médias
Cálculo médiasMyzer
 
Media Lab 1 aula Teórica 01
Media Lab 1 aula Teórica 01Media Lab 1 aula Teórica 01
Media Lab 1 aula Teórica 01Domingos Andrade
 
Desvendando a Plataforma de Serviços Windows Azure
Desvendando a Plataforma de Serviços Windows AzureDesvendando a Plataforma de Serviços Windows Azure
Desvendando a Plataforma de Serviços Windows AzureLucasRomao
 
Introdução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows AzureIntrodução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows AzureGiovanni Bassi
 
AAB308 - Cloud Computing Windows Azure - wcamb.pdf
AAB308 - Cloud Computing Windows Azure - wcamb.pdfAAB308 - Cloud Computing Windows Azure - wcamb.pdf
AAB308 - Cloud Computing Windows Azure - wcamb.pdfMicrosoft Brasil
 
Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Leandro Silva
 

Viewers also liked (20)

Intro Multimedia
Intro MultimediaIntro Multimedia
Intro Multimedia
 
Introdução à Multimídia
Introdução à Multimídia Introdução à Multimídia
Introdução à Multimídia
 
Multimédia powerpoint
Multimédia powerpointMultimédia powerpoint
Multimédia powerpoint
 
Uma introdução ao multimédia: conceitos básicos
Uma introdução ao multimédia: conceitos básicosUma introdução ao multimédia: conceitos básicos
Uma introdução ao multimédia: conceitos básicos
 
Aplicações Android Real-Time com Firebase
Aplicações Android Real-Time com FirebaseAplicações Android Real-Time com Firebase
Aplicações Android Real-Time com Firebase
 
Técnico de Multimédia - Panfleto
Técnico de Multimédia - PanfletoTécnico de Multimédia - Panfleto
Técnico de Multimédia - Panfleto
 
Guiao patricia leite
Guiao patricia leiteGuiao patricia leite
Guiao patricia leite
 
149
149149
149
 
Acesso ensino superior
Acesso ensino superiorAcesso ensino superior
Acesso ensino superior
 
Conceitos de multimédia
Conceitos de multimédiaConceitos de multimédia
Conceitos de multimédia
 
Cálculo médias
Cálculo médiasCálculo médias
Cálculo médias
 
Alguns conceitos web
Alguns conceitos webAlguns conceitos web
Alguns conceitos web
 
Acesso ensino superior
Acesso ensino superiorAcesso ensino superior
Acesso ensino superior
 
Media Lab 1 aula Teórica 01
Media Lab 1 aula Teórica 01Media Lab 1 aula Teórica 01
Media Lab 1 aula Teórica 01
 
Desvendando a Plataforma de Serviços Windows Azure
Desvendando a Plataforma de Serviços Windows AzureDesvendando a Plataforma de Serviços Windows Azure
Desvendando a Plataforma de Serviços Windows Azure
 
A plataforma Azure da Microsoft
A plataforma Azure da MicrosoftA plataforma Azure da Microsoft
A plataforma Azure da Microsoft
 
Introdução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows AzureIntrodução à computação na nuvem e Windows Azure
Introdução à computação na nuvem e Windows Azure
 
Multimidia (introdução)
Multimidia (introdução)Multimidia (introdução)
Multimidia (introdução)
 
AAB308 - Cloud Computing Windows Azure - wcamb.pdf
AAB308 - Cloud Computing Windows Azure - wcamb.pdfAAB308 - Cloud Computing Windows Azure - wcamb.pdf
AAB308 - Cloud Computing Windows Azure - wcamb.pdf
 
Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012
 

Similar to TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no Android

TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?Rafael Benevides
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-androidAlberto Souza
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaChrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaJoselito Nascimento
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Erisvaldo Junior
 
Utilizando GeoTools para Manipulação de Dados Geográficos
Utilizando GeoTools para Manipulação de Dados GeográficosUtilizando GeoTools para Manipulação de Dados Geográficos
Utilizando GeoTools para Manipulação de Dados Geográficospcollares
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
Tornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSTornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSMatheus Donizete
 

Similar to TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no Android (20)

Android Firebase
Android FirebaseAndroid Firebase
Android Firebase
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
Android + firebase
Android + firebaseAndroid + firebase
Android + firebase
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Mobileconf dicas-android
Mobileconf dicas-androidMobileconf dicas-android
Mobileconf dicas-android
 
6 curso-titanium-dados
6 curso-titanium-dados6 curso-titanium-dados
6 curso-titanium-dados
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaChrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
 
Java e Cloud Computing
Java e Cloud ComputingJava e Cloud Computing
Java e Cloud Computing
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Implementação de
Implementação de Implementação de
Implementação de
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5Desenvolvimento de Apps e Games para Android - Parte 5
Desenvolvimento de Apps e Games para Android - Parte 5
 
Utilizando GeoTools para Manipulação de Dados Geográficos
Utilizando GeoTools para Manipulação de Dados GeográficosUtilizando GeoTools para Manipulação de Dados Geográficos
Utilizando GeoTools para Manipulação de Dados Geográficos
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Acessando banco de dados remoto com android
Acessando banco de dados remoto com android Acessando banco de dados remoto com android
Acessando banco de dados remoto com android
 
Tornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JSTornando as coisas mais simples com Azure Functions e Node.JS
Tornando as coisas mais simples com Azure Functions e Node.JS
 
Java no Google App Engine - TDC2011
Java no Google App Engine - TDC2011Java no Google App Engine - TDC2011
Java no Google App Engine - TDC2011
 
Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0
 

More from tdc-globalcode

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadetdc-globalcode
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...tdc-globalcode
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucessotdc-globalcode
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPAtdc-globalcode
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinotdc-globalcode
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...tdc-globalcode
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicestdc-globalcode
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publicatdc-globalcode
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#tdc-globalcode
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocustdc-globalcode
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?tdc-globalcode
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golangtdc-globalcode
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QAtdc-globalcode
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciatdc-globalcode
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Servicetdc-globalcode
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETtdc-globalcode
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8tdc-globalcode
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...tdc-globalcode
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#tdc-globalcode
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Coretdc-globalcode
 

More from tdc-globalcode (20)

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devices
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocus
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
 

Recently uploaded

matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecniCleidianeCarvalhoPer
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMHELENO FAVACHO
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxLuizHenriquedeAlmeid6
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptssuser2b53fe
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxedelon1
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Ilda Bicacro
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfmaurocesarpaesalmeid
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaHELENO FAVACHO
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.Mary Alvarenga
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfRavenaSales1
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 

Recently uploaded (20)

matematica aula didatica prática e tecni
matematica aula didatica prática e tecnimatematica aula didatica prática e tecni
matematica aula didatica prática e tecni
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptxSlides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
Slides Lição 6, CPAD, As Nossas Armas Espirituais, 2Tr24.pptx
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
 
Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!Rota das Ribeiras Camp, Projeto Nós Propomos!
Rota das Ribeiras Camp, Projeto Nós Propomos!
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
Atividade - Letra da música Esperando na Janela.
Atividade -  Letra da música Esperando na Janela.Atividade -  Letra da música Esperando na Janela.
Atividade - Letra da música Esperando na Janela.
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 

TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no Android

  • 1. Banco de Dados no Mobile: Realm e Firebase Ricardo da Silva Ogliari GDG
  • 2. Um Pouco Sobre Mim ● Bacharel em Ciência da Computação; ● Especialista em Web - Inovacão e Tecnologia; ● MBA: Desenvolvimento de Jogos e Apps Mobile; ● Co-autor do Livro: Android do Básico ao Avançado - Ciência Moderna; ● Mobile Magazine; ● Desenvolvedor Android Bikoo/BovControl; ● Professor Especialização Senac e UPF. Professor Graduação UPF; ● Mais de 310 publicações; ● Fundador Things Hacker Team; ● 10 Nomes Open-Hardware 2013 - Revista iMasters;
  • 4. Introdução ● Uso de Banco de Dados Relacional - SQLite; ● API padrão do Android - Presente desde o Android 1.0; ● Código pesado, principalmente para novatos na plataforma ou oriundos de concorrentes, como iOS e wPhone; ● Só uma olhadinha rápida: ● https://developer.android.com/training/basics/data-storage/databases.html?hl= pt-br
  • 6. Realm ● Promete ser mais rápido que qualquer outra solução de ORM; ● Promete ser mais rápido que o SQLite puro; ● Mais simples e Mais rápido; ● Suporte para: ○ Java/Android ○ Objective-C; ○ Swift; ○ Xamarim; ○ React Native;
  • 7. Instalação - Pré-Requisitos ● Não suporta Java a não ser no Android. Neste momento. ● Android Studio >= 1.5.1. ● Versão do JDK >= 7. ● Android Api Level 9 ou superior (Android 2.3 Gingerbread).
  • 8. Configuração da Biblioteca ● Gradle a nível de projeto: buildscript { repositories { jcenter() } dependencies { classpath "io.realm:realm-gradle-plugin:<versao>" } }
  • 9. Configuração da Biblioteca ● Gradle a nível de módulo: apply plugin: 'realm-android'
  • 10. Modelo De Dados ● Uma simples classe que herda de RealmObject; ● Anotação para detalhes importantes de um banco de dados relacional, como o @PrimeryKey para chave primária; ● Documentação detalha outras anotações e tipos de dados: https://realm.io/docs/java
  • 11. Modelo De Dados public class Task extends RealmObject{ @PrimaryKey public String nome; public String descricao; public long termino; public String local; public boolean iniciada; @Override public String toString() { Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(termino); int dia = cal.get(Calendar.DAY_OF_MONTH); ... return "Nome: " + nome + "nDescrição: " + descricao + "nTérmino: " + (dia < 10 ? "0" + dia : "" + dia) + "/" + …); } }
  • 12. RealmConfiguration e Realm ● Necessária a criação de uma configuração para o Realm (Migração, Encriptação); ● Posteriormente cria-se a própria instância de Realm (Trabalha diretamente sobre os dados); ● Indicado usar em uma classe que estende de Application; public class CoreApplication extends Application{ public Realm realm; @Override public void onCreate() { super.onCreate(); RealmConfiguration realmConfig = new RealmConfiguration.Builder(this).deleteRealmIfMigrationNeeded().build(); Realm.setDefaultConfiguration(realmConfig); realm = Realm.getDefaultInstance(); } }
  • 13. Pesquisando Dados ● A classe Realm possui o método where que define o alvo das pesquisas; ● Depois, nos traz uma infinidade de métodos que espelham grande parte das pesquisas com SQL; ● Métodos auxiliares do SQL como count e average também estão presentes; ● Perceba o uso do método Assíncrono. O changeListener recebe o resultado da pesquisa. @Override protected void onCreate(Bundle savedInstanceState) { ... RealmResults<Task> result = ((CoreApplication)getApplication()).realm.where(Task.class).findAllAsync(); result.addChangeListener(callback); }
  • 14. Pesquisando Dados ● O Listener possui um único método a ser sobrescrito; ● O RealResults<Task> se usado no mesmo contexto da instância de Realm, mantém o listener ativo e registra qualquer mudança nos dados. ● O RealmResults também precisa ser único para manter o callback para futuras atualizações. ● Método sort para ordenação dos resultados; public static RealmResults<Task> results; private RealmChangeListener callback = new RealmChangeListener() { public void onChange(Object element) { results = (RealmResults<Task>) element; results = results.sort("termino", Sort.ASCENDING); listTasks.setAdapter(new ArrayAdapter<Task>( MainActivity.this, android.R.layout.simple_list_item_1, results ) ); } };
  • 15. Excluindo ● Usando a mesma instância de Realm da Application; ● Método executeTransaction é síncrono; ● Opção de trabalho assíncrono. Porém, neste caso obrigatoriamente, precisamos usar a opção síncrona. ● Na própria instância RealmObject é possível chamar deleteFromRealm. //só pode ser feito da mesma thread onde o objeto foi criado ((CoreApplication)getApplication()).realm.executeTransaction(new Realm.Transaction() { @Override public void execute(Realm realm) { task.deleteFromRealm(); } }); //results.deleteFirstFromRealm(); //results.deleteLastFromRealm();
  • 16. Salvar Dados ● Executamos uma tarefa assíncrona; ● A assinatura do método recebe a implementação de um método de sucesso e de erro; Task result = ((CoreApplication)getApplication()).realm.where(Task.class).equalTo("nome", key).findFirst(); saveTaskNome.setText(result.nome); … ((CoreApplication)getApplication()).realm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm bgRealm) { Task task = new Task(); task.nome = saveTaskNome.getText().toString(); ... bgRealm.copyToRealmOrUpdate(task); } }, new Realm.Transaction.OnSuccess() { public void onSuccess() {} }, new Realm.Transaction.OnError() { public void onError(Throwable error) {} });
  • 18. O que é? ● Um set de ferramentas que auxiliam e agilizam o processo de desenvolvimento de aplicativos móveis;
  • 19. Detalhes ● Android; ● Web; ● iOS; ● Alguns serviços gratuitos, alguns pagos e, também tem serviços com o modelo de cotas; ● Pré-Requisitos para Android: ○ Android 2.3 ou superior; ○ Google Play Services 9.0.2 ou superior; ○ O Google Play Services SDK; ○ Android Studio 1.5 ou Superior; ○ Um projeto Android Studio e seu package name;
  • 20. Configuração no Android - Passo 1 ● Acessar o console do Firebase: https://console.firebase.google.com.
  • 21. Configuração no Android - Passo 2 ● Criar o novo Projeto.
  • 22. Configuração no Android - Passo 2 ● Dashboard do projeto:
  • 23. Configuração no Android - Passo 3.1 ● Adicionar o Firebase ao Projeto Android:
  • 24. Configuração no Android - Passo 3.2 ● Adicionar o Firebase ao Projeto Android:
  • 26. Pronto! ● Se essa tela apareceu, está tudo certo e o projeto Firebase adicionado no projeto Android!!!!
  • 27. Base de Dados ● Base de dados NOSQL. Tudo é JSON.
  • 28. Base de Dados ● Para inicializar a base de dados podemos gerar um JSON; ● Minha dica: Json Generator: http://www.json-generator.com/;
  • 29. Base de Dados ● O Json Generator permite o download do arquivo .json; ● No console do Firebase apenas importe o arquivo:
  • 30. Base de Dados ● Logo a estrutura dos objetos Json vai ficar visível; ● Todos os dados podem ser editados;
  • 31. E o Android??? ● Todo o segredo é usar as classes FirebaseDatabase e DatabaseReference para criar uma conexão com um path do bando de dados NOSql. compile 'com.google.firebase:firebase-database:9.0.2' FirebaseDatabase refCurrent = FirebaseDatabase.getInstance(); DatabaseReference myRef = refCurrent.getReference("tarefas"); compile 'com.google.firebase:firebase-database:9.0.2'
  • 32. Pesquisa de Dados e Realtime Database ● As pesquisas de dados são possíveis com métodos que simulam boa parte das consultas sql: queries, order by, first, limit, dentre outros; ● Na query ou na referência, temos listeners que funcionam realtime; Query query = myRef.orderByChild("termino"); query.addValueEventListener(new ValueEventListener() { public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot snap : dataSnapshot.getChildren()){ if (Integer.parseInt(snap.getKey()) > key){ key = Integer.parseInt(snap.getKey()); } Task task = snap.getValue(Task.class); } } public void onCancelled(DatabaseError databaseError) { } }
  • 33. Novos Dados ● Cria-se um novo filho na referência pai; ● Configuramos um valor para este filho que, pode ser a instância de uma classe que espelha os objetos do JSON no banco de dados; Task task = new Task(); task.nome = "Outra tarefa"; task.iniciada = false; task.local = "Home"; task.termino = 22334455; task.descricao = "Somente outra tarefa"; myRef.child("" + ++key).setValue(task);
  • 34. Alteração de Dados ● Basta setar o valor de uma referência. Como nosso listener atua 100% do tempo a própria interface da aplicação será atualizada; … tasks.get(position).termino = System.currentTimeMillis(); DatabaseReference refItem = refCurrent.getReference("tarefas/" + (position + 1)); refItem.setValue(tasks.get(position)); ... });
  • 35. Remover Dados ● Basta configurar o valor de um filho para null; ● Ou ainda, de uma forma mais elegante, chamar o método removeValue diretamente em uma referência; … DatabaseReference refItem = refCurrent.getReference("tarefas/" + (position + 1)); refItem.removeValue(); ... });
  • 36. Conclusão ● O que é mesmo SQLiteOpenHelper; ● Opções rápidas e mais próximas ao código Java; ● Baixo custo e/ou grátis;
  • 37. Perguntas ● Obrigado GDG; ● Obrigado IFSUL; ● Obrigado professor Élder Bernardi; ● Obrigado a todos!!!