SlideShare a Scribd company logo
1 of 113
Download to read offline
OU COMO
PROGRAMAÇÃO FUNCIONAL É UMA ÓTIMA FERRAMENTA PARA CONTROLE
DE COMPLEXIDADE.
PROGRAMAS E FUNÇÕES
SOBRE
PENSANDO EM CORRETUDE,
Pessoas cometem erros
Programadores são pessoas
∴ Programadores cometem erros
Ferramentas e linguagens importam;
Ajudam a expressar, abstrair e construir.
Arthur Xavier
Estudante de Ciência da Computação;
Apaixonado por programação funcional;
Membro ativo da comunidade FP;
Desenvolvendo com Phil Freeman uma formalização
de interfaces de usuário declarativas com Comonads;
OU COMO
PROGRAMAÇÃO FUNCIONAL É UMA ÓTIMA FERRAMENTA PARA CONTROLE
DE COMPLEXIDADE.
PROGRAMAS E FUNÇÕES
SOBRE
PENSANDO EM ABSTRAÇÃO,
Outline
Por que programação funcional;
Abstrações funcionais;
Complexidade sem dificuldade:
1. Monóides;
2. Mônadas.
Corretude & Abstração
Corretude?
comando1();
comando2(); // mudança de estado
variável = comando3(); // estado privado
if (variável.atributo)
exceção!
envia_email(); // mudança de estado
lança_míssil();
return variável;
Como garantir corretude dessa forma?
Linguagens convencionais
Semântica sequencial de transições de estado;
Divisão entre mundo das expressões vs. comandos;
Dificuldade de combinar programas;
Ausência de propriedades matemáticas.
Máquina de Turing vs. Cálculo-λ
Abstração?
Valores; (imutáveis)
Funções; (puras)
Composição.
Funções de ordem superior!
Funções de ordem superior
Versatilidade;
Expressividade;
Poder de abstração;
// users = usernames.map(getAccount)
users.map(numberOfPosts).reduce(maximum, 0)
=
users.reduce(maximum ∘ numberOfPosts)
// users = map(usernames, getAccount)
reduce(maximum, 0, map(numberOfPosts, users))
=
reduce(maximum ∘ numberOfPosts, 0, users)
HASKELL
-- users = map usernames getAccount
reduce maximum 0 (map numberOfPosts users)
=
reduce (maximum . numberOfPosts) 0 users
Transparência referencial ⇒ raciocínio equacional.
Separação entre dados e comportamento.
Composição de funções ⇒ composição de programas.
Corretude ⟺ Abstração
Corretude por construção.
~ Abstração ~
Matemática!
Álgebra abstrata & Teoria de categorias
MONÓIDES
Conjunto S com uma operação binária •, tal que
1. ∀a,b ∈ S : a•b ∈ S. (fechamento)
2. ∀a,b,c ∈ S : (a•b)•c = a•(b•c). (associatividade)
3. ∃e ∈ S : ∀a ∈ S : e•a = a•e = a. (identidade)
Acumulador com “elemento neutro”;
(a + b) + c = a + (b + c).
a + 0 = 0 + a = a.
(a × b) × c = a × (b × c).
a × 1 = 1 × a = a.
max(max(a, b), c) = max(a, max(b, c)).
max(a, 0) = max(0, a) = a. (a > 0)
Monóides são ubíquos.
Yorgey, B. A. (2012). Monoids: theme and variations (functional pearl).
connectionBuilder
.withHost("myhost.com")
.withRemote("remote.com")
.withAuth(PASSWORD)
.build()
recipe =
withHost("myhost.com")
+ withRemote("remote.com")
+ withAuth(PASSWORD)
build(recipe)
Mas e daí?
O que isso traz? O que isso abstrai?
Dividir para conquistar.
Paralelismo & Incrementalidade
(a•b)•c
=
((a1
•a2
•a3
)•(b1
•b2
))•(c1
•c2
)
=
(((a11
•a12
)•a2
•(a31
•a32
• …))•(b1
•b2
))•(c1
•(c11
•c12
• …))
HASKELL
class Monoid s where
(<>) :: s -> s -> s
mempty :: s
Mas e as leis?
HASKELL
(a <> b) <> c ≡ a <> (b <> c)
mempty <> a ≡ a
a <> mempty ≡ a
Não tem como garantir.
¯_(ツ)_/¯
HASKELL
data Add = Add Int
instance Monoid Add where
Add a <> Add b = Add (a + b)
mempty = Add 0
…
data Mult = Mult Int
instance Monoid Mult where
Mult a <> Mult b = Mult (a * b)
mempty = Mult 1
HASKELL
data Add a = Add a
instance Num a => Monoid (Add a) where
Add a <> Add b = Add (a + b)
mempty = Add 0
…
data Mult a = Mult a
instance Num a => Monoid (Mult a) where
Mult a <> Mult b = Mult (a * b)
mempty = Mult 1
HASKELL
instance (Monoid a, Monoid b) => Monoid (a, b) where
(a1, b1) <> (a2, b2) = (a1 <> a2, b1 <> b2)
mempty = (mempty, mempty)
HASKELL
data Max a = Max a
instance Ord a => Monoid (Max a) where
Max a <> Max b = Max (if a < b then a else b)
mempty = Max ??
HASKELL
data Max a = Max a
instance (Ord a, Bounded a) => Monoid (Max a) where
Max a <> Max b = Max (if a < b then a else b)
mempty = Max minBound
HASKELL
foldMap :: Monoid m => (a -> m) -> [a] -> m
foldMap f [] = mempty
foldMap f (a:as) = f a <> foldMap f as
HASKELL
foldr maximum 0 (map numberOfPosts users)
=
foldr (maximum . numberOfPosts) 0 users
≅
foldMap (Max . numberOfPosts) users
HASKELL
> foldMap (Max . numberOfPosts) [user1, user2, …]
Max 10
> foldMap (Max . numberOfPosts) []
Max (-9223372036854775808)
HASKELL
data Maybe a = Nothing | Just a
instance Monoid a => Monoid (Maybe a) where …
…
> foldMap (Just . Max . numberOfPosts) []
Nothing
Exemplo: builder
HASKELL
data Builder a = Builder (a -> a)
instance Monoid (Builder a) where
Builder f <> Builder g = Builder (f . g)
mempty = Builder id
build :: a -> Builder a -> a
build def (Builder builder) = builder def
HASKELL
data Connection = Connection
{ host :: String
, auth :: Authentication
, …
}
withHost :: String -> Builder Connection
withHost host = Builder (conn -> conn { host = host })
…
buildConnection :: Builder Connection -> Connection
buildConnection = build defaultConnection
where
defaultConnection = Connection { … }
HASKELL
conn :: Connection
conn = buildConnection recipe
where
recipe =
withHost "myhost.com"
<> withRemote "remote.com"
<> withAuth Password
Disjunção de predicados;
Conjunção de predicados;
Conjuntos com união;
Composição de opções;
Combinação de regras;
Interseção de formas bidimensionais;
Funções que retornam monóides;
Combinação de máquinas de estado;
MÔNADAS
Pra quê?
Exemplo: logging
HASKELL
add1 :: Int -> (Int, String)
add1 x = (x + 1, "+1")
mul3 :: Int -> (Int, String)
mul3 x = (x * 3, "*3")
-- deseja-se
add1 30 ?? mul3 ?? add1 = (94, "+1*3+1")
-- mas o que é (??)
HASKELL
add1 :: Int -> (Int, String)
add1 x = (x + 1, "+1")
mul3 :: Int -> (Int, String)
mul3 x = (x * 3, "*3")
-- ou ainda
do
x <- add1 30
y <- mul3 x
add1 y
HASKELL
add1 :: Int -> (Int, String)
add1 x = (x + 1, "+1")
mul3 :: Int -> (Int, String)
mul3 x = (x * 3, "*3")
-- deseja-se
add1 30 ?? mul3 ?? add1 = (94, "+1*3+1")
-- mas o que é (??)
HASKELL
(??) :: (Int, String) -> (Int -> (Int, String)) -> (Int, String)
Produção de contexto na saída;
Impureza na saída;
Sequencialidade.
Tipo m com duas operações pure e bind
pure :: a -> m a
bind :: a -> (a -> m b) -> m b
(>>=) = bind
HASKELL
(m >>= f) >>= g ≡ m >>= (x -> f x >>= g)
pure x >>= f ≡ f x
m >>= return ≡ m
HASKELL
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
pure :: a -> m a
HASKELL
(>=>) :: (a -> m b) -> (b -> m c) -> (a -> m c)
f >=> g = (f x) >>= g
HASKELL
(f >=> g) >=> h ≡ f >=> (g >=> h)
pure >=> f ≡ f
f >=> pure ≡ f
HASKELL
(a <> b) <> c ≡ a <> (b <> c)
mempty <> a ≡ a
a <> mempty ≡ a
“A monad is just a monoid in the category of endofunctors,
what’s the problem?”
Writer: logging
a -> (b, m)
Writer: logging
a -> (b, m)Monoid m =>
HASKELL
data Writer a = Writer (a, String)
instance Monad Writer where
pure a = Writer (a, "")
Writer (a, s) >>= f = Writer (b, s ++ s2)
where
Writer (b, s2) = f a
HASKELL
data Writer s a = Writer (a, s)
instance Monoid s => Monad (Writer s) where
pure a = Writer (a, mempty)
Writer (a, s) >>= f = Writer (b, s <> s2)
where
Writer (b, s2) = f a
HASKELL
add1 :: Int -> Writer String Int
add1 x = Writer (x + 1, "+1")
mul3 :: Int -> Writer String Int
mul3 x = Writer (x * 3, "*3")
add1 30 >>= mul3 >>= add1 = (94, "+1*3+1")
HASKELL
add1 :: Int -> Writer String Int
add1 x = Writer (x + 1, "+1")
mul3 :: Int -> Writer String Int
mul3 x = Writer (x * 3, "*3")
do
x <- add1 30
y <- mul3 x
add1 y
HASKELL
tell :: Monoid s => s -> Writer s ()
tell s = Writer ((), s)
add1 x = do { tell "+1"; pure (x + 1) }
mul3 x = do { tell "*3"; pure (x * 3) }
do
x <- add1 30
y <- mul3 x
add1 y
State: estado
a -> (s -> (b, s))
≅
(a, s) -> (b, s)
HASKELL
data State s a = State (s -> (a, s))
instance Monad (State s) where …
put :: s -> State s ()
put s = _ -> ((), s)
get :: State s s
get = s -> (s, s)
modify :: (s -> s) -> State s ()
modify f = s -> ((), f s)
HASKELL
put :: s -> State s ()
get :: State s s
modify :: (s -> s) -> State s ()
…
add1 x = do
modify (log -> log <> "+1")
pure (x + 1)
mul3 x = do
modify (log -> log <> "*3")
pure (x * 3)
HASKELL
do
x <- add1 30
y <- mul3 x
add1 y
do
x <- add1 30
y <- mul3 x
log <- get
add1 y
Maybe: falha
a -> Maybe b
HASKELL
data Maybe a = Nothing | Just a
instance Monad Maybe where …
head :: [a] -> Maybe a
…
tryGetLastPhoto username = do
user <- tryGetUser username
photos <- tryGetPhotos user
head photos
List: não-determinismo
a -> [b]
Reader: ambiente global
a -> (r -> b)
≅
(a, r) -> b
Cont: continuações
a -> ((b -> r) -> r)
≅
(b -> r) -> (a -> r)
Dist: cálculo de probabilidades
a -> [(b, Float)]
IO: efeitos colaterais
a -> (RealWorld -> (b, RealWorld))
≅
(a, RealWorld) -> (b, RealWorld)
EDSLs
Parser: parsing…
a -> (String -> [(b, String)])
≅
(a, String) -> [(b, String)]
HASKELL
data Parser a = Parser (String -> [(a, String)])
instance Monad Parser where …
char :: Parser Char
char = Parser f
where
f [] = []
f (c:cs) = [(c, cs)]
zero :: Parser a
zero = Parser (_ -> [])
Combinadores.
HASKELL
satisfy :: (Char -> Bool) -> Parser Char
satisfy pred = do
c <- char
if pred c then pure c else zero
alt :: Parser a -> Parser a -> Parser a
alt (Parser p) (Parser q) = Parser $ s ->
case p s of
[] -> q s
res -> res
some :: Parser a -> Parser [a]
some parser = -- one or many
HASKELL
digit :: Parser Char
digit = satisfy isDigit
number :: Parser Int
number = do
cs <- some digit
pure (read cs)
HASKELL
add :: Parser Int
add = do
a <- number
satisfy (== '+')
b <- number
pure (a + b)
sub :: Parser Int
sub = do
a <- number
satisfy (== '-')
b <- number
pure (a - b)
HASKELL
expression :: Parser Int
expression = alt add sub
parse (Parser f) = f
parse expression "10+4" = 14
parse expression "10-4" = 6
Computações & Algoritmos
Sequencialidade;
Do ponto de vista interno,
permitem efeitos colaterais;
Sequência de operações são efetuadas
e têm seus resultados combinados no final;
Mônadas abstraem programas!
Mais?
Funtores aplicativos;
Free monad;
Monad transformers;
Comônadas;
Lentes;
Categorias;
Contêineres indexados;
Derivadas;
λ
@arthurxavierx @arthur-xavier

More Related Content

What's hot

Imagem de uma função dado o objecto
Imagem de uma função dado o objectoImagem de uma função dado o objecto
Imagem de uma função dado o objectoPaulo Mutolo
 
Apresentação para notes masters paulo [1]
Apresentação para notes masters paulo [1]Apresentação para notes masters paulo [1]
Apresentação para notes masters paulo [1]dean dundas
 
Funçao quadratica-revisao 2
Funçao quadratica-revisao 2Funçao quadratica-revisao 2
Funçao quadratica-revisao 2Magda Damião
 
Funcoes trigonometricas senoides
Funcoes trigonometricas  senoidesFuncoes trigonometricas  senoides
Funcoes trigonometricas senoidescaalcampos
 
Funcoes trigonometricas.ppt
Funcoes trigonometricas.pptFuncoes trigonometricas.ppt
Funcoes trigonometricas.pptRodrigo Carvalho
 
QUESTÕES PUC-RIO - DEMONSTRAÇÃO DE FUNÇÃO BIJETORA
QUESTÕES PUC-RIO - DEMONSTRAÇÃO DE FUNÇÃO BIJETORAQUESTÕES PUC-RIO - DEMONSTRAÇÃO DE FUNÇÃO BIJETORA
QUESTÕES PUC-RIO - DEMONSTRAÇÃO DE FUNÇÃO BIJETORAAntonio Claudio Lage Buffara
 
Exercicios de funções composta 12
Exercicios de funções composta 12Exercicios de funções composta 12
Exercicios de funções composta 12euclidesgarcia
 
Gráfico (seno e cosseno)
Gráfico (seno e cosseno)Gráfico (seno e cosseno)
Gráfico (seno e cosseno)neliosnahum
 
TDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação FuncionalTDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação Funcionaltdc-globalcode
 
A Função Seno
A Função SenoA Função Seno
A Função Senoguest9bcf
 
Função Seno
Função SenoFunção Seno
Função Senoguest9bcf
 

What's hot (20)

Imagem de uma função dado o objecto
Imagem de uma função dado o objectoImagem de uma função dado o objecto
Imagem de uma função dado o objecto
 
Apresentação para notes masters paulo [1]
Apresentação para notes masters paulo [1]Apresentação para notes masters paulo [1]
Apresentação para notes masters paulo [1]
 
Funçao quadratica-revisao 2
Funçao quadratica-revisao 2Funçao quadratica-revisao 2
Funçao quadratica-revisao 2
 
Funcoes trigonometricas senoides
Funcoes trigonometricas  senoidesFuncoes trigonometricas  senoides
Funcoes trigonometricas senoides
 
Trigonometria PARTE 2
Trigonometria PARTE 2Trigonometria PARTE 2
Trigonometria PARTE 2
 
Aula de-funcao
Aula de-funcaoAula de-funcao
Aula de-funcao
 
Funcoes trigonometricas.ppt
Funcoes trigonometricas.pptFuncoes trigonometricas.ppt
Funcoes trigonometricas.ppt
 
QUESTÕES PUC-RIO - DEMONSTRAÇÃO DE FUNÇÃO BIJETORA
QUESTÕES PUC-RIO - DEMONSTRAÇÃO DE FUNÇÃO BIJETORAQUESTÕES PUC-RIO - DEMONSTRAÇÃO DE FUNÇÃO BIJETORA
QUESTÕES PUC-RIO - DEMONSTRAÇÃO DE FUNÇÃO BIJETORA
 
Translacao graficos
Translacao graficosTranslacao graficos
Translacao graficos
 
Lista m3
Lista m3Lista m3
Lista m3
 
Exercicios de funções composta 12
Exercicios de funções composta 12Exercicios de funções composta 12
Exercicios de funções composta 12
 
Td 4 matemática ii
Td 4   matemática ii Td 4   matemática ii
Td 4 matemática ii
 
Gráfico (seno e cosseno)
Gráfico (seno e cosseno)Gráfico (seno e cosseno)
Gráfico (seno e cosseno)
 
3 terceira_lista_de_exerc_cios_po2
3  terceira_lista_de_exerc_cios_po23  terceira_lista_de_exerc_cios_po2
3 terceira_lista_de_exerc_cios_po2
 
Destistificando o EXPLAIN
Destistificando o EXPLAIN Destistificando o EXPLAIN
Destistificando o EXPLAIN
 
TDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação FuncionalTDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação Funcional
 
A Função Seno
A Função SenoA Função Seno
A Função Seno
 
1 serie exercicios_logica
1 serie exercicios_logica1 serie exercicios_logica
1 serie exercicios_logica
 
Função Seno
Função SenoFunção Seno
Função Seno
 
Rec e54
Rec e54Rec e54
Rec e54
 

Similar to InterCon 2017 - Programação funcional no desenvolvimento de aplicações: pensando em corretude - Arthur Xavier

Haskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarHaskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarCRISLANIO MACEDO
 
20131025230302exerciciosderevisaofatoracao
20131025230302exerciciosderevisaofatoracao20131025230302exerciciosderevisaofatoracao
20131025230302exerciciosderevisaofatoracaoIony Menezes
 
Ita2009 3dia
Ita2009 3diaIta2009 3dia
Ita2009 3diacavip
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonDiogo Gomes
 
Equações e enequações modulares.
Equações e  enequações modulares.Equações e  enequações modulares.
Equações e enequações modulares.Noely Menezes
 
Introdução à Linguagem de programação Python
Introdução à Linguagem de programação PythonIntrodução à Linguagem de programação Python
Introdução à Linguagem de programação Pythondmmartins
 
Palestra python
Palestra pythonPalestra python
Palestra pythonRony Cruch
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoArthur Xavier
 
Caderno - Matemática II
Caderno - Matemática IICaderno - Matemática II
Caderno - Matemática IICadernos PPT
 
Introdução ao MATLAB
Introdução ao MATLABIntrodução ao MATLAB
Introdução ao MATLABCaioTelefonica
 
Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)Felipe Meganha
 
Derivadas Aplicações
Derivadas AplicaçõesDerivadas Aplicações
Derivadas AplicaçõesJones Fagundes
 

Similar to InterCon 2017 - Programação funcional no desenvolvimento de aplicações: pensando em corretude - Arthur Xavier (20)

Linguagem Go
Linguagem GoLinguagem Go
Linguagem Go
 
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarHaskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
 
Funções
FunçõesFunções
Funções
 
Funções parte i
Funções parte iFunções parte i
Funções parte i
 
Funcoes parte1
Funcoes parte1Funcoes parte1
Funcoes parte1
 
20131025230302exerciciosderevisaofatoracao
20131025230302exerciciosderevisaofatoracao20131025230302exerciciosderevisaofatoracao
20131025230302exerciciosderevisaofatoracao
 
Funcoes gaia
Funcoes gaiaFuncoes gaia
Funcoes gaia
 
Ita2009 3dia
Ita2009 3diaIta2009 3dia
Ita2009 3dia
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
Funcoes
FuncoesFuncoes
Funcoes
 
Equações e enequações modulares.
Equações e  enequações modulares.Equações e  enequações modulares.
Equações e enequações modulares.
 
Introdução à Linguagem de programação Python
Introdução à Linguagem de programação PythonIntrodução à Linguagem de programação Python
Introdução à Linguagem de programação Python
 
Palestra python
Palestra pythonPalestra python
Palestra python
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introdução
 
Caderno - Matemática II
Caderno - Matemática IICaderno - Matemática II
Caderno - Matemática II
 
Introdução ao MATLAB
Introdução ao MATLABIntrodução ao MATLAB
Introdução ao MATLAB
 
Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)
 
Derivadas Aplicações
Derivadas AplicaçõesDerivadas Aplicações
Derivadas Aplicações
 
Matemática – produtos notáveis 01 2013
Matemática – produtos notáveis 01   2013Matemática – produtos notáveis 01   2013
Matemática – produtos notáveis 01 2013
 
Matemática – produtos notáveis 01 2013
Matemática – produtos notáveis 01   2013Matemática – produtos notáveis 01   2013
Matemática – produtos notáveis 01 2013
 

More from iMasters

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroiMasters
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesiMasters
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesiMasters
 
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...iMasters
 
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesiMasters
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...iMasters
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsiMasters
 
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...iMasters
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudiMasters
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza LeiteiMasters
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesiMasters
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosiMasters
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeiMasters
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle MonteiroiMasters
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujoriMasters
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaiMasters
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiiMasters
 
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
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisiMasters
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoiMasters
 

More from iMasters (20)

O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani MonteiroO que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
 
Postgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio TellesPostgres: wanted, beloved or dreaded? - Fabio Telles
Postgres: wanted, beloved or dreaded? - Fabio Telles
 
Por que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen MoraesPor que minha query esta lenta? - Suellen Moraes
Por que minha query esta lenta? - Suellen Moraes
 
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
 
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalvesORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
 
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
 
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra MartinsArquitetando seus dados na prática para a LGPD - Alessandra Martins
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
 
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
 
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 Use MDD e faça as máquinas trabalharem para você - Andreza Leite Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
 
Entendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita BernardesEntendendo os porquês do seu servidor - Talita Bernardes
Entendendo os porquês do seu servidor - Talita Bernardes
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana Arnos
 
Dicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato GroffeDicas para uma maior performance em APIs REST - Renato Groffe
Dicas para uma maior performance em APIs REST - Renato Groffe
 
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
 
Quem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio MaujorQuem se importa com acessibilidade Web? - Mauricio Maujor
Quem se importa com acessibilidade Web? - Mauricio Maujor
 
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da SilvaService Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
 
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto PascuttiErros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
 
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...
 
Construindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina KarklisConstruindo aplicações mais confiantes - Carolina Karklis
Construindo aplicações mais confiantes - Carolina Karklis
 
Monitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe RegalgoMonitoramento de Aplicações - Felipe Regalgo
Monitoramento de Aplicações - Felipe Regalgo
 

Recently uploaded

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 

Recently uploaded (6)

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

InterCon 2017 - Programação funcional no desenvolvimento de aplicações: pensando em corretude - Arthur Xavier