SlideShare uma empresa Scribd logo
1 de 114
@AndrewRota
Component-Based UI
Architectures for the Web
Andrew Rota | @andrewrota
ROME 24-25 MARCH 2017
@AndrewRota
bit.ly/components_codemotion
Slides online at:
@AndrewRota
UI frameworks today talk a lot
about “components.”
@AndrewRota
@AndrewRota
@AndrewRota
@AndrewRota
What does “component” even mean?
@AndrewRota
What does it mean to think about our user
interfaces in terms of components?
@AndrewRota
Andrew Rota
Boston, MA, USA
Software Architect at Wayfair
wayfair.com | wayfair.co.uk | wayfair.de
@AndrewRota
@AndrewRota
This is a talk about
architectural models.
@AndrewRota
“ All models are wrong, but
some are useful ”
George Box, statistician, Empirical Model-Building and Response Surfaces (1987)
@AndrewRota
New models present
new perspectives.
@AndrewRota
How do you model your web
application UI architecture?
@AndrewRota
Frontend UI
Server MVC
@AndrewRota
Server MVC
View Model Controller
@AndrewRota
Server MVC
Templates
Model Controller
@AndrewRota
Server MVC
Templates
Model Controller
Components
@AndrewRota
Let’s rethink this model.
@AndrewRota
What if UI components were first
class citizens?
@AndrewRota
Data Model
UI
Component
UI
Component
UI
Component
@AndrewRota
Data Model
UI
Component
UI
Component
UI
Component
Server
@AndrewRota
Data Model
UI
Component
UI
Component
UI
Component
Server
@AndrewRota
Data Model
UI
Component
UI
Component
UI
Component
Server
@AndrewRota
Let’s put aside the client/server split as an
implementation detail.
@AndrewRota
Let’s put aside the client/server split as an
implementation detail.*
* A very very important detail, just not one addressed in this model
@AndrewRota
Components are the defining
feature of user interfaces.
@AndrewRota
Data Model
UI
Component
UI
Component
UI
Component
@AndrewRota
UI
Component
UI
Component
UI
Component
@AndrewRota
Let’s put the focus on
components.
@AndrewRota
How do today’s web UI libraries
define components?
@AndrewRota
“A component is a custom HTML tag whose
behavior you implement using JavaScript and
whose appearance you describe using Handlebars
templates. They allow you to create reusable
controls…”
https://guides.emberjs.com/v1.10.0/concepts/core-concepts/#toc_components
This presentation is unaffiliated with the Ember project.
Ember is a trademark of Tilde Inc.
@AndrewRota
“A component controls a patch of screen
called a view.”
https://angular.io/docs/ts/latest/guide/architecture.html#!#components
@AndrewRota
“With Web Components, you can create
reusable custom elements that...break your
app up into right-sized components.”
https://www.polymer-project.org/1.0/
@AndrewRota
“Components let you split the UI into
independent, reusable pieces, and think
about each piece in isolation.”
https://facebook.github.io/react/
@AndrewRota
Let’s look at some <code>
@AndrewRota
Let’s look at some <code>
@AndrewRota
<music-playlist>
<music-playlist-item>
<h1>Symphony No. 40</h1>
<h2>Wolfgang Amadeus Mozart</h2>
</music-playlist-item>
</music-playlist>
<music-player track="1" playing />
@AndrewRota
<MusicPlaylist>
<MusicPlaylistItem>
<h1>Symphony No. 40</h1>
<h2>Wolfgang Amadeus Mozart</h2>
</MusicPlaylistItem>
</MusicPlaylist>
<MusicPlayer track={1} playing />
@AndrewRota
Defining components
@AndrewRota
const List = (props) => {
return (
<ul>
{props.items.map(item => (
<li key={item.id}>{item.text}</li>
))}
</ul>
);
}
@AndrewRota
const List = (props) => {
return (
<ul>
{props.items.map(item => (
<li key={item.id}>{item.text}</li>
))}
</ul>
);
}
Input
@AndrewRota
const List = (props) => {
return (
<ul>
{props.items.map(item => (
<li key={item.id}>{item.text}</li>
))}
</ul>
);
}
Output
@AndrewRota
Beyond the code, what are the
qualities of a component?
@AndrewRota
Composable Cohesive
Context
Independent
Colocated
@AndrewRota
Composable
Composable components can be nested within
other components.
@AndrewRota
<app-wrapper>
<app-header>
<app-navigation />
</app-header>
<app-body>
<app-content />
</app-body>
</app-wrapper>
@AndrewRota
Components are composed in a tree structure.
@AndrewRota
<my-nametag><strong>world</strong></my-nametag>
<div>
<h1>Hello, <slot></slot>.</h1>
</div>
<div>
<h1>Hello, <strong>world</strong>.</h1>
</div>
@AndrewRota
How composable are your components?
✅ - Can a component have children?
✅ - Do components define their interfaces?
✅ - ...with types?
✅ - Can you extend by composition?
@AndrewRota
Cohesive
Cohesive components contain the elements
necessary for its purpose.
@AndrewRota
“Cohesion within a module is the degree to
which the module's elements belong together.
In other words, it is a measure of how focused a
module is. The idea is not just to divide software
into arbitrary parts (i.e., modularity), but to keep
related issues in the same part.”
Software Engineering: Modern Approaches, 2nd ed. (pg. 352), Eric J. Braude, Michael E. Bernstein
@AndrewRota
How cohesive are your components?
✅ - Is there little “wiring-up” necessary?
✅ - Does a component have everything it needs?
✅ - If you change a property, how many places
does that change need to be made in?
@AndrewRota
Context-Independent
A context-independent component can be used
in different environments without modification.
@AndrewRota
How context independent are your components?
✅ - Can you “copy/paste” a component?
✅ - Can components define style boundaries?
✅ - ...error boundaries?
✅ - Do components require global state?
@AndrewRota
Colocated
A colocated component places related code in
the same place, regardless of technology.
@AndrewRota
Colocated
https://github.com/ant-design/ant-design/
@AndrewRota
Colocated
https://github.com/ant-design/ant-design/
Unit Tests
@AndrewRota
Colocated
https://github.com/ant-design/ant-design/
CSS Styles
(LESS)
@AndrewRota
Colocated
https://github.com/ant-design/ant-design/
Localization
@AndrewRota
Colocated
https://github.com/ant-design/ant-design/
Markdown files
with examples
@AndrewRota
How colocated are your components?
✅ - How many files does a component need?
✅ - What does the directory structure look like?
✅ - Can you review a component in once place?
@AndrewRota
So why component architectures?
@AndrewRota
What is software architecture?
@AndrewRota
“...an abstract system specification consisting
primarily of functional components described in
terms of their behaviors and interfaces and
component-component interconnections.”
Hayes-Roth, 1994, written for the ARPA Domain-Specific Software Architecture (DSSA) program
@AndrewRota
“...the organizational structure of a software system
including components, connections, constraints,
and rationale”
Clements, Kogut, 1994, The Software Architecture Renaissance
@AndrewRota
Software architecture ==
components + their connections
@AndrewRota
In a component-based UI architecture we treat UI
components and their connections as part of our
overall software architecture.
@AndrewRota
Components in the UI are no longer implementation
details, they’re a core unit of the overall system.
@AndrewRota
UI
Component
UI
Component
UI
Component
UI
Component
UI
Component
@AndrewRota
@AndrewRota
UI
Component
UI
Component
UI
Component
UI
Component
UI
Component
@AndrewRota
UI
Component
UI
Component
UI
Component
UI
Component
UI
Component
+ Client / Server Constraints
+ Platform Differences
+ Performance Considerations
+ Design / UX Concerns
@AndrewRota
Leverage components as the fundamental unit
when reasoning about UI architecture.
@AndrewRota
So why does this make sense for
user interfaces?
@AndrewRota
1. Components are familiar
2. Interfaces benefit from reusability
3. Abstraction can be shared across disciplines
@AndrewRota
Familiarity
<div>
<h1>Hello world</h1>
<img src="foo.jpg" />
</div>
HTML works a lot like components.
@AndrewRota
Familiarity
<div>
<h1>Hello world</h1>
<img src="foo.jpg" />
</div>
HTML works a lot like components.*
*see web components
@AndrewRota
<MusicPlaylist>
<MusicPlaylistItem>
<h1>Symphony No. 40</h1>
<h2>Wolfgang Amadeus Mozart</h2>
</MusicPlaylistItem>
</MusicPlaylist>
<MusicPlayer track={1} playing />
Familiarity
@AndrewRota
React.createElement(
MusicPlaylist, null, React.createElement(
MusicPlaylistItem, null, React.createElement(
"H1", null, "Symphony No. 40"
), React.createElement(
"H2", null, "Wolfgang Amadeus Mozart"
)
)
),
React.createElement(MusicPlayer,
{ track: 1, playing: true }
);
Familiarity
(there’s a reason JSX is so popular)
@AndrewRota
Reusability
The more components are composable, context-independent,
cohesive, and colocated, the more easily they can be shared.
@AndrewRota
Reusability
https://www.webcomponents.org
@AndrewRota
Reusability
https://react.rocks/?q=calendar
@AndrewRota
Shared Abstraction
UI work touches a lot of teams: design, product, and (often
multiple) engineering teams.
@AndrewRota
Shared Abstraction
Components as a UI concept can be useful across many different
types of teams and disciplines.
@AndrewRota
Shared Abstraction
https://material.io/guidelines/components/buttons.html#buttons-style
@AndrewRota
Shared Abstraction
https://material.io/guidelines/components/buttons.html#buttons-style
@AndrewRota
What are the challenges with a
component-based architecture?
@AndrewRota
1. State
2. Universality
@AndrewRota
State
Components define UI, not necessarily the state associated with
that UI.
@AndrewRota
State
But state is a core feature of software.
Especially UIs where state changes based on user input.
@AndrewRota
Managing state is hard
https://youtu.be/x7cQ3mrcKaY?t=15m55s
@AndrewRota
Start by separating state container components
from presentational components
@AndrewRota
Patterns for dealing with state
Manage state independently, and link up to components.
@AndrewRota
Patterns for dealing with state
Manage state independently, and link up to components.
@AndrewRota
Patterns for dealing with state
Colocate state queries/mutations within components.
@AndrewRota
Patterns for dealing with state
Colocate state queries/mutations within components.
@AndrewRota
Universality
@AndrewRota
Universality - across platforms?
Components for…
the web?
iOS apps?
Android apps?
desktop apps?
virtual reality?
@AndrewRota
Universality - across libraries?
Components for…
react?
angular?
ember?
polymer?
plain JavaScript?
@AndrewRota
What if there were a standard? What if all
components were interoperable?
@AndrewRota
I don’t think there’s a simple answer here.
@AndrewRota
Different frameworks have
different strengths and weaknesses.
@AndrewRota
Different platforms have different challenges.
@AndrewRota
I don’t think there’s a simple answer here.
@AndrewRota
I don’t think there’s a simple answer here.
Yet.
@AndrewRota
But maybe that’s ok.
@AndrewRota
Component-based architecture
is useful, independent of the implementation.
@AndrewRota
“ All models are wrong, but
some are useful ”
George Box, statistician, Empirical Model-Building and Response Surfaces (1987)
@AndrewRota
Is the component model useful
for describing web UIs?
@AndrewRota
Does a component-based UI model impact how
you think about your overall application
architecture?
@AndrewRota
Let’s elevate components to first class citizens
in our application architecture.
@AndrewRota
I think this is only the beginning...
@AndrewRota
User interface architecture is hard,
but components make it easier.
@AndrewRota
Grazie!
@AndrewRota
bit.ly/components_codemotion
Slides online at:

Mais conteúdo relacionado

Semelhante a Component Based UI Architectures for the Web

Semantic Web, an introduction for bioscientists
Semantic Web, an introduction for bioscientistsSemantic Web, an introduction for bioscientists
Semantic Web, an introduction for bioscientists
Emanuele Della Valle
 
Play framework: lessons learned
Play framework: lessons learnedPlay framework: lessons learned
Play framework: lessons learned
Peter Hilton
 
Web2 0-SOA InterAct2008
Web2 0-SOA InterAct2008Web2 0-SOA InterAct2008
Web2 0-SOA InterAct2008
guest1fb6e4
 

Semelhante a Component Based UI Architectures for the Web (20)

He stopped using for/while loops, you won't believe what happened next!
He stopped using for/while loops, you won't believe what happened next!He stopped using for/while loops, you won't believe what happened next!
He stopped using for/while loops, you won't believe what happened next!
 
Azure Media Services & Azure Search
Azure Media Services & Azure SearchAzure Media Services & Azure Search
Azure Media Services & Azure Search
 
Semantic Web, an introduction for bioscientists
Semantic Web, an introduction for bioscientistsSemantic Web, an introduction for bioscientists
Semantic Web, an introduction for bioscientists
 
DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...
DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...
DevDay 2018: Ulrich Deiters - Offline First - kein Netz, kein Fehler, zufried...
 
ljug-meetup-2023-03-hexagonal-architecture.pdf
ljug-meetup-2023-03-hexagonal-architecture.pdfljug-meetup-2023-03-hexagonal-architecture.pdf
ljug-meetup-2023-03-hexagonal-architecture.pdf
 
Use Web Skills To Build Mobile Apps
Use Web Skills To Build Mobile AppsUse Web Skills To Build Mobile Apps
Use Web Skills To Build Mobile Apps
 
Atomic design
Atomic designAtomic design
Atomic design
 
Play framework: lessons learned
Play framework: lessons learnedPlay framework: lessons learned
Play framework: lessons learned
 
Talk EclipseSirius Con - EIP Designer - 20151203
Talk EclipseSirius Con - EIP Designer - 20151203Talk EclipseSirius Con - EIP Designer - 20151203
Talk EclipseSirius Con - EIP Designer - 20151203
 
Design Growth, Максим Ткачук
Design Growth, Максим ТкачукDesign Growth, Максим Ткачук
Design Growth, Максим Ткачук
 
Client Building Functional webapps.
Client   Building Functional webapps.Client   Building Functional webapps.
Client Building Functional webapps.
 
Web2 0-SOA InterAct2008
Web2 0-SOA InterAct2008Web2 0-SOA InterAct2008
Web2 0-SOA InterAct2008
 
2016 SUTOL: React.js – High-Performance Client for Domino
2016 SUTOL: React.js – High-Performance Client for Domino2016 SUTOL: React.js – High-Performance Client for Domino
2016 SUTOL: React.js – High-Performance Client for Domino
 
Resources (Links) for 2016
Resources (Links) for 2016Resources (Links) for 2016
Resources (Links) for 2016
 
Optimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
Optimising Your Front End Workflow With Symfony, Twig, Bower and GulpOptimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
Optimising Your Front End Workflow With Symfony, Twig, Bower and Gulp
 
Twitter analysis by Kaify Rais
Twitter analysis by Kaify RaisTwitter analysis by Kaify Rais
Twitter analysis by Kaify Rais
 
Can you afford this? - Tailoring Technology for Individuals - Amy Dickens - C...
Can you afford this? - Tailoring Technology for Individuals - Amy Dickens - C...Can you afford this? - Tailoring Technology for Individuals - Amy Dickens - C...
Can you afford this? - Tailoring Technology for Individuals - Amy Dickens - C...
 
Angular Best Practices v2
Angular Best Practices v2Angular Best Practices v2
Angular Best Practices v2
 
HTML5: The Parts You Care About - 4/Nov/13 - PrDC Saskatoon, SK
HTML5: The Parts You Care About - 4/Nov/13 - PrDC Saskatoon, SKHTML5: The Parts You Care About - 4/Nov/13 - PrDC Saskatoon, SK
HTML5: The Parts You Care About - 4/Nov/13 - PrDC Saskatoon, SK
 
Busy Architects Guide to Modern Web Architecture in 2014
Busy Architects Guide to  Modern Web Architecture in 2014Busy Architects Guide to  Modern Web Architecture in 2014
Busy Architects Guide to Modern Web Architecture in 2014
 

Mais de Andrew Rota

Mais de Andrew Rota (17)

Integrating React.js Into a PHP Application: Dutch PHP 2019
Integrating React.js Into a PHP Application: Dutch PHP 2019Integrating React.js Into a PHP Application: Dutch PHP 2019
Integrating React.js Into a PHP Application: Dutch PHP 2019
 
Performant APIs with GraphQL and PHP (Dutch PHP 2019)
Performant APIs with GraphQL and PHP (Dutch PHP 2019)Performant APIs with GraphQL and PHP (Dutch PHP 2019)
Performant APIs with GraphQL and PHP (Dutch PHP 2019)
 
Getting Started with GraphQL && PHP
Getting Started with GraphQL && PHPGetting Started with GraphQL && PHP
Getting Started with GraphQL && PHP
 
Tutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHPTutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHP
 
Building a GraphQL API in PHP
Building a GraphQL API in PHPBuilding a GraphQL API in PHP
Building a GraphQL API in PHP
 
Client-Side Performance Monitoring (MobileTea, Rome)
Client-Side Performance Monitoring (MobileTea, Rome)Client-Side Performance Monitoring (MobileTea, Rome)
Client-Side Performance Monitoring (MobileTea, Rome)
 
Integrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationIntegrating React.js Into a PHP Application
Integrating React.js Into a PHP Application
 
Effectively Monitoring Client-Side Performance
Effectively Monitoring Client-Side PerformanceEffectively Monitoring Client-Side Performance
Effectively Monitoring Client-Side Performance
 
UI Rendering at Wayfair
UI Rendering at WayfairUI Rendering at Wayfair
UI Rendering at Wayfair
 
Better PHP-Frontend Integration with Tungsten.js
Better PHP-Frontend Integration with Tungsten.jsBetter PHP-Frontend Integration with Tungsten.js
Better PHP-Frontend Integration with Tungsten.js
 
Tungsten.js: Building a Modular Framework
Tungsten.js: Building a Modular FrameworkTungsten.js: Building a Modular Framework
Tungsten.js: Building a Modular Framework
 
Why Static Type Checking is Better
Why Static Type Checking is BetterWhy Static Type Checking is Better
Why Static Type Checking is Better
 
An Exploration of Frameworks – and Why We Built Our Own
An Exploration of Frameworks – and Why We Built Our OwnAn Exploration of Frameworks – and Why We Built Our Own
An Exploration of Frameworks – and Why We Built Our Own
 
The Complementarity of React and Web Components
The Complementarity of React and Web ComponentsThe Complementarity of React and Web Components
The Complementarity of React and Web Components
 
Web Components + Backbone: a Game-Changing Combination
Web Components + Backbone: a Game-Changing CombinationWeb Components + Backbone: a Game-Changing Combination
Web Components + Backbone: a Game-Changing Combination
 
Bem methodology
Bem methodologyBem methodology
Bem methodology
 
Web Components and Modular CSS
Web Components and Modular CSSWeb Components and Modular CSS
Web Components and Modular CSS
 

Último

%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 

Último (20)

Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 

Component Based UI Architectures for the Web