SlideShare ist ein Scribd-Unternehmen logo
1 von 164
Downloaden Sie, um offline zu lesen
Ur Domain Haz
Monoids?
Cyrille Martraire - @cyriux
"My first
encounter with FP
concepts was from
DDD"
A matter
of Taste
http://rosshirt.blogspot.fr/
The Code
Gourmet
(dedicated to @ziobrando)
FP
Passionate
developer
PARIS
Since 1999
@cyriux
Cyrille Martraire
Paris Software
Craftsmanship Community
http://www.meetup.com/paris-software-craftsmanship/
TDD
BDD
DDD
Legacy
WARNING
The	 following	 show	 features	 
no	 spectacular	 stunt,	 no	 live	 
coding,	 only	 trivial	 Java	 code.	 
You	 can	 re-create	 or	 re-enact	 
at	 home	 with	 no	 danger.
a bit personal
Adopted 2005
Still in love
...
What do DDD & FP
have in common?
FP = ?
http://www.jaider.net/archives/609-intro-to-functional-programming/
PURE
No State
No War
So what do
DDD & FP
have in
common?
Value Objects................................................................................................. 19
Learn one
and get the other
one for FREE!
DDD
FP
(OO)
NICE
STYLEof code
DDD+FP
= ?
Example
PLZ?
MONOIDZ!
@cyriux
Closure
Associativity
Neutral Element
only 3
numbers in
programming
0, 1, MANY
Monoid:
encapsulate
diversity inside
0, 1, MANY
Neutral Element
Element
Operation
Battle against
complexity
Encapsulate
details (unit...)
→ simple again
For a given interface I
find myself doing
often 0, 1, Many
OO FTW!
0, 1, MANY
NullObject
Implementation(s)
Composite
Identity Element
= NullObject
VatCalculation.NONE
Applied often:
→ scalable process
→ can grow to
very complex
complexity
Example
PLZ!
Numbers
int+int=int
(3+5)+2=3+(5+2)
0
Lists
(.)+(.,.)=(.,.,.)︎
(a︎)+(b︎,c)=(a︎, b)+(c)︎
()
Strings
"hello"+"world"
"cy"+"ri"+"lle"
""
look simplistic;
the key to very
complex behavior
The key to infinite
scalability!
The key to infinite
incremental
computing!
Hadoop x Storm
Composeability
Monoids ☛ reduce
Monoids ☛ domain
Monoids are
typical FP
FP: everything
is a value
Therefore:
Monoids are
values!
VALUE
OBJECTS
Immutable
Equals by value
Not Anemic
18°C
+ 16°C
= 34°C
returns  a  new  
instance
Change -> new instance
SIDE-EFFECT
-free
FUNCTIONS
Immutability
&
Side-effect-free
functions!
Value Object
A DDD pattern
to import FP-ish
values in OO
languages
“Functional-First” style
90%
“Functional-First” style
Value Objects
(Ok, gut feeling, I did’nt measure)
Money
(25, EUR)
+
(30, EUR)
=
(55, EUR)
(25, EUR)
+
(30, USD)
=
exception
Money
amount
currency
add(Money): Money
<<ValueObject>>
Cashflows
(Payments)
(25, EUR, today)
+
(30, EUR, today)
=
(55, EUR, today)
(25, EUR, today)
+
(30, EUR, next day)
=
exception
CashFlow
amount
currency
date
add(CashFlow):CashFlow
<<ValueObject>>
CLOSUREof
OPERATION
Cashflows
Sequences
(10, EUR, 20/03)
(30, EUR, 21/03)
(25, EUR, 21/03)
(12, EUR, 22/03)
(10, EUR, 20/03)
(55, EUR, 21/03)
(12, EUR, 22/03)
+
=
Cashflow Sequence
+
Cashflow Sequence
=
Cashflow Sequence
Object
Arithmetics
This is how domain
experts THINK
about it
SAY
SKETCH
Ranges
[1, 3]
Union
[2, 4]
=
[1, 4]
[1, 3]
Union
[2, 4]
=
[1, 4] ][
Predicates
Filter
AND
Filter
=
Filter
Filter
AND
Filter
=
Filter
Always
True
Filter
OR
Filter
=
Filter
Filter
OR
Filter
=
Filter
Always
False
Grants
Read, Write, Execute
"most secure wins"
r + w = r
w + x = w
Configuration
Maps
Color BLUE
Enable True
Timeout 30 +
=
Color RED
Enable False
Timeout 25
Desk FX
Color RED
Enable True
Timeout 25
Desk FX
Default Desk-specific
Color BLUE
Enable True
Timeout 30 +
=
Color RED
Enable False
Timeout 25
Desk FX
Color RED
Enable True
Timeout 25
Desk FX
Default Desk-specific
overw
rite
logical OR
m
in
Color BLUE
Enable True
Timeout 30 +
=
Color RED
Enable False
Timeout 25
Desk FX
Color RED
Enable True
Timeout 25
Desk FX
Default Desk-specific
overw
rite
logical OR
m
in
Values are monoids too!
Color BLUE
Enable True
Timeout 30 +
=
Neutral Element
Color BLUE
Enable True
Timeout 30
Color BLUE
Enable True
Timeout 30 +
=
Color BLUE
Enable True
Timeout 30
Value Objects may be
*BIG* object trees!
(DOM)
Non-Linear Stuff
(average, std dev,
K-clustering,
barycenters...)
Average + Average
= WRONG
Average + Average
Not Composeable!
avg = sum / count
avg = sum / count
avg = sum / count
avg = sum / count
+
avg = sum / count
avg = sum / count
+ +
avg = sum / count
avg = sum / count
avg = sum / count
+
=
+
=
(sum, count)
(sum, count)
(sum, count)
+
=
Average
(sum, sum2, count)
(sum, sum2, count)
(sum, sum2, count)
+
=
Std deviation
Can model as a
monoid even non-
linear stuff!
MOAR
MATHS
PLZ!
Monoid several times...
toString(): String
union(MailingList): MailingList
intersection(MailingList): Mailing
nobody(): MailingList
everybody(): MailingList
MailingList
Space
Vectors
average temperature
= t1.add(t2)
.scale(1/2)
returns  a  new  
instance
Change -> new instance
Space Vector
toCelsius(): Temperature
toFarenheit(): Temperature
add(Temperature): Temperature
scale(double): Temperature
Temperature
Why
is it useful?
(10, EUR, 20/03)
(30, EUR, 21/03)
(25, EUR, 21/03)
(12, EUR, 22/03)
(10, EUR, 20/03)
(55, EUR, 21/03)
(12, EUR, 22/03)
+
=
Cashflow Sequence
+
Cashflow Sequence
=
Cashflow Sequence
This is how domain
experts THINK
about it
SAY
SKETCH
DECLARATIVE
STYLE
Much less code
Much less bugs
// without monoids
PaymentsFees(...)
PaymentsFeesWithOptions(...)
PaymentsFeesWithInsuranceAndOptions(...)
PaymentsFeesWithInsurance(...)
NoFeesButInsurance(...)
...
// with monoids
fees(...) : Payments
options(...) : Payments
insurance(...) : Payments
Payments.add(Payments) : Payments
side-effect-
free
operation
Very easy to test
input output
Much less stuff to
learn
1 interface
to rule them all
Cashflow Sequence
+
Cashflow Sequence
=
Cashflow Sequence
ESTABLISHED
FORMALISMS
Monoid/Vector
Spaces/Cyclic Group
Literature
Documented
@annotations
@Monoid()
intersection(MailingList): MailingList
@NeutralElement("intersection")
nobody(): MailingList
MailingList
LIVINGDOCUMENTATION
Signal to Noise ratio
http://www.flickr.com/photos/28471130@N07/2666802097
Signal to Noise Ratio
• SNR ≥ 80 %
• Signal (VO): CashFlow.multiply(),
CashFlowSequence.add(), .negate(),
truncate(),
Money.add(), .times(), .opposite(),
Fixing, FinancialProduct,
BankHolidays, ReferenceData
• Noise: CashFlowBuilder,
CompositeEngine, ProductFactory,
BankHolidaysDecorator
Write code that
tells the business
domain stories
@annotations
@Monoid()
intersection(MailingList): MailingList
@NeutralElement("intersection")
nobody(): MailingList
MailingList
Domain-Specific
@Monoid()
overlaping(MailingList): MailingList
@NeutralElement("overlaping")
nobody(): MailingList
MailingList
Value Objects have
domain-specific
flavors too:
Convention, Policy,
Status, Quantity,
Observation...
- Annotate domain-relevant classes
- Custom Doclet to export Excel-
formatted glossary of every domain
concept
Glossary from Code
Sent directly to end customers
Glossary from Code
SELF-
EXPLAINING
VALUES
WeWant:
Traceability
of processing
No worry!
Just enrich our
types
Just enrich our
types
Just enrich our
types
label field
Monad-ish
No logging needed
Each value stores
its history
http://stuartcook.files.wordpress.com/2010/11/happy-monkey.jpg
In Closing
Invest time:
Learn DDD, and get
free FP exposure
A paradox:
FP influence helps
craft better Object-
Oriented code!
Monoids
are good:
Eat Them!
LOOK 4 Ur
DOMAIN
MONOIDZ!
Also learn other
maths structures
Wikipedia is
your friend!
DDD+FP
=
http://wadler.blogspot.fr/2008/04/functional-programming-is-beautiful.html
Taste-Driven
Development
TDD
Questions? Did you try
similar things too?
Let’s discuss!
@cyriux
Follow me @cyriux
Slides: slideshare.net/cyriux
Blog: cyrille.martraire.com
In Paris? Join !
Merci

Weitere ähnliche Inhalte

Was ist angesagt?

String Handling in c++
String Handling in c++String Handling in c++
String Handling in c++
Fahim Adil
 

Was ist angesagt? (19)

New presentation oop
New presentation oopNew presentation oop
New presentation oop
 
Bridges
BridgesBridges
Bridges
 
Lecture on graphics
Lecture on graphicsLecture on graphics
Lecture on graphics
 
N-Queens Combinatorial Problem - Polyglot FP for fun and profit - Haskell and...
N-Queens Combinatorial Problem - Polyglot FP for fun and profit - Haskell and...N-Queens Combinatorial Problem - Polyglot FP for fun and profit - Haskell and...
N-Queens Combinatorial Problem - Polyglot FP for fun and profit - Haskell and...
 
Turbo C Graphics and Mouse Programming
Turbo C Graphics and Mouse ProgrammingTurbo C Graphics and Mouse Programming
Turbo C Graphics and Mouse Programming
 
Computer Graphics Concepts
Computer Graphics ConceptsComputer Graphics Concepts
Computer Graphics Concepts
 
Swift, via "swift-2048"
Swift, via "swift-2048"Swift, via "swift-2048"
Swift, via "swift-2048"
 
Programas decompiladores
Programas decompiladoresProgramas decompiladores
Programas decompiladores
 
14 strings
14 strings14 strings
14 strings
 
Anthony Starks - deck
Anthony Starks - deckAnthony Starks - deck
Anthony Starks - deck
 
Simple IO Monad in 'Functional Programming in Scala'
Simple IO Monad in 'Functional Programming in Scala'Simple IO Monad in 'Functional Programming in Scala'
Simple IO Monad in 'Functional Programming in Scala'
 
Monoids - Part 1 - with examples using Scalaz and Cats
Monoids - Part 1 - with examples using Scalaz and CatsMonoids - Part 1 - with examples using Scalaz and Cats
Monoids - Part 1 - with examples using Scalaz and Cats
 
First-Class Patterns
First-Class PatternsFirst-Class Patterns
First-Class Patterns
 
Nonlinear analysis of frame with hinge by hinge method in c programming
Nonlinear analysis of frame with hinge by hinge method in c programmingNonlinear analysis of frame with hinge by hinge method in c programming
Nonlinear analysis of frame with hinge by hinge method in c programming
 
2 BytesC++ course_2014_c9_ pointers and dynamic arrays
2 BytesC++ course_2014_c9_ pointers and dynamic arrays 2 BytesC++ course_2014_c9_ pointers and dynamic arrays
2 BytesC++ course_2014_c9_ pointers and dynamic arrays
 
Monad Fact #2
Monad Fact #2Monad Fact #2
Monad Fact #2
 
String Handling in c++
String Handling in c++String Handling in c++
String Handling in c++
 
The Ring programming language version 1.9 book - Part 38 of 210
The Ring programming language version 1.9 book - Part 38 of 210The Ring programming language version 1.9 book - Part 38 of 210
The Ring programming language version 1.9 book - Part 38 of 210
 
C++ string
C++ stringC++ string
C++ string
 

Ähnlich wie Ur Domain Haz Monoids

Ähnlich wie Ur Domain Haz Monoids (20)

Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
Cyrille Martraire: Monoids, Monoids Everywhere! at I T.A.K.E. Unconference 2015
 
A Few of My Favorite (Python) Things
A Few of My Favorite (Python) ThingsA Few of My Favorite (Python) Things
A Few of My Favorite (Python) Things
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
 
Deep Anomaly Detection from Research to Production Leveraging Spark and Tens...
 Deep Anomaly Detection from Research to Production Leveraging Spark and Tens... Deep Anomaly Detection from Research to Production Leveraging Spark and Tens...
Deep Anomaly Detection from Research to Production Leveraging Spark and Tens...
 
I T.A.K.E. talk: "When DDD meets FP, good things happen"
I T.A.K.E. talk: "When DDD meets FP, good things happen"I T.A.K.E. talk: "When DDD meets FP, good things happen"
I T.A.K.E. talk: "When DDD meets FP, good things happen"
 
C++ and OOPS Crash Course by ACM DBIT | Grejo Joby
C++ and OOPS Crash Course by ACM DBIT | Grejo JobyC++ and OOPS Crash Course by ACM DBIT | Grejo Joby
C++ and OOPS Crash Course by ACM DBIT | Grejo Joby
 
Cis 115 Education Organization / snaptutorial.com
Cis 115 Education Organization / snaptutorial.comCis 115 Education Organization / snaptutorial.com
Cis 115 Education Organization / snaptutorial.com
 
CIS 115 Become Exceptional--cis115.com
CIS 115 Become Exceptional--cis115.comCIS 115 Become Exceptional--cis115.com
CIS 115 Become Exceptional--cis115.com
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
 
CIS 115 Exceptional Education - snaptutorial.com
CIS 115   Exceptional Education - snaptutorial.comCIS 115   Exceptional Education - snaptutorial.com
CIS 115 Exceptional Education - snaptutorial.com
 
CIS 115 Inspiring Innovation/tutorialrank.com
 CIS 115 Inspiring Innovation/tutorialrank.com CIS 115 Inspiring Innovation/tutorialrank.com
CIS 115 Inspiring Innovation/tutorialrank.com
 
Cis 115 Effective Communication / snaptutorial.com
Cis 115  Effective Communication / snaptutorial.comCis 115  Effective Communication / snaptutorial.com
Cis 115 Effective Communication / snaptutorial.com
 
Cassandra and materialized views
Cassandra and materialized viewsCassandra and materialized views
Cassandra and materialized views
 
Cis 115 Education Organization -- snaptutorial.com
Cis 115   Education Organization -- snaptutorial.comCis 115   Education Organization -- snaptutorial.com
Cis 115 Education Organization -- snaptutorial.com
 
CIS 115 Achievement Education--cis115.com
CIS 115 Achievement Education--cis115.comCIS 115 Achievement Education--cis115.com
CIS 115 Achievement Education--cis115.com
 
DSL in scala
DSL in scalaDSL in scala
DSL in scala
 
From clever code to better code
From clever code to better codeFrom clever code to better code
From clever code to better code
 
Functional DDD
Functional DDDFunctional DDD
Functional DDD
 
Clean Code Development
Clean Code DevelopmentClean Code Development
Clean Code Development
 
CIS 115 Education for Service--cis115.com
CIS 115 Education for Service--cis115.com  CIS 115 Education for Service--cis115.com
CIS 115 Education for Service--cis115.com
 

Mehr von Cyrille Martraire

Mehr von Cyrille Martraire (17)

Domain modeling for Digital Transformations (FlowCon Paris 2019 edition)
Domain modeling for Digital Transformations (FlowCon Paris 2019 edition)Domain modeling for Digital Transformations (FlowCon Paris 2019 edition)
Domain modeling for Digital Transformations (FlowCon Paris 2019 edition)
 
Sunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft ForeverSunny Tech 2019 - Craft Forever
Sunny Tech 2019 - Craft Forever
 
Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...
Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...
Hexagonal at Scale, with DDD and microservices! - Voxxed Days microservices 2...
 
Bounded Context - DDD Europe Foundation Track
Bounded Context - DDD Europe Foundation TrackBounded Context - DDD Europe Foundation Track
Bounded Context - DDD Europe Foundation Track
 
Domain Modeling towards First Principles
Domain Modeling towards First PrinciplesDomain Modeling towards First Principles
Domain Modeling towards First Principles
 
DDD beyond the infamous repository pattern - GeeCon Prague 2018
DDD beyond the infamous repository pattern - GeeCon Prague 2018DDD beyond the infamous repository pattern - GeeCon Prague 2018
DDD beyond the infamous repository pattern - GeeCon Prague 2018
 
DDD for real
DDD for realDDD for real
DDD for real
 
Les effets inattendus du passage en Features Teams à grande échelle -ScrumDay...
Les effets inattendus du passage en Features Teams à grande échelle -ScrumDay...Les effets inattendus du passage en Features Teams à grande échelle -ScrumDay...
Les effets inattendus du passage en Features Teams à grande échelle -ScrumDay...
 
Refactor your Specs - 2017 Edition
Refactor your Specs - 2017 EditionRefactor your Specs - 2017 Edition
Refactor your Specs - 2017 Edition
 
Interviewing Domain Experts - Heuristics From the Trenches (DDD Europe 2016 M...
Interviewing Domain Experts - Heuristics From the Trenches (DDD Europe 2016 M...Interviewing Domain Experts - Heuristics From the Trenches (DDD Europe 2016 M...
Interviewing Domain Experts - Heuristics From the Trenches (DDD Europe 2016 M...
 
DDD patterns that were not in the book
DDD patterns that were not in the bookDDD patterns that were not in the book
DDD patterns that were not in the book
 
Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...
Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...
Living Documentation (NCrafts Paris 2015, DDDx London 2015, BDX.io 2015, Code...
 
Legacy Code: Evolve or Rewrite?
Legacy Code: Evolve or Rewrite?Legacy Code: Evolve or Rewrite?
Legacy Code: Evolve or Rewrite?
 
Refactor your specs! Øredev 2013
Refactor your specs! Øredev 2013Refactor your specs! Øredev 2013
Refactor your specs! Øredev 2013
 
DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)DDD session BrownBagLunch (FR)
DDD session BrownBagLunch (FR)
 
Domain-Driven Design in legacy application
Domain-Driven Design in legacy applicationDomain-Driven Design in legacy application
Domain-Driven Design in legacy application
 
Tour d'horizon de Domain-Driven Design Avril 2012 autour d'un retour d'expéri...
Tour d'horizon de Domain-Driven Design Avril 2012 autour d'un retour d'expéri...Tour d'horizon de Domain-Driven Design Avril 2012 autour d'un retour d'expéri...
Tour d'horizon de Domain-Driven Design Avril 2012 autour d'un retour d'expéri...
 

Kürzlich hochgeladen

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Kürzlich hochgeladen (20)

Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 

Ur Domain Haz Monoids