Existem diversas arquiteturas no mundo Android hoje em dia, a mais vista entre elas é a MVVM que utiliza programação imperativa. Nessa palestra vamos falar sobre MVI e como criar uma arquitetura reative utilizando um fluxo unidirecional entre as ações do usuário e os diferentes estados apresentados na tela.
Aplicações Assíncronas no Android com Coroutines e JetpackNelson Glauber Leal
Para usufruir dos múltiplos núcleos existentes nos processadores dos smartphones atuais, podemos realizar chamadas assíncronas de modo a paralelizar o fluxo de execução da aplicação. Normalmente isso é feito por meio de threads e callbacks que acabam por adicionar uma complexidade ao código que pode comprometer sua leitura e manutenção. Nessa apresentação, veremos como utilizar a API de Coroutines do Kotlin em conjunto com diversas bibliotecas do Jetpack do Android de modo a implementar programação assíncrona forma simples e eficiente.
2. menggunakan tool, property, dan event pada vb.netAris Saputro
Modul ini membahas tentang tool, property, dan event pada Visual Basic .NET. Tool adalah komponen yang membentuk antarmuka pengguna aplikasi. Property adalah atribut objek yang nilainya dapat diubah. Event merupakan kejadian yang terjadi pada aplikasi akibat interaksi pengguna. Modul ini juga memberikan contoh latihan pembuatan aplikasi sederhana menggunakan tool, property, dan event.
Este documento describe los conceptos fundamentales del equilibrio mecánico, incluyendo las definiciones de equilibrio estático y cinético. Explica que un cuerpo está en equilibrio cuando la fuerza resultante es igual a cero y cuando el momento total es igual a cero. También define el momento de una fuerza como la fuerza multiplicada por su brazo de palanca y explica que para un equilibrio total, tanto la fuerza resultante como el momento total deben ser iguales a cero.
1) El documento describe el movimiento parabólico de un proyectil lanzado en dos dimensiones. 2) Explica que este movimiento puede analizarse como la combinación de un movimiento horizontal uniforme y uno vertical acelerado por la gravedad. 3) Proporciona fórmulas para calcular la posición, velocidad y aceleración del proyectil en función del tiempo y de las componentes horizontales y verticales de la velocidad inicial.
O documento discute arquitetura, manutenção e testes para aplicativos móveis em grande escala. Ele apresenta a arquitetura MVVM-C como uma alternativa melhor à arquitetura MVC da Apple para estruturar o código de forma mais segmentada e testável. Também recomenda dividir o aplicativo em frameworks dinâmicos para facilitar a manutenção e escalabilidade do código.
Aula 15 e 16 - Navegação - Activities e Fragments.pptx.pdfnosbisantos
Claro, aqui está uma descrição de 3000 caracteres sobre programação e linguagens de programação web I e web II:
A programação é uma habilidade fundamental no mundo digital de hoje, permitindo que os desenvolvedores criem aplicativos, websites e sistemas complexos que impulsionam a nossa vida cotidiana. No contexto da web, existem duas categorias principais de linguagens de programação: Web I e Web II, cada uma desempenhando um papel único na criação e no funcionamento de websites dinâmicos e interativos.
As linguagens de programação Web I são essenciais para a construção dos componentes básicos de um website estático ou dinâmico. HTML (Hypertext Markup Language) é a espinha dorsal da Web I, fornecendo a estrutura fundamental para a apresentação de conteúdo na internet. Com HTML, os desenvolvedores podem criar páginas web, definindo a estrutura, o layout e os elementos de texto, imagem e mídia. Junto com HTML, o CSS (Cascading Style Sheets) é utilizado para estilizar e formatar o conteúdo, adicionando cores, fontes, espaçamentos e efeitos visuais para tornar o website mais atrativo e fácil de usar. Além disso, a Web I também engloba linguagens como JavaScript, que é responsável por adicionar interatividade e dinamismo às páginas web, permitindo a criação de elementos como animações, formulários interativos e funcionalidades de manipulação de dados em tempo real.
Por outro lado, as linguagens de programação Web II são voltadas para o desenvolvimento de aplicativos web mais avançados e robustos, que exigem interações mais complexas e processamento de dados em larga escala. Entre as principais linguagens de programação Web II está o JavaScript, que, apesar de ser parte da Web I, desempenha um papel crucial nesta categoria. Com o avanço das tecnologias web, o JavaScript evoluiu significativamente, possibilitando o desenvolvimento de aplicativos web de página única (SPA) e frameworks de frontend como AngularJS, ReactJS e VueJS, que fornecem ferramentas poderosas para a criação de interfaces de usuário altamente responsivas e dinâmicas.
Além do JavaScript, outras linguagens de programação Web II incluem PHP, Python, Ruby e Java, que são frequentemente utilizadas no desenvolvimento do lado do servidor (backend) de aplicativos web. Essas linguagens fornecem estruturas e bibliotecas robustas para a construção de sistemas escaláveis, seguros e eficientes, gerenciando operações como autenticação de usuários, acesso a banco de dados, manipulação de dados e processamento de solicitações HTTP.
Em resumo, as linguagens de programação Web I e Web II desempenham papéis complementares na criação e no funcionamento de websites e aplicativos web modernos. Enquanto as linguagens de Web I fornecem os blocos de construção básicos e a interatividade inicial, as linguagens de Web II capacitam os desenvolvedores a criar experiências web avançadas, escaláveis e altamente funcionais, impulsionando a inovação e a evolução contínua da web como plataforma de comunicação e
Este documento discute eventos e validação de formulários em JavaScript. Ele explica eventos do mouse, teclado, objetos e formulários e fornece exercícios para praticar cada tópico. Também apresenta como validar campos de formulário para garantir que as informações estejam corretas.
Aplicações Assíncronas no Android com Coroutines e JetpackNelson Glauber Leal
Para usufruir dos múltiplos núcleos existentes nos processadores dos smartphones atuais, podemos realizar chamadas assíncronas de modo a paralelizar o fluxo de execução da aplicação. Normalmente isso é feito por meio de threads e callbacks que acabam por adicionar uma complexidade ao código que pode comprometer sua leitura e manutenção. Nessa apresentação, veremos como utilizar a API de Coroutines do Kotlin em conjunto com diversas bibliotecas do Jetpack do Android de modo a implementar programação assíncrona forma simples e eficiente.
2. menggunakan tool, property, dan event pada vb.netAris Saputro
Modul ini membahas tentang tool, property, dan event pada Visual Basic .NET. Tool adalah komponen yang membentuk antarmuka pengguna aplikasi. Property adalah atribut objek yang nilainya dapat diubah. Event merupakan kejadian yang terjadi pada aplikasi akibat interaksi pengguna. Modul ini juga memberikan contoh latihan pembuatan aplikasi sederhana menggunakan tool, property, dan event.
Este documento describe los conceptos fundamentales del equilibrio mecánico, incluyendo las definiciones de equilibrio estático y cinético. Explica que un cuerpo está en equilibrio cuando la fuerza resultante es igual a cero y cuando el momento total es igual a cero. También define el momento de una fuerza como la fuerza multiplicada por su brazo de palanca y explica que para un equilibrio total, tanto la fuerza resultante como el momento total deben ser iguales a cero.
1) El documento describe el movimiento parabólico de un proyectil lanzado en dos dimensiones. 2) Explica que este movimiento puede analizarse como la combinación de un movimiento horizontal uniforme y uno vertical acelerado por la gravedad. 3) Proporciona fórmulas para calcular la posición, velocidad y aceleración del proyectil en función del tiempo y de las componentes horizontales y verticales de la velocidad inicial.
O documento discute arquitetura, manutenção e testes para aplicativos móveis em grande escala. Ele apresenta a arquitetura MVVM-C como uma alternativa melhor à arquitetura MVC da Apple para estruturar o código de forma mais segmentada e testável. Também recomenda dividir o aplicativo em frameworks dinâmicos para facilitar a manutenção e escalabilidade do código.
Aula 15 e 16 - Navegação - Activities e Fragments.pptx.pdfnosbisantos
Claro, aqui está uma descrição de 3000 caracteres sobre programação e linguagens de programação web I e web II:
A programação é uma habilidade fundamental no mundo digital de hoje, permitindo que os desenvolvedores criem aplicativos, websites e sistemas complexos que impulsionam a nossa vida cotidiana. No contexto da web, existem duas categorias principais de linguagens de programação: Web I e Web II, cada uma desempenhando um papel único na criação e no funcionamento de websites dinâmicos e interativos.
As linguagens de programação Web I são essenciais para a construção dos componentes básicos de um website estático ou dinâmico. HTML (Hypertext Markup Language) é a espinha dorsal da Web I, fornecendo a estrutura fundamental para a apresentação de conteúdo na internet. Com HTML, os desenvolvedores podem criar páginas web, definindo a estrutura, o layout e os elementos de texto, imagem e mídia. Junto com HTML, o CSS (Cascading Style Sheets) é utilizado para estilizar e formatar o conteúdo, adicionando cores, fontes, espaçamentos e efeitos visuais para tornar o website mais atrativo e fácil de usar. Além disso, a Web I também engloba linguagens como JavaScript, que é responsável por adicionar interatividade e dinamismo às páginas web, permitindo a criação de elementos como animações, formulários interativos e funcionalidades de manipulação de dados em tempo real.
Por outro lado, as linguagens de programação Web II são voltadas para o desenvolvimento de aplicativos web mais avançados e robustos, que exigem interações mais complexas e processamento de dados em larga escala. Entre as principais linguagens de programação Web II está o JavaScript, que, apesar de ser parte da Web I, desempenha um papel crucial nesta categoria. Com o avanço das tecnologias web, o JavaScript evoluiu significativamente, possibilitando o desenvolvimento de aplicativos web de página única (SPA) e frameworks de frontend como AngularJS, ReactJS e VueJS, que fornecem ferramentas poderosas para a criação de interfaces de usuário altamente responsivas e dinâmicas.
Além do JavaScript, outras linguagens de programação Web II incluem PHP, Python, Ruby e Java, que são frequentemente utilizadas no desenvolvimento do lado do servidor (backend) de aplicativos web. Essas linguagens fornecem estruturas e bibliotecas robustas para a construção de sistemas escaláveis, seguros e eficientes, gerenciando operações como autenticação de usuários, acesso a banco de dados, manipulação de dados e processamento de solicitações HTTP.
Em resumo, as linguagens de programação Web I e Web II desempenham papéis complementares na criação e no funcionamento de websites e aplicativos web modernos. Enquanto as linguagens de Web I fornecem os blocos de construção básicos e a interatividade inicial, as linguagens de Web II capacitam os desenvolvedores a criar experiências web avançadas, escaláveis e altamente funcionais, impulsionando a inovação e a evolução contínua da web como plataforma de comunicação e
Este documento discute eventos e validação de formulários em JavaScript. Ele explica eventos do mouse, teclado, objetos e formulários e fornece exercícios para praticar cada tópico. Também apresenta como validar campos de formulário para garantir que as informações estejam corretas.
Kotlin é uma linguagem de programação multiplataforma que pode ser usada para desenvolvimento mobile. Apresenta características como código mais limpo e seguro contra erros nulos em comparação com Java. O documento descreve conceitos como sintaxe, classes, funções, loops e coleções em Kotlin e mostra exemplos de uso em Android.
Minicurso ministrado na semana academica de TSI (Tecnologia em Sistemas para Internet) na UTFPR de Guarapuava, mostrando a linguagem Kotlin desde a criaçao de variavel até testes unitarios com o framework Spek e avaliação da qualidade de codigo com Detekt.
Agradeço a UTFPR pela oportunidade e ao meu grande amigo Rafael R. Benetti por topar esta empreitada comigo
Este documento fornece informações sobre Loiane Groner, uma desenvolvedora especializada em Angular, JavaScript e programação reativa. Ela oferece treinamentos sobre esses tópicos e mantém um blog e perfis nas redes sociais para compartilhar conhecimento. O documento também apresenta conceitos-chave da programação reativa e como implementá-la usando Angular e a biblioteca NgRx.
O documento apresenta o framework Cairngorm para desenvolvimento de aplicações em Adobe Flex, descrevendo seus principais conceitos como Model-View-Controller (MVC), Fluxo de eventos, Commands e ModelLocator. Explica como reduzir classes utilizando dados no próprio CairngormEvent em vez de classes separadas.
O documento discute o conceito de mock objects para testes de software, descrevendo suas vantagens e como implementá-los. É apresentado um exemplo prático de uso de mock objects para testar uma classe de conversão de temperatura e são discutidos alguns frameworks populares para criação de mock objects em Java, como jMock e EasyMock.
O documento discute React, Flux e arquitetura de aplicações front-end. Aborda problemas atuais da web, como desempenho e complexidade do MVC, e como React e Flux podem ajudar a resolver esses problemas através de componentização, estado unidirecional e ciclo de vida de componentes.
O documento apresenta Gabriel Colombo e um workshop introdutório sobre o framework Vue.js. O workshop irá cobrir os principais conceitos e funcionalidades do Vue como reatividade, data-binding, diretivas, event handling, componentes e projeto prático de um e-mail client. O objetivo é mostrar porque o Vue é um framework popular, fácil de aprender e usar para criar interfaces reativas.
1) O documento discute o Domain-Driven Design (DDD), uma abordagem focada no domínio e na lógica de negócios.
2) As duas principais premissas do DDD são desenvolver um modelo que reflita o domínio e usar uma linguagem ubíqua compartilhada entre os especialistas de negócios e a equipe de desenvolvimento.
3) O DDD enfatiza a separação de camadas com base no domínio, utilizando conceitos como entidades, valores, agregações, serviços, fábricas e repositó
Este documento descreve o desenvolvimento de uma aplicação web para autenticação de usuários utilizando Firebase Authentication com Redux. Ele explica como configurar o Firebase, criar actions, reducers e componentes para implementar funcionalidades de cadastro, login e logout. Além disso, fornece detalhes sobre como conectar o Redux e React ao Firebase para gerenciar o estado da aplicação.
Projetos reativos com Angular, RxJS e Redux (ngRx)Loiane Groner
O documento resume uma apresentação sobre programação reativa com Angular, RxJS e Redux (ngRx). Apresenta conceitos como Observables, Promises, padrão Observer e como desenvolver funcionalidades reativas em Angular com forms, http, pipes e arquitetura escalável com ngrx/store. Inclui exemplos de uso de redux para gerenciamento de estado e integração com serviços HTTP.
O documento discute testes de integração em Java, mencionando tipos comuns como teste de unidade, integração e aceitação. Ele também cobre tópicos como comunicação com bancos de dados, populando dados de teste e ferramentas para auxiliar em testes automatizados como JPAHelper e DBUnitHelper.
Spring + Tapestry Um novo paradigma de desenvolvimento webelliando dias
O documento discute o framework Spring, incluindo sua organização, inversão de controle, integração com bancos de dados e frameworks web, transações declarativas, uso de mocks e projetos relacionados. O Spring é um container leve que facilita o desenvolvimento web, diminui código e integra com diversas tecnologias de forma portável e testável.
O documento apresenta os conceitos básicos de orientação a objetos em Java, incluindo classe, objeto, atributos, métodos, instanciação de objetos, referências, construtores e associação entre classes.
Introdução à análise orientada a objetos parte 1ariovaldodias
O documento apresenta os principais conceitos de análise orientada a objetos (AOO), incluindo classes, objetos, atributos, métodos, encapsulamento, herança e diagrama de classes. Também discute a evolução das classes ao longo do projeto e a importância do reuso em programação orientada a objetos.
Introdução à análise orientada a objetos parte 1ariovaldodias
O documento apresenta os principais conceitos de análise orientada a objetos (AOO), incluindo classes, objetos, atributos, métodos, encapsulamento, herança e diagrama de classes. Também discute a evolução das classes ao longo do projeto e a importância do reuso em programação orientada a objetos.
TDC - Introdução ao Actor Model com Microsoft OrleansFabio Gouw
O documento apresenta o framework Microsoft Orleans e o modelo de programação Actor. O Orleans permite a criação de aplicações distribuídas e stateful baseadas no modelo de atores, com características de elastibilidade, resiliência e resposta. O documento descreve os conceitos do modelo de atores, a arquitetura do Orleans e apresenta um exemplo prático com código.
Este documento fornece uma introdução à biblioteca jQuery:
1) jQuery é uma biblioteca JavaScript que facilita a manipulação de elementos, eventos e animações em páginas web.
2) A biblioteca pode ser incluída através de arquivos locais ou do Google.
3) jQuery permite selecionar elementos de várias formas e modificá-los facilmente.
O documento resume alguns padrões de projeto comumente usados na programação de jogos, como Command, Flyweight, Observer, Prototype, States e Singleton. Ele também discute brevemente outros padrões como Double Buffer, Game Loop, Update Method e Component e fornece referências adicionais sobre design de jogos.
Este documento apresenta os principais conceitos e funcionalidades da biblioteca jQuery, incluindo seletores, manipulação de CSS e elementos, requisições AJAX, entre outros tópicos, a fim de introduzir o leitor ao framework jQuery de forma prática através de exemplos e exercícios resolvidos.
O documento discute princípios de escrita de código limpo, incluindo a importância de nomes significativos, funções focadas em uma única tarefa, uso apropriado de comentários, e formatação de código para melhor legibilidade.
Em um mundo cada vez mais digital, a segurança da informação tornou-se essencial para proteger dados pessoais e empresariais contra ameaças cibernéticas. Nesta apresentação, abordaremos os principais conceitos e práticas de segurança digital, incluindo o reconhecimento de ameaças comuns, como malware e phishing, e a implementação de medidas de proteção e mitigação para vazamento de senhas.
Kotlin é uma linguagem de programação multiplataforma que pode ser usada para desenvolvimento mobile. Apresenta características como código mais limpo e seguro contra erros nulos em comparação com Java. O documento descreve conceitos como sintaxe, classes, funções, loops e coleções em Kotlin e mostra exemplos de uso em Android.
Minicurso ministrado na semana academica de TSI (Tecnologia em Sistemas para Internet) na UTFPR de Guarapuava, mostrando a linguagem Kotlin desde a criaçao de variavel até testes unitarios com o framework Spek e avaliação da qualidade de codigo com Detekt.
Agradeço a UTFPR pela oportunidade e ao meu grande amigo Rafael R. Benetti por topar esta empreitada comigo
Este documento fornece informações sobre Loiane Groner, uma desenvolvedora especializada em Angular, JavaScript e programação reativa. Ela oferece treinamentos sobre esses tópicos e mantém um blog e perfis nas redes sociais para compartilhar conhecimento. O documento também apresenta conceitos-chave da programação reativa e como implementá-la usando Angular e a biblioteca NgRx.
O documento apresenta o framework Cairngorm para desenvolvimento de aplicações em Adobe Flex, descrevendo seus principais conceitos como Model-View-Controller (MVC), Fluxo de eventos, Commands e ModelLocator. Explica como reduzir classes utilizando dados no próprio CairngormEvent em vez de classes separadas.
O documento discute o conceito de mock objects para testes de software, descrevendo suas vantagens e como implementá-los. É apresentado um exemplo prático de uso de mock objects para testar uma classe de conversão de temperatura e são discutidos alguns frameworks populares para criação de mock objects em Java, como jMock e EasyMock.
O documento discute React, Flux e arquitetura de aplicações front-end. Aborda problemas atuais da web, como desempenho e complexidade do MVC, e como React e Flux podem ajudar a resolver esses problemas através de componentização, estado unidirecional e ciclo de vida de componentes.
O documento apresenta Gabriel Colombo e um workshop introdutório sobre o framework Vue.js. O workshop irá cobrir os principais conceitos e funcionalidades do Vue como reatividade, data-binding, diretivas, event handling, componentes e projeto prático de um e-mail client. O objetivo é mostrar porque o Vue é um framework popular, fácil de aprender e usar para criar interfaces reativas.
1) O documento discute o Domain-Driven Design (DDD), uma abordagem focada no domínio e na lógica de negócios.
2) As duas principais premissas do DDD são desenvolver um modelo que reflita o domínio e usar uma linguagem ubíqua compartilhada entre os especialistas de negócios e a equipe de desenvolvimento.
3) O DDD enfatiza a separação de camadas com base no domínio, utilizando conceitos como entidades, valores, agregações, serviços, fábricas e repositó
Este documento descreve o desenvolvimento de uma aplicação web para autenticação de usuários utilizando Firebase Authentication com Redux. Ele explica como configurar o Firebase, criar actions, reducers e componentes para implementar funcionalidades de cadastro, login e logout. Além disso, fornece detalhes sobre como conectar o Redux e React ao Firebase para gerenciar o estado da aplicação.
Projetos reativos com Angular, RxJS e Redux (ngRx)Loiane Groner
O documento resume uma apresentação sobre programação reativa com Angular, RxJS e Redux (ngRx). Apresenta conceitos como Observables, Promises, padrão Observer e como desenvolver funcionalidades reativas em Angular com forms, http, pipes e arquitetura escalável com ngrx/store. Inclui exemplos de uso de redux para gerenciamento de estado e integração com serviços HTTP.
O documento discute testes de integração em Java, mencionando tipos comuns como teste de unidade, integração e aceitação. Ele também cobre tópicos como comunicação com bancos de dados, populando dados de teste e ferramentas para auxiliar em testes automatizados como JPAHelper e DBUnitHelper.
Spring + Tapestry Um novo paradigma de desenvolvimento webelliando dias
O documento discute o framework Spring, incluindo sua organização, inversão de controle, integração com bancos de dados e frameworks web, transações declarativas, uso de mocks e projetos relacionados. O Spring é um container leve que facilita o desenvolvimento web, diminui código e integra com diversas tecnologias de forma portável e testável.
O documento apresenta os conceitos básicos de orientação a objetos em Java, incluindo classe, objeto, atributos, métodos, instanciação de objetos, referências, construtores e associação entre classes.
Introdução à análise orientada a objetos parte 1ariovaldodias
O documento apresenta os principais conceitos de análise orientada a objetos (AOO), incluindo classes, objetos, atributos, métodos, encapsulamento, herança e diagrama de classes. Também discute a evolução das classes ao longo do projeto e a importância do reuso em programação orientada a objetos.
Introdução à análise orientada a objetos parte 1ariovaldodias
O documento apresenta os principais conceitos de análise orientada a objetos (AOO), incluindo classes, objetos, atributos, métodos, encapsulamento, herança e diagrama de classes. Também discute a evolução das classes ao longo do projeto e a importância do reuso em programação orientada a objetos.
TDC - Introdução ao Actor Model com Microsoft OrleansFabio Gouw
O documento apresenta o framework Microsoft Orleans e o modelo de programação Actor. O Orleans permite a criação de aplicações distribuídas e stateful baseadas no modelo de atores, com características de elastibilidade, resiliência e resposta. O documento descreve os conceitos do modelo de atores, a arquitetura do Orleans e apresenta um exemplo prático com código.
Este documento fornece uma introdução à biblioteca jQuery:
1) jQuery é uma biblioteca JavaScript que facilita a manipulação de elementos, eventos e animações em páginas web.
2) A biblioteca pode ser incluída através de arquivos locais ou do Google.
3) jQuery permite selecionar elementos de várias formas e modificá-los facilmente.
O documento resume alguns padrões de projeto comumente usados na programação de jogos, como Command, Flyweight, Observer, Prototype, States e Singleton. Ele também discute brevemente outros padrões como Double Buffer, Game Loop, Update Method e Component e fornece referências adicionais sobre design de jogos.
Este documento apresenta os principais conceitos e funcionalidades da biblioteca jQuery, incluindo seletores, manipulação de CSS e elementos, requisições AJAX, entre outros tópicos, a fim de introduzir o leitor ao framework jQuery de forma prática através de exemplos e exercícios resolvidos.
O documento discute princípios de escrita de código limpo, incluindo a importância de nomes significativos, funções focadas em uma única tarefa, uso apropriado de comentários, e formatação de código para melhor legibilidade.
Semelhante a Entendento Arquitetura MVI + Flow (20)
Em um mundo cada vez mais digital, a segurança da informação tornou-se essencial para proteger dados pessoais e empresariais contra ameaças cibernéticas. Nesta apresentação, abordaremos os principais conceitos e práticas de segurança digital, incluindo o reconhecimento de ameaças comuns, como malware e phishing, e a implementação de medidas de proteção e mitigação para vazamento de senhas.
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
A linguagem C# aproveita conceitos de muitas outras linguagens,
mas especialmente de C++ e Java. Sua sintaxe é relativamente fácil, o que
diminui o tempo de aprendizado. Todos os programas desenvolvidos devem
ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a
execução dos programas mais rápida se comparados com as linguagens de
script (VBScript , JavaScript) que atualmente utilizamos na internet
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...Faga1939
Este artigo tem por objetivo apresentar como ocorreu a evolução do consumo e da produção de energia desde a pré-história até os tempos atuais, bem como propor o futuro da energia requerido para o mundo. Da pré-história até o século XVIII predominou o uso de fontes renováveis de energia como a madeira, o vento e a energia hidráulica. Do século XVIII até a era contemporânea, os combustíveis fósseis predominaram com o carvão e o petróleo, mas seu uso chegará ao fim provavelmente a partir do século XXI para evitar a mudança climática catastrófica global resultante de sua utilização ao emitir gases do efeito estufa responsáveis pelo aquecimento global. Com o fim da era dos combustíveis fósseis virá a era das fontes renováveis de energia quando prevalecerá a utilização da energia hidrelétrica, energia solar, energia eólica, energia das marés, energia das ondas, energia geotérmica, energia da biomassa e energia do hidrogênio. Não existem dúvidas de que as atividades humanas sobre a Terra provocam alterações no meio ambiente em que vivemos. Muitos destes impactos ambientais são provenientes da geração, manuseio e uso da energia com o uso de combustíveis fósseis. A principal razão para a existência desses impactos ambientais reside no fato de que o consumo mundial de energia primária proveniente de fontes não renováveis (petróleo, carvão, gás natural e nuclear) corresponde a aproximadamente 88% do total, cabendo apenas 12% às fontes renováveis. Independentemente das várias soluções que venham a ser adotadas para eliminar ou mitigar as causas do efeito estufa, a mais importante ação é, sem dúvidas, a adoção de medidas que contribuam para a eliminação ou redução do consumo de combustíveis fósseis na produção de energia, bem como para seu uso mais eficiente nos transportes, na indústria, na agropecuária e nas cidades (residências e comércio), haja vista que o uso e a produção de energia são responsáveis por 57% dos gases de estufa emitidos pela atividade humana. Neste sentido, é imprescindível a implantação de um sistema de energia sustentável no mundo. Em um sistema de energia sustentável, a matriz energética mundial só deveria contar com fontes de energia limpa e renováveis (hidroelétrica, solar, eólica, hidrogênio, geotérmica, das marés, das ondas e biomassa), não devendo contar, portanto, com o uso dos combustíveis fósseis (petróleo, carvão e gás natural).
3. O que esperar?
• Entender a arquitetura MVI
• Visão geral de outras arquiteturas
• Como lidar com estados e eventos
• Exemplo de código com Flow
• Implementar uma feature juntos
3
4. O que não esperar?
• Coroutines Scopes/Jobs
• Testes integrados
4
5. O que é MVI?
M
Model estado imutável, única fonte
de verdade.
5
28. O que aconteceria?
CounterModel(
value: Int? = 2, //Mostrar text com contador
isLoading:Boolean = true, //Mostrar loading
msg: String? = “Algo deu MUITO errado!” //Mostrar erro
)
31
30. Data class único
Imutabilidade, uma fonte da verdade.
Maneira mais simples
Tudo dentro de uma classe única
Regra na View
Múltiplos estados
override fun render(model: CounterModel) {
progressBar.isVisible = model.isLoading
val count = model.value?.toString() ?: ""
txtCounter.text = count
model.msg?.let {
txtCounter.text = it
}
}
34
31. Hierarquia de
sealed class
Imutabilidade, uma fonte de verdade.
Cada classe representa uma implementação do
estado
Cada item pode ter seus próprios campos
Utiliza object evitando criar mais de uma
instância
Evita enviar o mesmo estado mais de uma vez
no caso de object
sealed class CounterState {
data class Content(
val value: Int
) : CounterState()
object Loading : CounterState()
data class Error(
val msg: String
) : CounterState()
}
35
32. View
private fun setupObserver() {
viewModel.state.observe(this, Observer { state ->
render(state)
})
}
private fun render(state: CounterState) {
when (state) {
is CounterState.Loading -> progressBar.isVisible = true
is CounterState.Content -> {
progressBar.isVisible = false
txtCounter.text = state.value.toString()
}
is CounterState.Error -> {
progressBar.isVisible = false
txtCounter.text = state.msg
}
}
}
36
33. ViewModel
class CounterViewModel : ViewModel() {
private val repository = CounterRepository
private val _state = MutableLiveData<CounterState>()
val state: LiveData<CounterState> = _state
fun increase() {
_state.value = CounterState.Loading
repository.increase(object : CounterCallback {
override fun onSuccess(counter: Counter) {
_state.value = CounterState.Content(counter.value)
}
override fun onError(throwable: Throwable) {
_state.value = CounterState.Error(
throwable.message ?: "error"
)
}
})
}
}
37
37. Consegue quebrar uma tela em vários estágios
Quando? Onde? Como?
Visão do fluxo inteiro
Fácil de identificar qual estágio é responsável por cada requisição
Testável
Sustentável/Maintainable
Estável
41
State Machine/ Máquina de estado
38. State Machine/ Máquina de estado
Loading
Message
Content
Error
Success
???
Action/AçãoState/Estado
Executing
Even
t
42
41. Components
Event
Action
State
SyncState
Intent do MVI,
Uma intenção do usuário ou do app, e.g. click no botão.
A ação que minha view deve executar, por exemplo execution/loading
Combinação entre meu retorno/data da API com o meu SyncState
Estado atual da minha view/tela
45
42. Components
Action
Creator
Reducer
Guard
Recebe um evento, conecta meu repositório e cria uma ação para o meu reducer transformar
em novo estado
Recebe o estado atual da view e uma nova ação e devolve um novo estado dependendo do guard
Valida o boolean recebido do reducer para decidir se vai prosseguir
46
46. State Machine/ Máquina de estado
Loading
Message
Content
Error
Success
???
Action/AçãoState/Estado
Executing
Even
t
52
47. Reducer
• Concentra as mudanças de estado em somente um lugar
• Fácil de debugar
• MUITO fácil de testar
• Vai concatenar seu estado atual no seu novo estado.
54
60. State flow
State-Holder que emite o valor atual
MutableStateFlow para alterar o valor
Pede um valor inicial
Muito util deixar na view model para sobreviver a mudanças de configuração
HOT - Diferente de um flow builder o StateFlow vai continuar emitindo
81
61. Shared flow
Compartilhar emissões entre mais de um coletor
É um hot flow
Guarda um cache
Da um replay desse cache para novos coletores
Substitui o BroadcastChannel
82
64. Evento e Estado
private val event = MutableSharedFlow<Event>()
val state: StateFlow<State> = toState()
96
65. Evento e Estado
private val event = MutableSharedFlow<Event>()
val state: StateFlow<State> = toState()
suspend fun process(event: Flow<Event>) {
event.collect {
this.event.emit(it)
}
}
97
2 anos com MVI
Experiencia do service App
Interagir
Even MVI is very powerful to write integration test this will be for next time
Por mais que vamos ver escopo no código, nao eh o foco dessa palestra entrar no assunto
Model/State immutable, like this we can have only on source of true
Pretty much the same, it represents UI
THIS IS NOT ANDROID INTENT
In order to help us to better understand I will call intent as event
Aqui podemos ver um versão mais base do MVI
Muitas arquitetura MVVM chegam perto ou são implementadas dessa mesma maneira
No exemplo dessa talk vamos ter alguns outros componentes para construir nossa arquitetura MVI
Que sao o Action Creator e o Reducer, vou explicar sobre eles mais pra frente, mas ja guardem esse nome
Essa eh a nossa aplicação
Vamos desenvolver juntos a funcionalidade de decrementar
Deixar mais claro ou rodar o app
Trazendo mais uma visualização do MVI dessa vez matematicamente
v(m(I())) eh uma função composta por outras funções
Funçao equivalente, com multiplos inputs tem apenas um output
Math might not be everyone’s cup of tea, but a mathematician doesn’t know what a bug is. Software Engineers do.
Mau implementados podem te dar muita dor de cabeça
Tratado com carinho sao as soluções de todos os seus problemas
MVI faz isso muito bem
Ficamos 3 horas para decidir oq nossa view model era responsável
Agora lancei mais duas novas palavras ActionCreator e o Reducer e Guard
View que ja sabemos = UI
Model
Separar
O que eh o Model?
Alguem consegue ver oq eh o model aqui?
repository?
Interface view?
Loading/updateCounter/error?
E aqui na minha view, quando, onde e como?
Eu posso falar que chegou apenas 1 output igual a gente view na função no slide anterior?
Esse eh o comportement do MVP, nao possui nenhum estado
Por sua vez o MVP controla o estado da view, em relação a mostrar ou esconder algo.
Mesmas perguntas aqui
Onde esta o model?
Cade o model?
Diferente do presenter o viewmodel tem estado e por sua vez
sempre que esse estado eh alterado ele notifica a view que esta observando esse estado
Vamos pensar no model dessa maneira, um data class que contem todos os meus views states.
De forma mais grafica seria mais ou menos isso
Model contem oq vem da minha API e contem os estados que minha view vai ter
Mutabilidade, onde diferentes lugares podem alterar o seu model/state
Multiplos estados, nao somente estados da view, mas um estado da sua requisição por exemplo, estado do seu view model e estado da sua view que seria isEnable, isVisible entre outros.
Por que devemos sincronizar? Evitar suposição do estado atual para enviar o proximo.
Criando nosso model e colocando os states dentro do model a gente traz um pouco de imutabilidade, enviando cada vez um estado para nossa view.
Loading
Counter
Error
Todos vao através do render function da minha interface
Que por sua vez, recebe em um soh lugar os estado.
Parte ruim de colocar tudo em um data class eh que eu preciso colocar alguns items como opcional
Porem a gente ve que recebemos em apenas um lugar, um output igual a função matemática que a gente view.
Uma unica fonte da verdade de onde vai chegar o meu state.
Mutable live data
Apenas 1 uma fonte de vdd na minha view
O que aconteceria se eu tivesse isso como output?
Opcionais mas eu to recebendo :/
Nesse exemplo que aconteceu comigo eu tive o seguinte fluxo
Recebi uma notificação como pode ver que ta com o marcador
Abri a tela e recebi um empty state
E meu loading ficou infinito
Aqui podemos ver dois problemas
1 - Multiplos estados
2 - Estados nao estao sincronizados, pq eu consigo enviar meus novos estados mas na vdd nao deveria, pois isso ira gerar um estado estranho na minha view.
Ja viu isso acontecer com algum app que vc usa?
Vantagens e desvantagens de usar um data class único
Podemos ver que agora minha classe virou um state, onde o model esta dentro do content, o valor que vem do repositorio sera inserido ali dentro.
Nao vejo desvantagens, se alguém ve me fala depois quero saber de vdd :)
Agora na minha view eu nao preciso mais tratar opcional, pq cada classe tem o seu campo.
Porem a parte de sincronização ainda nao foi solucionada, eh ai que entra o MVI.
Nao corrige o problema de sincronização
Nada tecnicamente
Assumir que posso enviar um novo estado sem saber qual estado ja foi enviado
Notification e depois um empty???
Ta tudo certo ai galera? Deu pra entender o problema que ficou em aberto?Vc ja parou pra pensar que rolam outros estados alem do viewModel na sua aplicação?
1 - Estado da sua requisição
2 - Estado da view model que estamos mais acostumados
3 - Estado da view, que embora a gente pense que eh o estado do view model por exemplo o loading, na vdd o estado da view se refere a view por si mesmo, como isEnable, isVisible, core de texto o próprio texto e outros muito possíveis estados que a view pode ter. Compose vai melhorar muito isso.
Pra melhor exemplificar essa sincronização de estados, vou explicar sobre maquina de estados
Jamais parado em cima do acabado
Muitos apps tem os estados, mas a gente nao tem ideia da maquina de estado
Isso tem que estar visível todo o tempo, principalmente quando vc vai alterar o código
Evento e acoes sao coisas diferentes
Evento = Intent do usuario ou do app em fazer algo
Acao = Seria o trigger para um novo estado
Acoes que nao podem acontecer de jeito nenhum
Evento + Acao + Estado
O que acontece nessa transição para garantir que eu posso enviar um estado de loading?
Action Creator
Reducer
Guard
Esse e o proximo slide são muito importantes pra vc entender o restante
Se vc ta mexendo no celular, deixa de lado um pouquinho e foca aqui
toState eh uma cadeia que recebe um evento do usuário e devolve o novo estado, lembrem desse nome toState pois vamos ver essa cadeia inteira no código escrito com flow.
Falar q entende que eh o primeiro contato, vamos ver muito mais exemplos.
Deixar claro que intent=event
Varias coisas acontecem
Uma mensagem importante para mostrar para o usuário esta na tela, ele esta lendo, nao posso sobrepor com um conteúdo
Vamos dizer que temos um event do usuário, uma intent como a gente viu. No final isso ira refletir em um novo estado.
Essa parte de concatenar eh um ganho muito grande
Problema similar
MVI + Flow ajuda
Vamos imaginar o seguinte cenário
Na minha view eu tenho 2 tipos eventos que podem acontecer distintivamente em momentos separados
Vamos dar nome aos bois
Regra no 2
Nunca vai descobrir
Desabilitar
Travar a tela
Encerra comunicação
Loading tempo, 15s?
Pessima experiencia
Informar, Cancelar
Substituir
Usar para contar
5s botao desabilitado esperando resultado???
Bonito mas nao funciona
N tratar eventos
Agora temos a mesma situação mas com eventos enfileirados
O MVI vai me ajudar muito com isso, principalmente com o flow.
Como falei no começo o propósito dessa palestra eh que vc entenda a arquitetura MVI e para isso utilizaremos flow para construir um fluxo unidirecional. Antes de ver o fluxo inteiro do MVI gostaria de granular em pequenas partes que existem, para assim melhor entender o contexto geral de MVI.
Debugavel
O que vamos ver agora eh o MVI tratando esses dois caras
The flow builder is executed within a coroutine. Thus, it benefits from the same asynchronous APIs, but some restrictions apply:
Flows are sequential. As the producer is in a coroutine, when calling a suspend function, the producer suspends until the suspend function returns. In the example, the producer suspends until the fetchLatestNews network request completes. Only then is the result emitted to the stream.
With the flow builder, the producer cannot emit values from a different CoroutineContext. Therefore, don't call emit in a different CoroutineContext by creating new coroutines or by using withContext blocks of code. You can use other flow builders such as callbackFlow in these cases.
Eh um dos operadores terminais do flow tais como single, reduce, toList e launchIn
Na minha opniao nao vejo flow contra livedata ou vice versa.
Os dois trabalham muito bem juntos no que sabem fazer de melhor
Existem algumas maneiras de coletar flow na view, porem existem algumas diferenças e nao vou entrar nesse assunto agora
Pra mim converter flow para livedata na view e observar ficou muito bem atrelado ao view scope
LD hold value
Sao diferentes
Vamos falar que a gente quer enviar 1 + n eventos
Por exemplo, enviar o loading e o resultado da minha api
Rever
Rever
Stream/Criaçao de uma cadeia, ajudando muito no momento de enfileirar eventos
Livedata com os intermediarios do flow para transformação
Igual o state flow
Quantas vezes emitir
Bom para eventos
Bagunça
Como ta ai pessoal?
ActionCreator, Reducer, Guard??
+ MVI CadeiaExemplo
Meu projeto
SharedFlow event
Channel
State flow toState
Falar sobre o process que vem da view os eventos
Btn click
1 flow merge
Curaçao
Event -> State
Cadeia
Todos os eventos recebidos da view vao passar aqui
Vou chamar meu action
(Event) -> Action que sera executada pela view
Increase = Evento
Action = Executing/Success/Error
(currentState,Action) -> NewState
Logando quando completar
Convertendo de flow para stateflow
Dando o scope do viewmodel para sobreviver a rotação
Lazily para enviar somente quando alguém estiver coletando
E inicial estado
Guard ta dentro do meu reducer
Me de algum feedback, algo que talvez nao esta tao claro para eu mostrar agora no código.Roteiro do live code
1- setOnClickListenerFlow
2- Criar o evento Decrease
3 - implementar o btnDecrease
4 - Action Creator, deixar o TODO para ver o erro, depois implementar.
5 - CounterState
6 - Reducer
7 - Guard(Explicar o assert, mostrar o guard dando erro e fazer o catch do erro no view model nos próximos estados)8 - View Model(View model fica bem genérico, fácil implementação)
9 - State view model(falar que pode ser mais granulado, ter um cara para despachar minhas acoes, chamar de store e etc) mostrar o chain linha por linha
10 - Testes Unitarios(runblocking os caras vão querer me matar haha)
11 - Testar o app
11.1 - Rotacao(1 evento rotaciona depois mais 1 evento)
11.2 - Mudar de app, falar sobre o render state
Eu espero muito que vc conseguiu entender um pouco de MVI e seus benefícios.
Nao estou aqui para falar que MVI eh a melhor arquitetura e seu código eh ruim, existem diferentes necessidades para diferentes casos.
Tbm existem outras implementações para MVI, outras nomenclaturas e etc, faça do jeito que for melhor para o seu projeto.