Presentation about dependency injection library for Akka actors:
https://github.com/wilaszekg/Scala-Dynamic-DI
Covers the approach details and basics of type-level programming in Scala and Shapeless necessary for understanding
implementation.
ScaLAB conference
Wrocław, 25.06.2016
Gail villanueva add muscle to your wordpress sitereferences
Gail Villanueva presented ways to add functionality to WordPress websites, including creating custom post types, taxonomies, fields and templates. She demonstrated how to build a job listing site, portfolio, or online store using WordPress. Useful plugins were recommended for custom post types, portfolios, job listings and e-commerce. The presentation provided code examples for custom fields, templates and queries.
Adding Custom Fields to your WooCommerce products are a great way to show custom data on your product pages. This presentation will show you how to add Custom Fields to your Simple & Grouped products as well as adding them to Variable Products.
The document discusses the decorator pattern and how it can be used to add functionality to objects at runtime as an alternative to inheritance. It provides examples of how the decorator pattern can be used to dynamically add different discount strategies to a product object without modifying the core product class. The composite pattern is also introduced as a way to group different discount strategies together to calculate a total discount amount.
FOSS projects struggle to balance the needs of communities, investors, and enterprise customers. While VC funding and enterprise support allow contributors to work on projects full-time, it also forces projects to prioritize business concerns over communities. This impacts the feature roadmap and ability to engage communities. For FOSS to thrive long-term, projects need sustainable models where they can offer services to reach profitability and fund community-oriented work, without losing focus. New models of coalition funding and vendor management may help support broader FOSS ecosystems.
The document discusses WooCommerce CRUD (Create, Read, Update, Delete) and data stores. It explains that CRUD objects allow developers to interact with WooCommerce resource types like orders, products, and customers in a standardized way without needing to know the underlying data storage details. Data stores provide an abstraction layer between CRUD objects and the actual data storage, which could be custom post types, custom tables, external services, or other options. The document provides examples of how CRUD objects and data stores work in WooCommerce, and guidance for developers creating custom CRUD functionality in extensions.
Pig and Java MapReduce are compared for analyzing customer product data stored in Hadoop. Pig Latin is found to be more readable and maintainable due to its SQL-like syntax and limited predefined functions. However, Java MapReduce may have better performance and tooling support from IDEs. The document shows Pig and Java code to calculate top products, average views/purchases, and average purchase amount for each customer group. The Java code uses custom DTOs and is more complex overall.
Custom post types in WordPress allow users to define and manage additional content types beyond the default posts and pages. They provide a structured way to represent and organize different types of content like products, events, movies, or real estate listings. Custom post types are defined and registered using the register_post_types() function, which specifies labels, whether it is public or has an archive, and other options. They can then be queried, displayed on templates, and given custom taxonomies and meta fields for a fully customized content model.
Redux follows three principles: single source of truth, state is read-only, and changes are made with pure functions. It uses stores to hold application state, reducers to update state in response to actions, and middleware to extend functionality. React is commonly used with Redux by binding components to the store and dispatching actions.
Gail villanueva add muscle to your wordpress sitereferences
Gail Villanueva presented ways to add functionality to WordPress websites, including creating custom post types, taxonomies, fields and templates. She demonstrated how to build a job listing site, portfolio, or online store using WordPress. Useful plugins were recommended for custom post types, portfolios, job listings and e-commerce. The presentation provided code examples for custom fields, templates and queries.
Adding Custom Fields to your WooCommerce products are a great way to show custom data on your product pages. This presentation will show you how to add Custom Fields to your Simple & Grouped products as well as adding them to Variable Products.
The document discusses the decorator pattern and how it can be used to add functionality to objects at runtime as an alternative to inheritance. It provides examples of how the decorator pattern can be used to dynamically add different discount strategies to a product object without modifying the core product class. The composite pattern is also introduced as a way to group different discount strategies together to calculate a total discount amount.
FOSS projects struggle to balance the needs of communities, investors, and enterprise customers. While VC funding and enterprise support allow contributors to work on projects full-time, it also forces projects to prioritize business concerns over communities. This impacts the feature roadmap and ability to engage communities. For FOSS to thrive long-term, projects need sustainable models where they can offer services to reach profitability and fund community-oriented work, without losing focus. New models of coalition funding and vendor management may help support broader FOSS ecosystems.
The document discusses WooCommerce CRUD (Create, Read, Update, Delete) and data stores. It explains that CRUD objects allow developers to interact with WooCommerce resource types like orders, products, and customers in a standardized way without needing to know the underlying data storage details. Data stores provide an abstraction layer between CRUD objects and the actual data storage, which could be custom post types, custom tables, external services, or other options. The document provides examples of how CRUD objects and data stores work in WooCommerce, and guidance for developers creating custom CRUD functionality in extensions.
Pig and Java MapReduce are compared for analyzing customer product data stored in Hadoop. Pig Latin is found to be more readable and maintainable due to its SQL-like syntax and limited predefined functions. However, Java MapReduce may have better performance and tooling support from IDEs. The document shows Pig and Java code to calculate top products, average views/purchases, and average purchase amount for each customer group. The Java code uses custom DTOs and is more complex overall.
Custom post types in WordPress allow users to define and manage additional content types beyond the default posts and pages. They provide a structured way to represent and organize different types of content like products, events, movies, or real estate listings. Custom post types are defined and registered using the register_post_types() function, which specifies labels, whether it is public or has an archive, and other options. They can then be queried, displayed on templates, and given custom taxonomies and meta fields for a fully customized content model.
Redux follows three principles: single source of truth, state is read-only, and changes are made with pure functions. It uses stores to hold application state, reducers to update state in response to actions, and middleware to extend functionality. React is commonly used with Redux by binding components to the store and dispatching actions.
Getting the Most Out of jQuery Widgetsvelveeta_512
The document discusses strategies for building modular widgets in jQuery. It recommends thinking of widgets as small, decoupled components that communicate through events. Components should subscribe to and respond to events from other components, with references only going downward between layers. Each layer consumes events from lower layers and publishes events upward. The document also recommends decorating widget functions to add logging or other functionality.
Buyers appreciate the catalog experience; they certainly don’t miss the avalanche of item listings. Sellers also like providing catalog experiences; their items get more exposure. With eBay’s built-in product definitions, sellers don’t need to take valuable time writing product descriptions or item specifics or even providing photos—eBay’s built-in product definitions take goods quickly to market. New this year: creating your own product listing within the eBay catalog using UPC codes and brand MPNs.
The document discusses the architecture of a shopping cart system and how to make it easily testable and extensible. It recommends separating the core logic from session and database handling, and making frequently changing features into plugins. It also suggests simplifying the structure for easier testing by using storage instead of sessions, and DAO instead of databases during tests. The storage abstraction layer is implemented to operate on different mediums like arrays or sessions.
The document describes a proposed RESTful API design for an online retail system. It outlines several main services and their resources, including a Retail service with orders, products, and users; a Geo service to calculate distances; a Warehouse service to manage inventory and fulfill orders; a Dispatcher service to handle shipping quotes and orders; and a Supplier service. It provides examples of requests and responses for common operations like placing an order, obtaining shipping quotes, and reserving and confirming inventory. The document aims to define autonomous, stateless services that communicate over HTTP and use standard media types.
Symfony World - Symfony components and design patternsŁukasz Chruściel
There are so many Symfony components already, and they have some pretty neat perks. But have you seen them in action?
Design patterns are not a silver bullet. They will never resolve your problem on their own. On the other hand, design patterns provide a common ground for developers without going into details and could be used as building bricks to solve some more advanced problems.
During my presentation, I will take a closer look and explain the appliance of selected design patterns. What is more, I will take advantage of the Symfony ecosystem to implement them with ease.
I will do the presentation on sample code that developers will understand at all levels of expertise.
Building complex User Interfaces with Sitecore and ReactJonne Kats
- React is a JavaScript library developed by Facebook that is used by companies like AirBnb, Netflix, and Twitter.
- React focuses only on the view layer of MVC.
- It uses a virtual DOM for rendering UI rather than directly manipulating the real DOM, allowing for faster re-renders and more efficient change detection.
Migrations allow you to define and manage changes to your database schema over time. The document discusses ActiveRecord migrations, which provide a way to iteratively improve the database schema by adding, removing, and changing tables and columns. It also covers generating and rolling back migrations, common migration methods like create_table and add_column, and using migrations to support models and testing.
Making Magento flying like a rocket! (A set of valuable tips for developers)Ivan Chepurnyi
Ivan Chepurnyi gives tips for optimizing Magento store performance. He discusses common developer mistakes like using full collection loads when not needed and loading product models on every item. He provides solutions like adding attributes to collections and using flat catalog. For high-traffic stores, he recommends optimizing CMS block caching, top menu caching, and preloading catalog price rules. Ivan also discusses using Varnish and reducing unnecessary AJAX calls.
This document introduces Apostrophe, a Symfony-powered content management system (CMS) that aims to be easy for clients to use without specialized training. It discusses key goals like extensibility and preventing unintentional changes. The document outlines features like in-context editing, media management, and engines for multiple content types. It also covers how developers can extend Apostrophe through slots, forms, and actions following Symfony patterns. Virtual pages, routing, and JavaScript integration are presented as techniques enabling scalability.
Event sourcing w pigułce czyli podróże w czasie i odporność na coraz to bardziej kreatywne wymagania biznesowe. Kiedy, jak i po co tworzyć naturalny log wydarzeń Twojej aplikacji - plusy i minusy wzorca, przykłady implementacji, event sourcing a CQRS.
The document summarizes key points from a WordPress meetup discussion on plugin development:
- Mostafa Soufi discussed why developers make plugins and what plugins are comprised of. He suggested starting a new plugin by creating directories and files and adding a readme file.
- Navid Kashani recommended focusing on support from the beginning by improving support processes, solving issues proactively, setting metrics, and using a central support channel like Slack. Hiring a support person is not necessary initially.
- The discussion covered plugin best practices like internationalization, shortcodes, activation hooks, caching with transients, security techniques, and answering questions from attendees.
This document summarizes an Akka Persistence webinar. It discusses key features of Akka Persistence like storing application state after crashes, modeling domain events, and benefits like auditing and scalability. It also provides examples of using processors, eventsourced processors, views, channels, and cluster sharding with Akka Persistence. The webinar recommends further resources for learning more about Akka Persistence.
Building Commerce into Mobile Apps with Shopify's Android Buy SDKJosh Brown
The Android Buy SDK allows developers to integrate Shopify stores into their Android apps. It uses GraphQL to retrieve product, collection, and customer data from a Shopify store and supports features like searching, filtering, checkout, and Android Pay integration. Developers can authenticate with the SDK using their Shopify API key, define GraphQL queries to fetch store data, process checkouts including web and Android Pay options, and handle customer account creation and login.
This document discusses how to register and display sidebars in a WordPress theme. It explains that sidebars allow users to add widgets to widgetized areas of a theme. To register a sidebar, the register_sidebar() function is used, specifying parameters like the sidebar name and ID. Sidebars are then displayed using the dynamic_sidebar() and get_sidebar() functions, which can be called in sidebar.php template files. Default widgets can also be set to initially populate sidebars.
This document provides an overview of Backbone.js and how it can be used to build dynamic web applications. It discusses the main Backbone components:
- Models represent single data objects and can be validated.
- Collections hold ordered sets of models and can fetch data from the server.
- Views handle the display and interaction of data from models and collections.
- Routers map URLs to functions that control the application flow.
The document then gives an example of using Backbone to build a simple shopping cart application with Products and Cart views, demonstrating how the components work together.
This document discusses various ways to customize WooCommerce. It recommends picking a maintained theme like Storefront that is easily customizable. Customizations can be made through child themes, plugins, or custom code using filters and actions. Template overrides provide another way to customize by overriding specific templates in the theme.
The document discusses ES6 patterns used in Redux code. It explains how Redux uses functional programming patterns like higher-order functions, pure functions, and immutable data structures. Specifically, it analyzes code from Redux that uses arrow functions, rest/spread syntax, and avoids mutations to create middleware and handle state updates immutably. Reading wild code helps improve the skill of code comprehension and builds intuition about how to apply new patterns.
Workshop sobre React Native realizado pela Vizir Software Studio (http://www.vizir.com.br) para Natura.
OVERVIEW
Desenvolvimento nativo
Desenvolvimento híbrido
Frameworks disponíveis
Ionic
NativeScript
Xamarin
React Native
REACT & REACT NATIVE
Componentes
React Components
Lifecycle
Tudo pode ser Javascript
JSX
CSS em JSON
Virtual DOM
Benefícios
Futuro
REACT NATIVE
Componentes & APIs
Comunidade
Utilizando bibliotecas nativas
Comportamentos específicos de cada plataforma
Ferramentas
Code Push
RNPM
BOAS PRÁTICAS
Fluxo de dados da aplicação
Testando seus componentes
Como estruturamos as aplicações
GITHUB SAMPLE APP
https://github.com/Vizir/ReactNativeWorkshop
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Atwix
The document discusses pricing in Magento 2. It covers the different types of prices that can be implemented including regular price, sale price, taxes, discounts. It also describes how pricing is organized through entities and templates to make it flexible and customizable. Code examples are provided to demonstrate how pricing is calculated and displayed for products.
Flutter is a popular open source, cross-platform framework developed by Google. In this webinar we'll explore Flutter and its architecture, delve into the Flutter Embedder and Flutter’s Dart language, discover how to leverage Flutter for embedded device development, learn about Automotive Grade Linux (AGL) and its consortium and understand the rationale behind AGL's choice of Flutter for next-gen IVI systems. Don’t miss this opportunity to discover whether Flutter is right for your project.
Getting the Most Out of jQuery Widgetsvelveeta_512
The document discusses strategies for building modular widgets in jQuery. It recommends thinking of widgets as small, decoupled components that communicate through events. Components should subscribe to and respond to events from other components, with references only going downward between layers. Each layer consumes events from lower layers and publishes events upward. The document also recommends decorating widget functions to add logging or other functionality.
Buyers appreciate the catalog experience; they certainly don’t miss the avalanche of item listings. Sellers also like providing catalog experiences; their items get more exposure. With eBay’s built-in product definitions, sellers don’t need to take valuable time writing product descriptions or item specifics or even providing photos—eBay’s built-in product definitions take goods quickly to market. New this year: creating your own product listing within the eBay catalog using UPC codes and brand MPNs.
The document discusses the architecture of a shopping cart system and how to make it easily testable and extensible. It recommends separating the core logic from session and database handling, and making frequently changing features into plugins. It also suggests simplifying the structure for easier testing by using storage instead of sessions, and DAO instead of databases during tests. The storage abstraction layer is implemented to operate on different mediums like arrays or sessions.
The document describes a proposed RESTful API design for an online retail system. It outlines several main services and their resources, including a Retail service with orders, products, and users; a Geo service to calculate distances; a Warehouse service to manage inventory and fulfill orders; a Dispatcher service to handle shipping quotes and orders; and a Supplier service. It provides examples of requests and responses for common operations like placing an order, obtaining shipping quotes, and reserving and confirming inventory. The document aims to define autonomous, stateless services that communicate over HTTP and use standard media types.
Symfony World - Symfony components and design patternsŁukasz Chruściel
There are so many Symfony components already, and they have some pretty neat perks. But have you seen them in action?
Design patterns are not a silver bullet. They will never resolve your problem on their own. On the other hand, design patterns provide a common ground for developers without going into details and could be used as building bricks to solve some more advanced problems.
During my presentation, I will take a closer look and explain the appliance of selected design patterns. What is more, I will take advantage of the Symfony ecosystem to implement them with ease.
I will do the presentation on sample code that developers will understand at all levels of expertise.
Building complex User Interfaces with Sitecore and ReactJonne Kats
- React is a JavaScript library developed by Facebook that is used by companies like AirBnb, Netflix, and Twitter.
- React focuses only on the view layer of MVC.
- It uses a virtual DOM for rendering UI rather than directly manipulating the real DOM, allowing for faster re-renders and more efficient change detection.
Migrations allow you to define and manage changes to your database schema over time. The document discusses ActiveRecord migrations, which provide a way to iteratively improve the database schema by adding, removing, and changing tables and columns. It also covers generating and rolling back migrations, common migration methods like create_table and add_column, and using migrations to support models and testing.
Making Magento flying like a rocket! (A set of valuable tips for developers)Ivan Chepurnyi
Ivan Chepurnyi gives tips for optimizing Magento store performance. He discusses common developer mistakes like using full collection loads when not needed and loading product models on every item. He provides solutions like adding attributes to collections and using flat catalog. For high-traffic stores, he recommends optimizing CMS block caching, top menu caching, and preloading catalog price rules. Ivan also discusses using Varnish and reducing unnecessary AJAX calls.
This document introduces Apostrophe, a Symfony-powered content management system (CMS) that aims to be easy for clients to use without specialized training. It discusses key goals like extensibility and preventing unintentional changes. The document outlines features like in-context editing, media management, and engines for multiple content types. It also covers how developers can extend Apostrophe through slots, forms, and actions following Symfony patterns. Virtual pages, routing, and JavaScript integration are presented as techniques enabling scalability.
Event sourcing w pigułce czyli podróże w czasie i odporność na coraz to bardziej kreatywne wymagania biznesowe. Kiedy, jak i po co tworzyć naturalny log wydarzeń Twojej aplikacji - plusy i minusy wzorca, przykłady implementacji, event sourcing a CQRS.
The document summarizes key points from a WordPress meetup discussion on plugin development:
- Mostafa Soufi discussed why developers make plugins and what plugins are comprised of. He suggested starting a new plugin by creating directories and files and adding a readme file.
- Navid Kashani recommended focusing on support from the beginning by improving support processes, solving issues proactively, setting metrics, and using a central support channel like Slack. Hiring a support person is not necessary initially.
- The discussion covered plugin best practices like internationalization, shortcodes, activation hooks, caching with transients, security techniques, and answering questions from attendees.
This document summarizes an Akka Persistence webinar. It discusses key features of Akka Persistence like storing application state after crashes, modeling domain events, and benefits like auditing and scalability. It also provides examples of using processors, eventsourced processors, views, channels, and cluster sharding with Akka Persistence. The webinar recommends further resources for learning more about Akka Persistence.
Building Commerce into Mobile Apps with Shopify's Android Buy SDKJosh Brown
The Android Buy SDK allows developers to integrate Shopify stores into their Android apps. It uses GraphQL to retrieve product, collection, and customer data from a Shopify store and supports features like searching, filtering, checkout, and Android Pay integration. Developers can authenticate with the SDK using their Shopify API key, define GraphQL queries to fetch store data, process checkouts including web and Android Pay options, and handle customer account creation and login.
This document discusses how to register and display sidebars in a WordPress theme. It explains that sidebars allow users to add widgets to widgetized areas of a theme. To register a sidebar, the register_sidebar() function is used, specifying parameters like the sidebar name and ID. Sidebars are then displayed using the dynamic_sidebar() and get_sidebar() functions, which can be called in sidebar.php template files. Default widgets can also be set to initially populate sidebars.
This document provides an overview of Backbone.js and how it can be used to build dynamic web applications. It discusses the main Backbone components:
- Models represent single data objects and can be validated.
- Collections hold ordered sets of models and can fetch data from the server.
- Views handle the display and interaction of data from models and collections.
- Routers map URLs to functions that control the application flow.
The document then gives an example of using Backbone to build a simple shopping cart application with Products and Cart views, demonstrating how the components work together.
This document discusses various ways to customize WooCommerce. It recommends picking a maintained theme like Storefront that is easily customizable. Customizations can be made through child themes, plugins, or custom code using filters and actions. Template overrides provide another way to customize by overriding specific templates in the theme.
The document discusses ES6 patterns used in Redux code. It explains how Redux uses functional programming patterns like higher-order functions, pure functions, and immutable data structures. Specifically, it analyzes code from Redux that uses arrow functions, rest/spread syntax, and avoids mutations to create middleware and handle state updates immutably. Reading wild code helps improve the skill of code comprehension and builds intuition about how to apply new patterns.
Workshop sobre React Native realizado pela Vizir Software Studio (http://www.vizir.com.br) para Natura.
OVERVIEW
Desenvolvimento nativo
Desenvolvimento híbrido
Frameworks disponíveis
Ionic
NativeScript
Xamarin
React Native
REACT & REACT NATIVE
Componentes
React Components
Lifecycle
Tudo pode ser Javascript
JSX
CSS em JSON
Virtual DOM
Benefícios
Futuro
REACT NATIVE
Componentes & APIs
Comunidade
Utilizando bibliotecas nativas
Comportamentos específicos de cada plataforma
Ferramentas
Code Push
RNPM
BOAS PRÁTICAS
Fluxo de dados da aplicação
Testando seus componentes
Como estruturamos as aplicações
GITHUB SAMPLE APP
https://github.com/Vizir/ReactNativeWorkshop
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Atwix
The document discusses pricing in Magento 2. It covers the different types of prices that can be implemented including regular price, sale price, taxes, discounts. It also describes how pricing is organized through entities and templates to make it flexible and customizable. Code examples are provided to demonstrate how pricing is calculated and displayed for products.
Similar to Typesafe dependency injection in reactive applications (20)
Flutter is a popular open source, cross-platform framework developed by Google. In this webinar we'll explore Flutter and its architecture, delve into the Flutter Embedder and Flutter’s Dart language, discover how to leverage Flutter for embedded device development, learn about Automotive Grade Linux (AGL) and its consortium and understand the rationale behind AGL's choice of Flutter for next-gen IVI systems. Don’t miss this opportunity to discover whether Flutter is right for your project.
Artificia Intellicence and XPath Extension FunctionsOctavian Nadolu
The purpose of this presentation is to provide an overview of how you can use AI from XSLT, XQuery, Schematron, or XML Refactoring operations, the potential benefits of using AI, and some of the challenges we face.
Transform Your Communication with Cloud-Based IVR SolutionsTheSMSPoint
Discover the power of Cloud-Based IVR Solutions to streamline communication processes. Embrace scalability and cost-efficiency while enhancing customer experiences with features like automated call routing and voice recognition. Accessible from anywhere, these solutions integrate seamlessly with existing systems, providing real-time analytics for continuous improvement. Revolutionize your communication strategy today with Cloud-Based IVR Solutions. Learn more at: https://thesmspoint.com/channel/cloud-telephony
How Can Hiring A Mobile App Development Company Help Your Business Grow?ToXSL Technologies
ToXSL Technologies is an award-winning Mobile App Development Company in Dubai that helps businesses reshape their digital possibilities with custom app services. As a top app development company in Dubai, we offer highly engaging iOS & Android app solutions. https://rb.gy/necdnt
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Łukasz Chruściel
No one wants their application to drag like a car stuck in the slow lane! Yet it’s all too common to encounter bumpy, pothole-filled solutions that slow the speed of any application. Symfony apps are not an exception.
In this talk, I will take you for a spin around the performance racetrack. We’ll explore common pitfalls - those hidden potholes on your application that can cause unexpected slowdowns. Learn how to spot these performance bumps early, and more importantly, how to navigate around them to keep your application running at top speed.
We will focus in particular on tuning your engine at the application level, making the right adjustments to ensure that your system responds like a well-oiled, high-performance race car.
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemPeter Muessig
Learn about the latest innovations in and around OpenUI5/SAPUI5: UI5 Tooling, UI5 linter, UI5 Web Components, Web Components Integration, UI5 2.x, UI5 GenAI.
Recording:
https://www.youtube.com/live/MSdGLG2zLy8?si=INxBHTqkwHhxV5Ta&t=0
Unveiling the Advantages of Agile Software Development.pdfbrainerhub1
Learn about Agile Software Development's advantages. Simplify your workflow to spur quicker innovation. Jump right in! We have also discussed the advantages.
Microservice Teams - How the cloud changes the way we workSven Peters
A lot of technical challenges and complexity come with building a cloud-native and distributed architecture. The way we develop backend software has fundamentally changed in the last ten years. Managing a microservices architecture demands a lot of us to ensure observability and operational resiliency. But did you also change the way you run your development teams?
Sven will talk about Atlassian’s journey from a monolith to a multi-tenanted architecture and how it affected the way the engineering teams work. You will learn how we shifted to service ownership, moved to more autonomous teams (and its challenges), and established platform and enablement teams.
WWDC 2024 Keynote Review: For CocoaCoders AustinPatrick Weigel
Overview of WWDC 2024 Keynote Address.
Covers: Apple Intelligence, iOS18, macOS Sequoia, iPadOS, watchOS, visionOS, and Apple TV+.
Understandable dialogue on Apple TV+
On-device app controlling AI.
Access to ChatGPT with a guest appearance by Chief Data Thief Sam Altman!
App Locking! iPhone Mirroring! And a Calculator!!
SMS API Integration in Saudi Arabia| Best SMS API ServiceYara Milbes
Discover the benefits and implementation of SMS API integration in the UAE and Middle East. This comprehensive guide covers the importance of SMS messaging APIs, the advantages of bulk SMS APIs, and real-world case studies. Learn how CEQUENS, a leader in communication solutions, can help your business enhance customer engagement and streamline operations with innovative CPaaS, reliable SMS APIs, and omnichannel solutions, including WhatsApp Business. Perfect for businesses seeking to optimize their communication strategies in the digital age.
Most important New features of Oracle 23c for DBAs and Developers. You can get more idea from my youtube channel video from https://youtu.be/XvL5WtaC20A
8 Best Automated Android App Testing Tool and Framework in 2024.pdfkalichargn70th171
Regarding mobile operating systems, two major players dominate our thoughts: Android and iPhone. With Android leading the market, software development companies are focused on delivering apps compatible with this OS. Ensuring an app's functionality across various Android devices, OS versions, and hardware specifications is critical, making Android app testing essential.
64. Starting proxy actor with
Dependencies
val dependencies: Dependencies[Future[Products] :: Future[Promotions] ::
Future[Basket] :: Future[Shop] :: Future[ShopId] :: Future[User] :: HNil]
65. Starting proxy actor with
Dependencies
val dependencies: Dependencies[Future[Products] :: Future[Promotions] ::
Future[Basket] :: Future[Shop] :: Future[ShopId] :: Future[User] :: HNil]
val proxyProps = ProxyProps(PriceCalculator.props)
66. Starting proxy actor with
Dependencies
val dependencies: Dependencies[Future[Products] :: Future[Promotions] ::
Future[Basket] :: Future[Shop] :: Future[ShopId] :: Future[User] :: HNil]
val proxyProps: ProxyProps[Promotions :: Products :: HNil] =
ProxyProps(PriceCalculator.props)
67. Starting proxy actor with
Dependencies
val dependencies: Dependencies[Future[Products] :: Future[Promotions] ::
Future[Basket] :: Future[Shop] :: Future[ShopId] :: Future[User] :: HNil]
val proxyProps: ProxyProps[Promotions :: Products :: HNil] =
ProxyProps(PriceCalculator.props)
proxyProps(dependencies)
68. Starting proxy actor with
Dependencies
val dependencies: Dependencies[Future[Products] :: Future[Promotions] ::
Future[Basket] :: Future[Shop] :: Future[ShopId] :: Future[User] :: HNil]
val proxyProps: ProxyProps[Promotions :: Products :: HNil] =
ProxyProps(PriceCalculator.props)
proxyProps(dependencies)
69. Starting proxy actor with
Dependencies
val dependencies: Dependencies[Future[Products] :: Future[Promotions] ::
Future[Basket] :: Future[Shop] :: Future[ShopId] :: Future[User] :: HNil]
val proxyProps: ProxyProps[Promotions :: Products :: HNil] =
ProxyProps(PriceCalculator.props)
val props: Props = proxyProps(dependencies)
70. Starting proxy actor with
Dependencies
val dependencies: Dependencies[Future[Products] :: Future[Promotions] ::
Future[Basket] :: Future[Shop] :: Future[ShopId] :: Future[User] :: HNil]
val proxyProps: ProxyProps[Promotions :: Products :: HNil] =
ProxyProps(PriceCalculator.props)
val props: Props = proxyProps(dependencies)
context.actorOf(props)
71. Proxy behaviour
• runs all dependencies as one Future
• creates target actor once Future completes
• can retry running dependencies Future
• can re-run dependencies once target actor
terminates
72. Benefits of using Shapeless
• Clear and concise API
• Reusable dependencies definitions
• Efficient asynchronous computation - composing
futures
• Compiler ensures presence of all required
dependencies
74. Recursive implicit lookup
trait NotIn[T, L <: HList]
object NotIn {
implicit def notInHNil[T] = new NotIn[T, HNil] {}
implicit def notInList[H, T, L <: HList](implicit tIsNotH: <:!<[T, H],
hIsNotT: <:!<[H, T],
notInTail: NotIn[T, L]) =
new NotIn[T, H :: L] {}
}
75. Recursive implicit lookup
trait NotIn[T, L <: HList]
object NotIn {
implicit def notInHNil[T] = new NotIn[T, HNil] {}
implicit def notInList[H, T, L <: HList](implicit tIsNotH: <:!<[T, H],
hIsNotT: <:!<[H, T],
notInTail: NotIn[T, L]) =
new NotIn[T, H :: L] {}
}
76. Usage of recursive implicit
def addUnique[In <: HList, T](in: In, t: T)(implicit unique: NotIn[T, In]) =
t :: in
77. Usage of recursive implicit
def addUnique[In <: HList, T](in: In, t: T)(implicit unique: NotIn[T, In]) =
t :: in
addUnique(1 :: "txt" :: HNil, true)
addUnique(1 :: "txt" :: HNil, 2)
78. Usage of recursive implicit
def addUnique[In <: HList, T](in: In, t: T)(implicit unique: NotIn[T, In]) =
t :: in
addUnique(1 :: "txt" :: HNil, true)
79. Usage of recursive implicit
def addUnique[In <: HList, T](in: In, t: T)(implicit unique: NotIn[T, In]) =
t :: in
addUnique(1 :: "txt" :: HNil, true)
implicit NotIn[Boolean, Int :: String :: HNil]
?
80. Usage of recursive implicit
def addUnique[In <: HList, T](in: In, t: T)(implicit unique: NotIn[T, In]) =
t :: in
addUnique(1 :: "txt" :: HNil, true)
implicit NotIn[Boolean, Int :: String :: HNil]
?
81. Usage of recursive implicit
def addUnique[In <: HList, T](in: In, t: T)(implicit unique: NotIn[T, In]) =
t :: in
addUnique(1 :: "txt" :: HNil, true)
implicit NotIn[Boolean, Int :: String :: HNil]
implicit NotIn[Boolean, String :: HNil]
?
?
82. Usage of recursive implicit
def addUnique[In <: HList, T](in: In, t: T)(implicit unique: NotIn[T, In]) =
t :: in
addUnique(1 :: "txt" :: HNil, true)
implicit NotIn[Boolean, Int :: String :: HNil]
implicit NotIn[Boolean, String :: HNil]
?
?
83. Usage of recursive implicit
def addUnique[In <: HList, T](in: In, t: T)(implicit unique: NotIn[T, In]) =
t :: in
addUnique(1 :: "txt" :: HNil, true)
implicit NotIn[Boolean, Int :: String :: HNil]
implicit NotIn[Boolean, String :: HNil]
implicit NotIn[Boolean, HNil]
?
?
?
84. Usage of recursive implicit
def addUnique[In <: HList, T](in: In, t: T)(implicit unique: NotIn[T, In]) =
t :: in
addUnique(1 :: "txt" :: HNil, true)
implicit NotIn[Boolean, Int :: String :: HNil]
implicit NotIn[Boolean, String :: HNil]
implicit NotIn[Boolean, HNil]
?
?
85. Usage of recursive implicit
def addUnique[In <: HList, T](in: In, t: T)(implicit unique: NotIn[T, In]) =
t :: in
addUnique(1 :: "txt" :: HNil, true)
implicit NotIn[Boolean, Int :: String :: HNil]
implicit NotIn[Boolean, String :: HNil]
implicit NotIn[Boolean, HNil]
?
86. Usage of recursive implicit
def addUnique[In <: HList, T](in: In, t: T)(implicit unique: NotIn[T, In]) =
t :: in
addUnique(1 :: "txt" :: HNil, true)
implicit NotIn[Boolean, Int :: String :: HNil]
implicit NotIn[Boolean, String :: HNil]
implicit NotIn[Boolean, HNil]
87. Implicits usage in Shapeless
• Stating facts about types
• Often recursive:
• stop condition
• general condition
• Compiler finds implicit recursively
• Value resolved implicitly may have some functions -
the functions can do something useful for given types
88. More useful operations on
HList
val hList = 1 :: "text" :: List(1, 2, 3) :: HNil
val (removed: String :: Int :: HNil, rest: List[Int] :: HNil) =
hList.removeAll[String :: Int :: HNil]
89. More useful operations on
HList
val hList = 1 :: "text" :: List(1, 2, 3) :: HNil
val (removed: String :: Int :: HNil, rest: List[Int] :: HNil) =
hList.removeAll[String :: Int :: HNil]
90. More useful operations on
HList
val hList = 1 :: "text" :: List(1, 2, 3) :: HNil
val (removed: String :: Int :: HNil, rest: List[Int] :: HNil) =
hList.removeAll[String :: Int :: HNil]
91. More useful operations on
HList
val hList = 1 :: "text" :: List(1, 2, 3) :: HNil
val (removed: String :: Int :: HNil, rest: List[Int] :: HNil) =
hList.removeAll[String :: Int :: HNil]
def removeAll[SL <: HList](implicit removeAll : RemoveAll[L, SL])
: removeAll.Out = removeAll(l)
92. More useful operations on
HList
val hList = 1 :: "text" :: List(1, 2, 3) :: HNil
val (removed: String :: Int :: HNil, rest: List[Int] :: HNil) =
hList.removeAll[String :: Int :: HNil]
def removeAll[SL <: HList](implicit removeAll : RemoveAll[L, SL])
: removeAll.Out = removeAll(l)
trait RemoveAll[L <: HList, SL <: HList] {
type Out
def apply(t: L): Out
}
93. Recap
val shopDependency = FutureDependency(findShop)
val basketDependency = FutureDependency(findBasket)
val promotionsDependency = FutureDependency(findPromotions)
val productsDependency = ActorDependency(basketKeeper,
AskForProducts(_),
classOf[Products])
val props = ProxyProps(PriceCalculator.props)(Dependencies()
.given(shopId)
.given(user)
.requires(shopDependency)
.requires(basketDependency)
.requires(promotionsDependency)
.requires(productsDependency))
context.actorOf(props)
94. Declarative and functional
asynchronous dependencies
val shopDependency = FutureDependency(findShop)
val basketDependency = FutureDependency(findBasket)
val promotionsDependency = FutureDependency(findPromotions)
val productsDependency = ActorDependency(basketKeeper,
AskForProducts(_),
classOf[Products])
val props = ProxyProps(PriceCalculator.props)(Dependencies()
.given(shopId)
.given(user)
.requires(shopDependency)
.requires(basketDependency)
.requires(promotionsDependency)
.requires(productsDependency))
context.actorOf(props)
95. Type driven composition
val shopDependency = FutureDependency(findShop)
val basketDependency = FutureDependency(findBasket)
val promotionsDependency = FutureDependency(findPromotions)
val productsDependency = ActorDependency(basketKeeper,
AskForProducts(_),
classOf[Products])
val props = ProxyProps(PriceCalculator.props)(Dependencies()
.given(shopId)
.given(user)
.requires(shopDependency)
.requires(basketDependency)
.requires(promotionsDependency)
.requires(productsDependency))
context.actorOf(props)
96. Seamless futures
composition
val shopDependency = FutureDependency(findShop)
val basketDependency = FutureDependency(findBasket)
val promotionsDependency = FutureDependency(findPromotions)
val productsDependency = ActorDependency(basketKeeper,
AskForProducts(_),
classOf[Products])
val props = ProxyProps(PriceCalculator.props)(Dependencies()
.given(shopId)
.given(user)
.requires(shopDependency)
.requires(basketDependency)
.requires(promotionsDependency)
.requires(productsDependency))
context.actorOf(props)
97. Compile time checking
val shopDependency = FutureDependency(findShop)
val basketDependency = FutureDependency(findBasket)
val promotionsDependency = FutureDependency(findPromotions)
val productsDependency = ActorDependency(basketKeeper,
AskForProducts(_),
classOf[Products])
val props = ProxyProps(PriceCalculator.props)(Dependencies()
.given(shopId)
.given(user)
.requires(shopDependency)
.requires(basketDependency)
.requires(promotionsDependency)
.requires(productsDependency))
context.actorOf(props)
98. Less boilerplate
class
findShop: ShopId => Future[Shop],
findBasket: (User, Shop) => Future[Basket],
findPromotions: Shop => Future[Promotions],
basketKeeper: ActorRef)
private var
override def
super
for
shop <- findShop(shopId)
basket <- findBasket(user, shop)
promo <- findPromotions(shop)
}
}
}
override def
def
case
basketKeeper !
}
def
case
}
def
case
}
}
class PriceCalculator(products: Products, promotions: Promotions) extends Actor {
override def receive: Receive = {
case Calculate => sender ! promotions.price(products)
}
}