The document discusses using a unidirectional data flow architecture on Android applications. It describes combining elements of Flux and Redux, including actions, reducers, a store, and dispatcher. Views dispatch actions that are reduced by reducers to update the store's state. The store then notifies subscribers like the controller-view. The approach aims to have unidirectional data flows with immutable states and no external dependencies. An example app called KUnidirectional is presented to demonstrate this architecture in practice using Kotlin and Android.
Redux is a powerful tool to manage our state. Can we use the same concepts in the server side so we can share the same store with users using our app at the same time in games or collaborative apps? We will see how to connect our Redux store to stores in the server side written in Node.js and Elixir OTP GenServers, and how to extend this perspective beyond particular implementations.
Talk presented in AgentConf'18
PredictionIO - Building Applications That Predict User Behavior Through Big D...predictionio
Building Applications That Predict User Behavior Through Big Data Using Open-Source Technologies
Presented by PredictionIO at Big Data TechCon (Oct 17, 2013)
Esta charla comprende las lecciones aprendidas convirtiendo la app de Android de Teambox (una app repleta de deuda técnica y con un alto nivel de acoplamiento entre clases), en la versión actual de Redbooth, que intenta cumplir la arquitectura Hexagonal y los principios SOLID. Durante la exposición explicaremos como fuimos desenredando el código paso a paso; como aplicamos por partes los conceptos de la arquitectura hexagonal; como dejamos de lado componentes del framework de Android que dificultaban el mantenimiento de la app; y que errores cometimos, como los solucionamos y como se podrían haber evitado.
Redux is a powerful tool to manage our state. Can we use the same concepts in the server side so we can share the same store with users using our app at the same time in games or collaborative apps? We will see how to connect our Redux store to stores in the server side written in Node.js and Elixir OTP GenServers, and how to extend this perspective beyond particular implementations.
Talk presented in AgentConf'18
PredictionIO - Building Applications That Predict User Behavior Through Big D...predictionio
Building Applications That Predict User Behavior Through Big Data Using Open-Source Technologies
Presented by PredictionIO at Big Data TechCon (Oct 17, 2013)
Esta charla comprende las lecciones aprendidas convirtiendo la app de Android de Teambox (una app repleta de deuda técnica y con un alto nivel de acoplamiento entre clases), en la versión actual de Redbooth, que intenta cumplir la arquitectura Hexagonal y los principios SOLID. Durante la exposición explicaremos como fuimos desenredando el código paso a paso; como aplicamos por partes los conceptos de la arquitectura hexagonal; como dejamos de lado componentes del framework de Android que dificultaban el mantenimiento de la app; y que errores cometimos, como los solucionamos y como se podrían haber evitado.
Anduo Wang
University of Illinois at Urbana-Champaign
Research Track Session Part 2
ONS2015: http://bit.ly/ons2015sd
ONS Inspire! Webinars: http://bit.ly/oiw-sd
Watch the talk (video) on ONS Content Archives: http://bit.ly/ons-archives-sd
In this talk I demonstrate and explain how I tackled the problem of importing a huge data set with many repetitive contents. The dataset was provided in JSON format.
Composing "functional" paradigms and building blocks with the capabilities to "react" to external stimulus is a new way to think. A completely different approach.
Postgres Conf Keynote: What got you here WILL get you thereAnant Jhingran
The Postgres community, with all of its phenomenal achievements, has gotten to this stage by remaining true to three Northstars--SQL, ACID and performance. In this talk I discuss how these same Northstars will help guide the community in the future, irrespective what new hot or serious trends come along. I gave this talk at the NYC Postgres People Data Conference, 2019.
Ray: A Cluster Computing Engine for Reinforcement Learning Applications with ...Databricks
As machine learning matures, the standard supervised learning setup is no longer sufficient. Instead of making and serving a single prediction as a function of a data point, machine learning applications increasingly must operate in dynamic environments, react to changes in the environment, and take sequences of actions to accomplish a goal. These modern applications are better framed within the context of reinforcement learning (RL), which deals with learning to operate within an environment. RL-based applications have already led to remarkable results, such as Google’s AlphaGo beating the Go world champion, and are finding their way into self-driving cars, UAVs, and surgical robotics.
These applications have very demanding computational requirements–at the high end, they may need to execute millions of tasks per second with millisecond level latencies, and support heterogeneous and dynamic computation graphs. In this talk, we present Ray, a new cluster computing framework that meets these requirements, give some application examples, and discuss how it can be integrated with Apache Spark.
Programming the Physical World with Device Shadows and Rules EngineAmazon Web Services
Learn more about how to use AWS IoT's Device Shadows and Rules Engine to build powerful IoT applications. With Device Shadows, you can build applications that interact with your devices by providing always available REST APIs. By taking advantage of AWS IoT's topic-based rules and built-in integrations, you can build IoT applications that gather, process, analyze, and act on data generated by connected devices at global scale, without having to manage any infrastructure.
Três conceitos que farão a diferença nos seus appsGuilherme Rambo
Nesta talk Guilherme irá apresentar três padrões que adotou e que mudaram significativamente a qualidade dos seus apps: Abstrair a internet dos seus view controllers; calcular diferenças entre coleções de models e lidar com navegação entre telas.
Cloud Roundtable | Amazon Web Services: Key = IterationCodemotion
by Danilo Poccia - This round table represents a unique chance to meet the main solution vendors and learn directly from their specialists how PaaS adoption can streamline continuous delivery processes and increase team focus and productivity to dramatically improve time to market. Continuous delivery is an agile approach to software delivery that helps to achieve frequent and reliable releases through team collaboration and full automation. Platform as a service (PaaS) is a cloud computing paradigm that enables rapid deployment of applications without the complexity of managing the underlying infrastructure.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/1ZW7TDL.
Richard Dallaway shows an example of what Scala looks like when using pattern matching over classes, how to encode an idea into types and use advanced features of Scala without complicating the code. Filmed at qconlondon.com.
Richard Dallaway is a partner at Underscore -- a consultancy specializing in Scala, especially the type-driven and functional aspects of Scala. He works on client projects writing software and helping teams deliver software with Scala. His focus is on the web, machine learning, and code review. He's the co-author of "Essential Slick" (Underscore), and author of the "Lift Cookbook" (O'Reilly).
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...IT Event
Jet Propulsion Laboratory – scientific institution making a lot of research and development for NASA. JPL have been developing software for most of unmanned missions in the field of deep space exploaration including such missons as Curiosity and Voyager. High level of autmatization and long duration of missions led to superior demands to software quality.
As a result of JPL amazing experience a set of code guidelines was developed and published recently. Since demands to web-driven software constantly increase and more critical tasks are entrusted to JavaScript, lets apply NASA coding guidelines to JavaScript / HTML applications for higher performance, reliability and the better world.
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"IT Event
Web components are a tale of four w3c specifications. They are a hot topic now. We’ve all seen big headlines, for instance, “The Web Components revolution”, “Web Components are a game changer”, “A Tectonic Shift for Web Development”, … and so many others. They are certainly exciting and promising, nevertheless, there are some factors holding them back such as performance issues and lack of browser support. Some features seems to be more hassle than they’re worth. In this talk you’ll examine web components from a pragmatic stand point. So if you want to start using web components in production, come to learn what features can you use today. Actually, despite the still short browser support, some of web components features seems to be the best choice to start with . The assessment you’ll learn is the reflection of my personal research and work on my spare time and also feedbacks from my co-workers.
More Related Content
Similar to Cesar Valiente "Unidirectional architecture on Android with Kotlin"
Anduo Wang
University of Illinois at Urbana-Champaign
Research Track Session Part 2
ONS2015: http://bit.ly/ons2015sd
ONS Inspire! Webinars: http://bit.ly/oiw-sd
Watch the talk (video) on ONS Content Archives: http://bit.ly/ons-archives-sd
In this talk I demonstrate and explain how I tackled the problem of importing a huge data set with many repetitive contents. The dataset was provided in JSON format.
Composing "functional" paradigms and building blocks with the capabilities to "react" to external stimulus is a new way to think. A completely different approach.
Postgres Conf Keynote: What got you here WILL get you thereAnant Jhingran
The Postgres community, with all of its phenomenal achievements, has gotten to this stage by remaining true to three Northstars--SQL, ACID and performance. In this talk I discuss how these same Northstars will help guide the community in the future, irrespective what new hot or serious trends come along. I gave this talk at the NYC Postgres People Data Conference, 2019.
Ray: A Cluster Computing Engine for Reinforcement Learning Applications with ...Databricks
As machine learning matures, the standard supervised learning setup is no longer sufficient. Instead of making and serving a single prediction as a function of a data point, machine learning applications increasingly must operate in dynamic environments, react to changes in the environment, and take sequences of actions to accomplish a goal. These modern applications are better framed within the context of reinforcement learning (RL), which deals with learning to operate within an environment. RL-based applications have already led to remarkable results, such as Google’s AlphaGo beating the Go world champion, and are finding their way into self-driving cars, UAVs, and surgical robotics.
These applications have very demanding computational requirements–at the high end, they may need to execute millions of tasks per second with millisecond level latencies, and support heterogeneous and dynamic computation graphs. In this talk, we present Ray, a new cluster computing framework that meets these requirements, give some application examples, and discuss how it can be integrated with Apache Spark.
Programming the Physical World with Device Shadows and Rules EngineAmazon Web Services
Learn more about how to use AWS IoT's Device Shadows and Rules Engine to build powerful IoT applications. With Device Shadows, you can build applications that interact with your devices by providing always available REST APIs. By taking advantage of AWS IoT's topic-based rules and built-in integrations, you can build IoT applications that gather, process, analyze, and act on data generated by connected devices at global scale, without having to manage any infrastructure.
Três conceitos que farão a diferença nos seus appsGuilherme Rambo
Nesta talk Guilherme irá apresentar três padrões que adotou e que mudaram significativamente a qualidade dos seus apps: Abstrair a internet dos seus view controllers; calcular diferenças entre coleções de models e lidar com navegação entre telas.
Cloud Roundtable | Amazon Web Services: Key = IterationCodemotion
by Danilo Poccia - This round table represents a unique chance to meet the main solution vendors and learn directly from their specialists how PaaS adoption can streamline continuous delivery processes and increase team focus and productivity to dramatically improve time to market. Continuous delivery is an agile approach to software delivery that helps to achieve frequent and reliable releases through team collaboration and full automation. Platform as a service (PaaS) is a cloud computing paradigm that enables rapid deployment of applications without the complexity of managing the underlying infrastructure.
Video and slides synchronized, mp3 and slide download available at URL http://bit.ly/1ZW7TDL.
Richard Dallaway shows an example of what Scala looks like when using pattern matching over classes, how to encode an idea into types and use advanced features of Scala without complicating the code. Filmed at qconlondon.com.
Richard Dallaway is a partner at Underscore -- a consultancy specializing in Scala, especially the type-driven and functional aspects of Scala. He works on client projects writing software and helping teams deliver software with Scala. His focus is on the web, machine learning, and code review. He's the co-author of "Essential Slick" (Underscore), and author of the "Lift Cookbook" (O'Reilly).
Denis Radin - "Applying NASA coding guidelines to JavaScript or airspace is c...IT Event
Jet Propulsion Laboratory – scientific institution making a lot of research and development for NASA. JPL have been developing software for most of unmanned missions in the field of deep space exploaration including such missons as Curiosity and Voyager. High level of autmatization and long duration of missions led to superior demands to software quality.
As a result of JPL amazing experience a set of code guidelines was developed and published recently. Since demands to web-driven software constantly increase and more critical tasks are entrusted to JavaScript, lets apply NASA coding guidelines to JavaScript / HTML applications for higher performance, reliability and the better world.
Sara Harkousse - "Web Components: It's all rainbows and unicorns! Is it?"IT Event
Web components are a tale of four w3c specifications. They are a hot topic now. We’ve all seen big headlines, for instance, “The Web Components revolution”, “Web Components are a game changer”, “A Tectonic Shift for Web Development”, … and so many others. They are certainly exciting and promising, nevertheless, there are some factors holding them back such as performance issues and lack of browser support. Some features seems to be more hassle than they’re worth. In this talk you’ll examine web components from a pragmatic stand point. So if you want to start using web components in production, come to learn what features can you use today. Actually, despite the still short browser support, some of web components features seems to be the best choice to start with . The assessment you’ll learn is the reflection of my personal research and work on my spare time and also feedbacks from my co-workers.
Max Voloshin - "Organization of frontend development for products with micros...IT Event
While our product was growing our team came to need to implement microservices. Later it became obvious that our approaches on organization of frontend development should be rethought and significantly improved.
The report contains our team's solutions for simple and comfortable frontend product development with microservices. Also, this talk is about how we along with the way updated frontend framework, separated frontend and backend, solved internalization problem and started using Docker for front end tasks.
Roman Romanovsky, Sergey Rak - "JavaScript в IoT "IT Event
I've been surprised how easy it is today to program hardware containing Wi-Fi module and start receiving data from a chosen sensor (those perceiving motion, light or sound, etc.). Without a line in C++, all in JavaScript solely.
Together with Sergey, we'll elaborate more on how any frontend engineer can easily jumpstart his journey within the Internet of Things.
Konstantin Krivlenia - "Continuous integration for frontend"IT Event
Do you want to know what is the continuous integration? how does make a controlled code when team is growing, maintain quality of code and be calm after the release. Don't be afraid to use ruthless refactoring and don't break the product features. I am glad to share with you how it make.
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"IT Event
The world of frontend development is changing rapidly. No one stays at the top for a long time. Just yesterday we saw the triumph of React, but today Angular2 treads on its heels. Why have I chosen Vue in 2017? Why not to use a usual React? Have the Chinese managed to create a "silver bullet"? In this report we'll consider these questions and we'll find out why Vue is at the top among JS-frameworks on GitHub and whether it's worth chosing it.
Evgeny Gusev - "A circular firing squad: How technologies drag frontend down"IT Event
Twitterati rules today's world of frontend: popularity equals life. On the one hand, this is good: you can write your own application without spending money and ""rock the world."" And on the other hand — now the frontend world is like a line of the famous song: ""There are nine million bicycles ..."" Is it good or bad? That's what is going to be figured out.
What is a life cycle of technology and is the world really ruled by secret backstage; do React developers really have the highest salaries? In what direction the frontend world goes? In this session, listeners of the talk will see the most interesting examples of frameworks and hear the answers to these and other questions.
Vladimir Grinenko - "Dependencies in component web done right"IT Event
We live in a component-based world. Complex components are based on simple ones. This implies the need to express dependencies between them. Most existing methods have notable disadvantages: hardcode, refactoring complexity, large amount of manual work and so on. Let’s fix it!
Dmitry Bartalevich - "How to train your WebVR"IT Event
Nowadays frontend developer is quite bored - news about new JS-based language aren't exciting, just like about new frameworks. And one day, while writing another logic of the another component or, Jesus Christ, bug fixing IE9, you can find absolutely charming create - WebVR.
In my lecture I'm going to share some secred knowledge about its behaviour, training tools, as well as gained experience.
Nowadays, there are many tips how start your project following the "Offline First" principle. But how add a support offline mode for applications that have already been released? What tactics and architectural approaches are used? What technologies and libraries are looking for? What storages are needed for implementation of pull/push strategies?
James Allardice - "Building a better login with the credential management API"IT Event
Login pages are probably the single type of page that users on the web interact with more than any other. In recent years the sign in experience has changed with the advent of federation via social networks, but whether a user has to type an email address and password or click a link and be redirected via Facebook, the process still interrupts the journey. The Credential Management API, designed by Mike West at Google, is an attempt to help streamline this process at the user agent level. This talk will investigate the new API and explore how we can use it to progressively enhance customer journeys in the apps we build.
Fedor Skuratov "Dark Social: as messengers change the market of social media ...IT Event
– Dark Social. Email, messengers, dark Internet.
– 3 billion in messengers from where all these people undertook and that they do there.
– The whole world – Wechat, and people in it Chinese. As the Asian model wins the West.
– Telegram-channels. As ordinary function not of the most popular messenger caused the real alarm in Russia.
– What’s next? Where the market in a year will come.
Андрей Зайчиков "Архитектура распределенных кластеров NoSQL на AWS"IT Event
Мы рассмотрим важные особенности построения архитектуры распреденных кластеров NoSQL с использованием ресурсов Amazon Web Services, мы затронем такие аспекты как: архитектура гео распределенных кластеров, оптимизация производительности, выбор основных опций для деплоймента и ряд других аспектов. В докладе мы сконцентрируемся на таких популярных базах данных, как Cassandra, MongoDB и некоторых других.
Алексей Рагозин "Java и linux борьба за микросекунды"IT Event
Java используется для широкого спектра приложений, некоторые из них могут иметь жёсткие требования по времени отклика.
Но если речь идёт про сотни микросекунд, годится ли Java, в принципе, для таких задач?
Доклад осветит практические аспекты разработки решений с малым временем отклика на платформе Java + Linux
Volodymyr Lyubinets "Introduction to big data processing with Apache Spark"IT Event
In this talk we’ll explore Apache Spark — the most popular cluster computing framework right now. We’ll look at the improvements that Spark brought over Hadoop MapReduce and what makes Spark so fast; explore Spark programming model and RDDs; and look at some sample use cases for Spark and big data in general.
This talk will be interesting for people who have little or no experience with Spark and would like to learn more about it. It will also be interesting to a general engineering audience as we’ll go over the Spark programming model and some engineering tricks that make Spark fast.
Опубликовав в своём блоге знаменитую заметку о переезде с PostgreSQL на MySQL, Uber наделал много шума в постгресовом сообществе. Для многих из разработчиков PostgreSQL это стало толчком к осознанию несовершенства постгресового табличного движка (который пока всё ещё один). В данном докладе будет разобран пост Uber’а глазами разработчика PostgreSQL. Я расскажу с какими пунктами «обвинения» я согласен, с какими не согласен, а с какими – согласен частично. Также я разберу разработки сообщества в данном направлении и то, насколько они, на мой взгляд, позволяют преодолеть указанные недостатки.
Александр Крашенинников "Hadoop High Availability: опыт Badoo"IT Event
Инфраструктура Hadoop – популярное решение для таких задач, как распределённое хранение данных и вычисления Map/Reduce на кластере. Хорошая масштабируемость и развитая экосистема подкупают и обеспечивают Hadoop’у прочное место в инфраструктуре различных информационных систем. Но чем больше ответственности возлагается на этот компонент, тем важнее обеспечивать его отказоустойчивость и high availability.
Leonid Vasilyev "Building, deploying and running production code at Dropbox"IT Event
Reproducible builds, fast and safe deployment process together with self-healing services form the basis of stable and maintainable infrastructure. In this talk I’d like to cover, from the Site Reliability Engineering (SRE) perspective, how Dropbox addresses above challenges, what technologies are used and what lessons were learnt during implementation process.
Анатолий Пласковский "Миллионы карточных платежей за месяц, или как потерять ...IT Event
Этот доклад – история организации и проведения «боевой стрельбы». Я расскажу о том, как реализовать нагрузочное тестирование реальными платежами без перерывов в работе системы. А также о том, как такой эксперимент может внезапно подорожать на 10 тысяч евро.
Mete Atamel "Resilient microservices with kubernetes"IT Event
Talk description: Creating a single microservice is a well understood problem. Creating a cluster of load-balanced microservices that are resilient and self-healing is not so easy. Managing that cluster with rollouts and rollbacks, scaling individual services on demand, securely sharing secrets and configuration among services is even harder.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
Generating a custom Ruby SDK for your web service or Rails API using Smithyg2nightmarescribd
Have you ever wanted a Ruby client API to communicate with your web service? Smithy is a protocol-agnostic language for defining services and SDKs. Smithy Ruby is an implementation of Smithy that generates a Ruby SDK using a Smithy model. In this talk, we will explore Smithy and Smithy Ruby to learn how to generate custom feature-rich SDKs that can communicate with any web service, such as a Rails JSON API.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
18. Flux and Redux
Architectures based in unidirectional data flows.
We start in A and we finish in A.
Global app state. State has everything the App needs.
36. We use a mix of both
We have actions that describe what we want to do.
37. We use a mix of both
We have actions that describe what we want to do.
We have store.
38. We use a mix of both
We have actions that describe what we want to do.
We have store.
We have dispatcher that dispatch actions and new states.
Subscribers are subscribed to it.
39. We use a mix of both
We have actions that describe what we want to do.
We have store.
We have dispatcher that dispatch actions and new states.
Subscribers are subscribed to it.
We have reducers. Given an action return a new state.
40. We use a mix of both
We have actions that describe what we want to do.
We have store.
We have dispatcher that dispatch actions and new states.
Subscribers are subscribed to it.
We have reducers. Given an action return a new state.
We have middleware that extends our model (persistence, network, etc.)
41. We use a mix of both
We have actions that describe what we want to do.
We have store.
We have dispatcher that dispatch actions and new states.
Subscribers are subscribed to it.
We have reducers. Given an action return a new state.
We have middleware that extends our model (persistence, network, etc.)
We have ControllerView (we are in Android though :-) ).
61. KUnidirectional
OSS App created to show this architecture
on Android.
A simple item list.
Everything is unidirectional.
No external libraries, just Kotlin + Android.
64. View
Are Activities and Fragments.
It receives data from the ControllerView and uses it to update it self.
65. View
Are Activities and Fragments.
It receives data from the ControllerView and uses it to update it self.
It communicates with the ControllerView through an interface.
66. View
Are Activities and Fragments.
It receives data from the ControllerView and uses it to update it self.
We instantiate rest of the components here.
It communicates with the ControllerView through an interface.
70. ControllerView
“Man in the middle” between UI and everything else.
Powered presenter.
1 Activity/1Fragment -> 1 Controller-View.
71. ControllerView
“Man in the middle” between UI and everything else.
Powered presenter.
1 Activity/1Fragment -> 1 Controller-View.
Dispatches actions.
72. ControllerView
“Man in the middle” between UI and everything else.
Powered presenter.
1 Activity/1Fragment -> 1 Controller-View.
Dispatches actions.
Subscribes to state changes.
73. abstract class ControllerView(
protected val actionDispatcher: ActionDispatcher,
protected val stateDispatcher: StateDispatcher)
: Application.ActivityLifecycleCallbacks, Subscriber<State> {
74. protected fun <T : Action> dispatch(action: T) {
actionDispatcher.dispatch(action)
}
override fun onNext(data: State) {
if (isActivityRunning) handleState(state)
}
abstract fun handleState(state: State)
}
79. sealed class Action
sealed class UpdateAction : Action() {
data class ReorderItemsAction(val items: List<Item>) : UpdateAction()
data class UpdateItemAction(val localId: String,
val text: String?,
val color: Color) : UpdateAction()
data class UpdateFavoriteAction(
val localId: String, val favorite: Boolean) : UpdateAction()
data class UpdateColorAction(
val localId: String, val color: Color) : UpdateAction()
}
82. Dispatcher
Used to dispatch data. An action or a new state.
Subscribers subscribe to it, listening for a new action or state.
83. Dispatcher
Used to dispatch data. An action or a new state.
Subscribers subscribe to it, listening for a new action or state.
Subscribers can unsubscribe.
91. Store
Is subscribed to handle Actions.
It will use its Reducers to reduce an Action and dispatch a new State.
It has the State of the app.
92. State
enum class Navigation {
ITEMS_LIST,
EDIT_ITEM
}
data class ItemsListScreen(
val items: List<Item> = emptyList())
data class EditItemScreen(val currentItem: Item = Item())
data class State(
val itemsListScreen: ItemsListScreen = ItemsListScreen(),
val editItemScreen: EditItemScreen = EditItemScreen(),
val navigation: Navigation = Navigation.ITEMS_LIST)
State is immutable.
93. Store Action Subscriber
open class StoreActionSubscriber(actionDispatcher: ActionDispatcher,
val stateDispatcher: StateDispatcher)
: ActionSubscriber(actionDispatcher) {
override fun reduce(action: Action) {
val currentState = stateDispatcher.state
val newState = when (action) {
is CreationAction -> CreationReducer.reduce(action, currentState)
is UpdateAction -> UpdateReducer.reduce(action, currentState)
is ReadAction -> ReadReducer.reduce(action, currentState)
is DeleteAction -> DeleteReducer.reduce(action, currentState)
is NavigationAction -> NavigationReducer.reduce(action, currentState)
}
stateDispatcher.dispatch(newState)
}
}
101. abstract class Reducer<in T : Action> {
open fun reduce(action: T, currentState: State) =
with(currentState) {
currentState.copy(
itemsListScreen = reduceItemsListScreen(action, itemsListScreen),
editItemScreen = reduceEditItemScreen(action, editItemScreen),
navigation = reduceNavigation(action, navigation)
)
}
102. open fun reduceItemsListScreen(action: T, itemsListScreen: ItemsListScreen) =
itemsListScreen.copy(
items = reduceItemsCollection(action, itemsListScreen.items))
open fun reduceItemsCollection(action: T, currentItems: List<Item>) =
currentItems.findAndMap(
find = { shouldReduceItem(action, it) },
map = { changeItemFields(action, it) })
103. open fun reduceEditItemScreen(action: T, editItemScreen: EditItemScreen) =
editItemScreen.copy(
currentItem = reduceCurrentItem(
action, editItemScreen.currentItem))
open fun reduceCurrentItem(action: T, currentItem: Item) =
if (shouldReduceItem(action, currentItem))
changeItemFields(action, currentItem)
else currentItem
104. open fun shouldReduceItem(action: T, currentItem: Item) = false
open fun changeItemFields(action: T, currentItem: Item) = currentItem
open fun reduceNavigation(action: T, currentNavigation: Navigation) = currentNavigation
}
109. enum class Color {
RED, YELLOW, GREEN, BLUE, WHITE
}
data class Item(
val localId: String = generateLocalId(),
val text: String? = null,
val favorite: Boolean = false,
val color: Color = Color.WHITE,
val position: Long = object : PositionsFactory {}.newPosition())
Store Models
110. enum class Color {
RED, YELLOW, GREEN, BLUE, WHITE
}
@RealmClass
open class Item() : RealmModel {
constructor(localId: String, text: String?, favorite: Boolean = false,
colorEnum: Color = Color.WHITE, position: Long) : this() {
this.localId = localId
this.text = text
this.favorite = favorite
this.color = colorEnum.name
this.position = position
}
Persistence Models
111. @PrimaryKey open var localId: String = ""
open var text: String? = null
open var favorite: Boolean = false
@Ignore private var colorEnum: Color = Color.WHITE
open var color: String = colorEnum.name
open var position: Long = 0
fun getColorAsEnum(): Color = Color.valueOf(color)
fun setColorAsEnum(color: Color) {
this.color = color.name
}
//Equals and hashcode since Realm doesn’t allow data classes
}
Persistence Models (2)
112. import com.cesarvaliente.kunidirectional.persistence.Color as PersistenceColor
import com.cesarvaliente.kunidirectional.persistence.Item as PersistenceItem
import com.cesarvaliente.kunidirectional.store.Color as StoreColor
import com.cesarvaliente.kunidirectional.store.Item as StoreItem
Mapper
fun StoreItem.toPersistenceItem(): PersistenceItem =
with(this) {
PersistenceItem(localId, text, favorite, color.toPersistenceColor(), position)
}
fun StoreColor.toPersistenceColor(): PersistenceColor =
when (this) {
StoreColor.BLUE -> PersistenceColor.BLUE
StoreColor.GREEN -> PersistenceColor.GREEN
StoreColor.RED -> PersistenceColor.RED
StoreColor.WHITE -> PersistenceColor.WHITE
StoreColor.YELLOW -> PersistenceColor.YELLOW
}
113. Presentation models?
fun Color.toColorResource(): Int =
when (this) {
RED -> R.color.red
YELLOW -> R.color.yellow
GREEN -> R.color.green
BLUE -> R.color.blue
WHITE -> R.color.white
}
fun Item.getStableId(): Long = this.localId.hashCode().toLong()
116. Middleware
We can have as much middleware as we want.
Middleware is subscribed listening for Actions.
117. Middleware
We can have as much middleware as we want.
Middleware is subscribed listening for Actions.
Middleware can return a new Action after “apply” the previous one.
134. Testing?
UI tests on Presentation layer (View).
Unit tests + Integration tests on our ControllerViews.
135. Testing?
UI tests on Presentation layer (View).
Unit tests + Integration tests on our ControllerViews.
Acceptance tests in our Persistence layer (middleware).
136. Testing?
UI tests on Presentation layer (View).
Unit tests + Integration tests on our ControllerViews.
Acceptance tests in our Persistence layer (middleware).
Unit tests in our Store layer.
140. Demo time(1)!
OPEN EDIT ITEM NAVIGATION UPDATED
FETCH ITEM
DETAILS
EMPTY ITEM
FETCH LIST
ITEMS
LIST ITEMS
Action
State
141. Demo time(1)!
OPEN EDIT ITEM NAVIGATION UPDATED
FETCH ITEM
DETAILS
EMPTY ITEM
SAVE ITEM NEW ITEM
FETCH LIST
ITEMS
LIST ITEMS
Action
State
142. Demo time(1)!
OPEN EDIT ITEM NAVIGATION UPDATED
FETCH ITEM
DETAILS
EMPTY ITEM
SAVE ITEM NEW ITEM
TO NOTE LIST NAVIGATION UPDATED
FETCH LIST
ITEMS
LIST ITEMS
Action
State
143. Demo time(1)!
OPEN EDIT ITEM NAVIGATION UPDATED
FETCH ITEM
DETAILS
EMPTY ITEM
SAVE ITEM NEW ITEM
TO NOTE LIST NAVIGATION UPDATED
FETCH LIST
ITEMS
LIST ITEMS
FETCH LIST
ITEMS
LIST ITEMS
Action
State
146. Demo time(2)!
OPEN EDIT ITEM NAVIGATION UPDATED
FETCH ITEM
DETAILS
CURRENT ITEM
Action
State
147. Demo time(2)!
OPEN EDIT ITEM NAVIGATION UPDATED
FETCH ITEM
DETAILS
CURRENT ITEM
CHANGE COLOR CURRENT ITEM x 6
Action
State
148. Demo time(2)!
OPEN EDIT ITEM NAVIGATION UPDATED
FETCH ITEM
DETAILS
CURRENT ITEM
SAVE ITEM ITEM UPDATED
CHANGE COLOR CURRENT ITEM x 6
Action
State
149. Demo time(2)!
OPEN EDIT ITEM NAVIGATION UPDATED
FETCH ITEM
DETAILS
CURRENT ITEM
SAVE ITEM ITEM UPDATED
TO NOTE LIST NAVIGATION UPDATED
CHANGE COLOR CURRENT ITEM x 6
Action
State
150. Demo time(2)!
OPEN EDIT ITEM NAVIGATION UPDATED
FETCH ITEM
DETAILS
CURRENT ITEM
SAVE ITEM ITEM UPDATED
TO NOTE LIST NAVIGATION UPDATED
FETCH LIST
ITEMS
LIST ITEMS
CHANGE COLOR CURRENT ITEM x 6
Action
State
162. License
(cc) 2017 César Valiente.
Some rights reserved.
This document is distributed under the Creative
Commons Attribution-ShareAlike 3.0 license, available in
http://creativecommons.org/licenses/by-sa/3.0/
163. Image licenses
Flux and Redux images are property of Facebook.
Emojis by Emoji One (CC-BY): http://emojione.com/