Functional solid

Matt Stine
Matt StineGlobal Field CTO / Chief Architect at Pivotal
Functional Soλid
     Matt Stine
About your speaker...
•   Senior Consultant, PSO
    vFabric, Cloud Application Platform
    VMware

•   Speaker (JavaOne, SpringOne/2GX,
    CodeMash, NFJS, RWX, PAX, UberConf)

•   Author (GroovyMag, NFJS the Magazine,
    Selenium 2.0 Refcard)

•   Founder of the Memphis/Mid-South Java
    User Group

•   Former Agile Zone Leader @ DZone
SOLID        Functional
Principles   Programming
SOLID Functional
PrinciplesProgramming
Pitch

• Software designs tend to rot.
• Design rot impedes our effectiveness.
• SOLID principles help treat design rot.
• Achieving SOLID designs is another
  reason to learn FP!
Motivation
Functional solid
Trends

• How Software Systems Evolve
• Programming Paradigms
• The Quest for “Best Practices”
The evolution of
  software...
http://www.flickr.com/photos/billselak/427719926




                                                  http://www.flickr.com/photos/unloveable/2400895854



          From simplicity to complexity...
http://www.flickr.com/photos/thejcgerm/379082415




                                                  Software starts
                                                    to rot like a
                                                   bad piece of
                                                       meat.

                                                   “Uncle Bob”
                                                     Martin
We don’t handle
 change well...
Unclear or incomplete
change specifications...
Extreme time
 pressure...
Team members
unfamiliar with original
 design/architecture...
It smells!
Rigidity
Fragility
Immobility
Viscosity
Needless Complexity
Needless Repetition
Opacity
Programming
 Paradigms
Programming eras...

• Structured Programming
  (late 1960’s - late 1980’s)
• Object Oriented Programming
  (mid 1970’s - present day)
• Functional Programming
  (early 1990’s - ???)
Functional solid
THE CHASM
Functional solid
Accumulation of
 Knowledge?
Accumulation of
 Knowledge?
Paradigm Shifts
http://www.gotw.ca/publications/concurrency-ddj.htm
The Quest
      for
“Best Practices”
• Which web framework should I use?
• Why are there so many persistence API’s?
• Which is better: Scala or Clojure (or
  Erlang)?

• How should I use design patterns?
• How do I build a good architecture?
http://en.wikipedia.org/wiki/No_Silver_Bullet
What are the FP best
    practices?
The Perfect Storm
SRP   OCP        LSP

             The
           SOLID
ISP   DIP Principles
http://clojure.org
http://www.infoq.com/presentations/SOLID-Clojure
The Single
Responsibility Principle
A class (module) should
 have only one reason
       to change.
COHESION




Tom DeMarco   Meilir Page-Jones
Computational      Rectangle
                                     Graphical
 Geometry       + draw()            Application
 Application    + area() : double




                      GUI
Computational
                       Graphical
  Geometry
                      Application
  Application




   Geometric           Rectangle
   Rectangle
                                    GUI
                    + draw()
+ area() : double
Metaresponsibilities of
   an OO class...

• Model state
• Model behavior
State

•   car.color = black
•   elevator.floor = 10
•   account.balance = 2500
Behavior

•   car.drive()
•   elevator.climb()
•   account.deposit(500)
How many
metaresponsibilities?
It is better to have 100 functions operate on one
data structure than to have 10 functions operate
               on 10 data structures.

                  Alan J. Perlis
Functional solid
Functional solid
Metaresponsibilities of
   an OO class...

• Model state
• Model behavior
• Model identity
Functional solid
IDENTITY

car1 != car2

   VALUE

car1 == car2
Concurrent System

• Automated “Needs Service” Notification
  System
• Thread 1: Update mileage and “ready for
  service indicators”
• Thread 2: Harvest cars ready for service
  and send notifications
Functional solid
Functional solid
Functional solid
The Open Closed
    Principle
Bertrand Myer
Software entities should
be open for extension but
 closed for modification.
Open for extension...
...closed for
modification.
Abstraction!

• Java:
 • interface
 • abstract class
Functional solid
Functional solid
Functional solid
(pause OCP)
Let’s do design!

• OO language (Java)
• We want to use the OCP
• We’ll create one or more inheritance
  hierarchies!
• Well...
Inheritance
          Hierarchies?

• What do good ones look like?
• Are there rules we can follow (best
  practices even)?
• Are there traps we can fall in to?
The Liskov
                 Substitution Principle




Barbara Liskov
What is wanted here is something like the following
substitution property: If for each object o1 of type S there is
 an object o2 of type T such that for all programs P defined
  in terms of T, the behavior of P is unchanged when o1 is
         substituted for o2, then S is a subtype of T.
Subtypes must be
substitutable for their
     base types.
f(B b) { }
D extends B
B d = new D();
     f(d)
f(B b) {
	 if (b instance of D) {
	 	 //deal with D
	 } else {
	 	 //continue as before
	}
}
(resume OCP)
Composition
 The Functional OCP
Functional solid
Functional solid
Functional solid
Functional solid
Functional solid
First-class Functions
Functional solid
Higher-order Functions
Functional solid
The Interface
Segregation Principle
Clients should not be
  forced to depend on
methods they do not use.
Functional solid
Functional solid
<<interface>>
                  TimerClient
Timer
        0..*
               + timeout()




                     Door




                  TimedDoor
Functional solid
<<interface>>
                  TimerClient
Timer                                               Door
        0..*
               + timeout()




               DoorTimerAdapter                    TimedDoor

               + timeout()                      + doorTimeOut()


                                  <<creates>>
Functional solid
<<interface>>
           TimerClient
Timer                                    Door
        + timeout()




                             TimedDoor

                          + timeout()
Functional solid
Functional solid
Thinking in Verbs
Verbs

• Open
• Close
• Register Timeout
• Trigger Timeout
Functional solid
Functional solid
OK...what about that
unique ID problem?
Functional solid
Functional solid
Functional solid
The Dependency
Inversion Principle
Abstractions should not
depend upon details. Details
   should depend upon
       abstractions.
High-level modules
should not depend on
  low-level modules.
Policy Layer


               Mechanism
                 Layer


                           Utility Layer
Functional solid
<<interface>>
Policy Layer   Policy Service
                 Interface




                                 <<interface>>
                Mechanism
                                  Mechanism
                  Layer
                                Service Interface




                                  Utility Layer
Functional solid
Functional solid
Functional solid
Our verbs have been
       taken captive by
            nouns...

http://steve-yegge.blogspot.com/2006/03/execution-in-
                kingdom-of-nouns.html
Functional solid
Functional solid
http://www.infoq.com/presentations/Simple-Made-Easy/
Functional solid
Functional solid
Complectedness
SRP

Complecting responsibilities leads
  to rigid and/or fragile design.
OCP
            Problematic:
  Complecting concretions of an
abstraction in such a way that new
   concretions adversely affect
  existing, working concretions.
LSP
  Reuse via inheritance is
dangerous. Often complects
 entities not in a true “is-a”
 relationship. Leads to non-
        substitutability.
ISP


 Don’t complect unrelated
operations in a single entity!
DIP


Transitive dependency leads to
  transitive complectedness!
Design is the art of breaking
        things apart.

       - Rich Hickey
Matt Stine
         matt.stine@gmail.com
             Twitter: mstine
       http://www.mattstine.com
Please fill out your evaluations!
1 of 131

Recommended

The lazy programmer's guide to writing thousands of tests by
The lazy programmer's guide to writing thousands of testsThe lazy programmer's guide to writing thousands of tests
The lazy programmer's guide to writing thousands of testsScott Wlaschin
911 views105 slides
Functional Programming Patterns (BuildStuff '14) by
Functional Programming Patterns (BuildStuff '14)Functional Programming Patterns (BuildStuff '14)
Functional Programming Patterns (BuildStuff '14)Scott Wlaschin
175.3K views249 slides
From object oriented to functional domain modeling by
From object oriented to functional domain modelingFrom object oriented to functional domain modeling
From object oriented to functional domain modelingMario Fusco
15.3K views60 slides
The Functional Programming Toolkit (NDC Oslo 2019) by
The Functional Programming Toolkit (NDC Oslo 2019)The Functional Programming Toolkit (NDC Oslo 2019)
The Functional Programming Toolkit (NDC Oslo 2019)Scott Wlaschin
6.3K views261 slides
Domain Driven Design with the F# type System -- NDC London 2013 by
Domain Driven Design with the F# type System -- NDC London 2013Domain Driven Design with the F# type System -- NDC London 2013
Domain Driven Design with the F# type System -- NDC London 2013Scott Wlaschin
26.6K views101 slides
The Functional Programmer's Toolkit (NDC London 2019) by
The Functional Programmer's Toolkit (NDC London 2019)The Functional Programmer's Toolkit (NDC London 2019)
The Functional Programmer's Toolkit (NDC London 2019)Scott Wlaschin
1.9K views224 slides

More Related Content

What's hot

Dr Frankenfunctor and the Monadster by
Dr Frankenfunctor and the MonadsterDr Frankenfunctor and the Monadster
Dr Frankenfunctor and the MonadsterScott Wlaschin
20.5K views198 slides
Railway Oriented Programming by
Railway Oriented ProgrammingRailway Oriented Programming
Railway Oriented ProgrammingScott Wlaschin
638.7K views154 slides
Clean Code by
Clean CodeClean Code
Clean CodeHendrik Ebel
14.9K views27 slides
The Power Of Composition (DotNext 2019) by
The Power Of Composition (DotNext 2019)The Power Of Composition (DotNext 2019)
The Power Of Composition (DotNext 2019)Scott Wlaschin
1.9K views184 slides
Applicative style programming by
Applicative style programmingApplicative style programming
Applicative style programmingJosé Luis García Hernández
1.9K views59 slides
Pipeline oriented programming by
Pipeline oriented programmingPipeline oriented programming
Pipeline oriented programmingScott Wlaschin
8.2K views102 slides

What's hot(20)

Dr Frankenfunctor and the Monadster by Scott Wlaschin
Dr Frankenfunctor and the MonadsterDr Frankenfunctor and the Monadster
Dr Frankenfunctor and the Monadster
Scott Wlaschin20.5K views
Railway Oriented Programming by Scott Wlaschin
Railway Oriented ProgrammingRailway Oriented Programming
Railway Oriented Programming
Scott Wlaschin638.7K views
The Power Of Composition (DotNext 2019) by Scott Wlaschin
The Power Of Composition (DotNext 2019)The Power Of Composition (DotNext 2019)
The Power Of Composition (DotNext 2019)
Scott Wlaschin1.9K views
Pipeline oriented programming by Scott Wlaschin
Pipeline oriented programmingPipeline oriented programming
Pipeline oriented programming
Scott Wlaschin8.2K views
An introduction to property based testing by Scott Wlaschin
An introduction to property based testingAn introduction to property based testing
An introduction to property based testing
Scott Wlaschin39.2K views
Domain Driven Design with the F# type System -- F#unctional Londoners 2014 by Scott Wlaschin
Domain Driven Design with the F# type System -- F#unctional Londoners 2014Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Domain Driven Design with the F# type System -- F#unctional Londoners 2014
Scott Wlaschin171.5K views
Functional Design Patterns (DevTernity 2018) by Scott Wlaschin
Functional Design Patterns (DevTernity 2018)Functional Design Patterns (DevTernity 2018)
Functional Design Patterns (DevTernity 2018)
Scott Wlaschin5.5K views
Sum and Product Types - The Fruit Salad & Fruit Snack Example - From F# to Ha... by Philip Schwarz
Sum and Product Types -The Fruit Salad & Fruit Snack Example - From F# to Ha...Sum and Product Types -The Fruit Salad & Fruit Snack Example - From F# to Ha...
Sum and Product Types - The Fruit Salad & Fruit Snack Example - From F# to Ha...
Philip Schwarz826 views
Clean Code I - Best Practices by Theo Jungeblut
Clean Code I - Best PracticesClean Code I - Best Practices
Clean Code I - Best Practices
Theo Jungeblut15K views
Os Peytonjones by oscon2007
Os PeytonjonesOs Peytonjones
Os Peytonjones
oscon20075.8K views
Implementing the IO Monad in Scala by Hermann Hueck
Implementing the IO Monad in ScalaImplementing the IO Monad in Scala
Implementing the IO Monad in Scala
Hermann Hueck1.3K views
Functional programming by ijcd
Functional programmingFunctional programming
Functional programming
ijcd1.4K views
ZIO: Powerful and Principled Functional Programming in Scala by Wiem Zine Elabidine
ZIO: Powerful and Principled Functional Programming in ScalaZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in Scala
The Power of Composition (NDC Oslo 2020) by Scott Wlaschin
The Power of Composition (NDC Oslo 2020)The Power of Composition (NDC Oslo 2020)
The Power of Composition (NDC Oslo 2020)
Scott Wlaschin2.2K views
Type Classes in Scala and Haskell by Hermann Hueck
Type Classes in Scala and HaskellType Classes in Scala and Haskell
Type Classes in Scala and Haskell
Hermann Hueck1.4K views

Similar to Functional solid

Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications" by
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"Fwdays
483 views74 slides
SDWest2005Goetsch by
SDWest2005GoetschSDWest2005Goetsch
SDWest2005GoetschMark Goetsch
307 views68 slides
.NET Architecture for Enterprises by
.NET Architecture for Enterprises.NET Architecture for Enterprises
.NET Architecture for EnterprisesWade Wegner
1.7K views208 slides
Design for testability as a way to good coding (SOLID and IoC) by
Design for testability as a way to good coding (SOLID and IoC)Design for testability as a way to good coding (SOLID and IoC)
Design for testability as a way to good coding (SOLID and IoC)Simone Chiaretta
8.8K views75 slides
Let's talk about... Microservices by
Let's talk about... MicroservicesLet's talk about... Microservices
Let's talk about... MicroservicesAlessandro Giorgetti
572 views73 slides
Data oriented design and c++ by
Data oriented design and c++Data oriented design and c++
Data oriented design and c++Mike Acton
33.6K views201 slides

Similar to Functional solid(20)

Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications" by Fwdays
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Алексей Ященко и Ярослав Волощук "False simplicity of front-end applications"
Fwdays483 views
.NET Architecture for Enterprises by Wade Wegner
.NET Architecture for Enterprises.NET Architecture for Enterprises
.NET Architecture for Enterprises
Wade Wegner1.7K views
Design for testability as a way to good coding (SOLID and IoC) by Simone Chiaretta
Design for testability as a way to good coding (SOLID and IoC)Design for testability as a way to good coding (SOLID and IoC)
Design for testability as a way to good coding (SOLID and IoC)
Simone Chiaretta8.8K views
Data oriented design and c++ by Mike Acton
Data oriented design and c++Data oriented design and c++
Data oriented design and c++
Mike Acton33.6K views
Exploring Twitter's Finagle technology stack for microservices by 💡 Tomasz Kogut
Exploring Twitter's Finagle technology stack for microservicesExploring Twitter's Finagle technology stack for microservices
Exploring Twitter's Finagle technology stack for microservices
💡 Tomasz Kogut3.2K views
How do we drive tech changes by Jaewoo Ahn
How do we drive tech changesHow do we drive tech changes
How do we drive tech changes
Jaewoo Ahn1.4K views
Building Hermetic Systems (without Docker) by William Farrell
Building Hermetic Systems (without Docker)Building Hermetic Systems (without Docker)
Building Hermetic Systems (without Docker)
William Farrell820 views
LINQ Inside by jeffz
LINQ InsideLINQ Inside
LINQ Inside
jeffz2K views
Incident Management in the Age of DevOps and SRE by Rundeck
Incident Management in the Age of DevOps and SRE Incident Management in the Age of DevOps and SRE
Incident Management in the Age of DevOps and SRE
Rundeck295 views
Illogical engineers by Pawel Szulc
Illogical engineersIllogical engineers
Illogical engineers
Pawel Szulc257 views
Illogical engineers by Pawel Szulc
Illogical engineersIllogical engineers
Illogical engineers
Pawel Szulc1.2K views
The advantage of developing with TypeScript by Corley S.r.l.
The advantage of developing with TypeScript The advantage of developing with TypeScript
The advantage of developing with TypeScript
Corley S.r.l.1.3K views
John adams talk cloudy by John Adams
John adams   talk cloudyJohn adams   talk cloudy
John adams talk cloudy
John Adams3.3K views
Math with .NET for you and Azure by Marco Parenzan
Math with .NET for you and AzureMath with .NET for you and Azure
Math with .NET for you and Azure
Marco Parenzan59 views

More from Matt Stine

Architectures That Bend but Don't Break by
Architectures That Bend but Don't BreakArchitectures That Bend but Don't Break
Architectures That Bend but Don't BreakMatt Stine
572 views119 slides
Cloud Native Architecture Patterns Tutorial by
Cloud Native Architecture Patterns TutorialCloud Native Architecture Patterns Tutorial
Cloud Native Architecture Patterns TutorialMatt Stine
5.6K views157 slides
Resilient Architecture by
Resilient ArchitectureResilient Architecture
Resilient ArchitectureMatt Stine
2.1K views49 slides
Cloud Foundry: The Best Place to Run Microservices by
Cloud Foundry: The Best Place to Run MicroservicesCloud Foundry: The Best Place to Run Microservices
Cloud Foundry: The Best Place to Run MicroservicesMatt Stine
1.6K views72 slides
Reactive Fault Tolerant Programming with Hystrix and RxJava by
Reactive Fault Tolerant Programming with Hystrix and RxJavaReactive Fault Tolerant Programming with Hystrix and RxJava
Reactive Fault Tolerant Programming with Hystrix and RxJavaMatt Stine
5.3K views81 slides
Lattice: A Cloud-Native Platform for Your Spring Applications by
Lattice: A Cloud-Native Platform for Your Spring ApplicationsLattice: A Cloud-Native Platform for Your Spring Applications
Lattice: A Cloud-Native Platform for Your Spring ApplicationsMatt Stine
2.2K views53 slides

More from Matt Stine(20)

Architectures That Bend but Don't Break by Matt Stine
Architectures That Bend but Don't BreakArchitectures That Bend but Don't Break
Architectures That Bend but Don't Break
Matt Stine572 views
Cloud Native Architecture Patterns Tutorial by Matt Stine
Cloud Native Architecture Patterns TutorialCloud Native Architecture Patterns Tutorial
Cloud Native Architecture Patterns Tutorial
Matt Stine5.6K views
Resilient Architecture by Matt Stine
Resilient ArchitectureResilient Architecture
Resilient Architecture
Matt Stine2.1K views
Cloud Foundry: The Best Place to Run Microservices by Matt Stine
Cloud Foundry: The Best Place to Run MicroservicesCloud Foundry: The Best Place to Run Microservices
Cloud Foundry: The Best Place to Run Microservices
Matt Stine1.6K views
Reactive Fault Tolerant Programming with Hystrix and RxJava by Matt Stine
Reactive Fault Tolerant Programming with Hystrix and RxJavaReactive Fault Tolerant Programming with Hystrix and RxJava
Reactive Fault Tolerant Programming with Hystrix and RxJava
Matt Stine5.3K views
Lattice: A Cloud-Native Platform for Your Spring Applications by Matt Stine
Lattice: A Cloud-Native Platform for Your Spring ApplicationsLattice: A Cloud-Native Platform for Your Spring Applications
Lattice: A Cloud-Native Platform for Your Spring Applications
Matt Stine2.2K views
The Cloud Native Journey by Matt Stine
The Cloud Native JourneyThe Cloud Native Journey
The Cloud Native Journey
Matt Stine2.6K views
To Microservices and Beyond by Matt Stine
To Microservices and BeyondTo Microservices and Beyond
To Microservices and Beyond
Matt Stine2.3K views
Deploying Microservices to Cloud Foundry by Matt Stine
Deploying Microservices to Cloud FoundryDeploying Microservices to Cloud Foundry
Deploying Microservices to Cloud Foundry
Matt Stine3.9K views
Cloud Foundry Diego: Modular and Extensible Substructure for Microservices by Matt Stine
Cloud Foundry Diego: Modular and Extensible Substructure for MicroservicesCloud Foundry Diego: Modular and Extensible Substructure for Microservices
Cloud Foundry Diego: Modular and Extensible Substructure for Microservices
Matt Stine3.9K views
Building Distributed Systems with Netflix OSS and Spring Cloud by Matt Stine
Building Distributed Systems with Netflix OSS and Spring CloudBuilding Distributed Systems with Netflix OSS and Spring Cloud
Building Distributed Systems with Netflix OSS and Spring Cloud
Matt Stine8.9K views
Pivotal Cloud Platform Roadshow: Sign Up for Pivotal Web Services by Matt Stine
Pivotal Cloud Platform Roadshow: Sign Up for Pivotal Web ServicesPivotal Cloud Platform Roadshow: Sign Up for Pivotal Web Services
Pivotal Cloud Platform Roadshow: Sign Up for Pivotal Web Services
Matt Stine961 views
A Recovering Java Developer Learns to Go by Matt Stine
A Recovering Java Developer Learns to GoA Recovering Java Developer Learns to Go
A Recovering Java Developer Learns to Go
Matt Stine13.8K views
Agile Development with OSGi by Matt Stine
Agile Development with OSGiAgile Development with OSGi
Agile Development with OSGi
Matt Stine1.2K views
Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship by Matt Stine
Cloud Foundry and Microservices: A Mutualistic Symbiotic RelationshipCloud Foundry and Microservices: A Mutualistic Symbiotic Relationship
Cloud Foundry and Microservices: A Mutualistic Symbiotic Relationship
Matt Stine19K views
It's the End of the Cloud as We Know It by Matt Stine
It's the End of the Cloud as We Know ItIt's the End of the Cloud as We Know It
It's the End of the Cloud as We Know It
Matt Stine8.7K views
The Seven Wastes of Software Development by Matt Stine
The Seven Wastes of Software DevelopmentThe Seven Wastes of Software Development
The Seven Wastes of Software Development
Matt Stine2.9K views
Information Sciences Solutions to Core Facility Problems at St. Jude Children... by Matt Stine
Information Sciences Solutions to Core Facility Problems at St. Jude Children...Information Sciences Solutions to Core Facility Problems at St. Jude Children...
Information Sciences Solutions to Core Facility Problems at St. Jude Children...
Matt Stine1.1K views
Achieve Your Goals by Matt Stine
Achieve Your GoalsAchieve Your Goals
Achieve Your Goals
Matt Stine491 views

Recently uploaded

Melek BEN MAHMOUD.pdf by
Melek BEN MAHMOUD.pdfMelek BEN MAHMOUD.pdf
Melek BEN MAHMOUD.pdfMelekBenMahmoud
14 views1 slide
Tunable Laser (1).pptx by
Tunable Laser (1).pptxTunable Laser (1).pptx
Tunable Laser (1).pptxHajira Mahmood
21 views37 slides
Throughput by
ThroughputThroughput
ThroughputMoisés Armani Ramírez
32 views11 slides
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum... by
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...NUS-ISS
28 views35 slides
RADIUS-Omnichannel Interaction System by
RADIUS-Omnichannel Interaction SystemRADIUS-Omnichannel Interaction System
RADIUS-Omnichannel Interaction SystemRADIUS
14 views21 slides
Emerging & Future Technology - How to Prepare for the Next 10 Years of Radica... by
Emerging & Future Technology - How to Prepare for the Next 10 Years of Radica...Emerging & Future Technology - How to Prepare for the Next 10 Years of Radica...
Emerging & Future Technology - How to Prepare for the Next 10 Years of Radica...NUS-ISS
15 views28 slides

Recently uploaded(20)

Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum... by NUS-ISS
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...
Beyond the Hype: What Generative AI Means for the Future of Work - Damien Cum...
NUS-ISS28 views
RADIUS-Omnichannel Interaction System by RADIUS
RADIUS-Omnichannel Interaction SystemRADIUS-Omnichannel Interaction System
RADIUS-Omnichannel Interaction System
RADIUS14 views
Emerging & Future Technology - How to Prepare for the Next 10 Years of Radica... by NUS-ISS
Emerging & Future Technology - How to Prepare for the Next 10 Years of Radica...Emerging & Future Technology - How to Prepare for the Next 10 Years of Radica...
Emerging & Future Technology - How to Prepare for the Next 10 Years of Radica...
NUS-ISS15 views
STPI OctaNE CoE Brochure.pdf by madhurjyapb
STPI OctaNE CoE Brochure.pdfSTPI OctaNE CoE Brochure.pdf
STPI OctaNE CoE Brochure.pdf
madhurjyapb12 views
Voice Logger - Telephony Integration Solution at Aegis by Nirmal Sharma
Voice Logger - Telephony Integration Solution at AegisVoice Logger - Telephony Integration Solution at Aegis
Voice Logger - Telephony Integration Solution at Aegis
Nirmal Sharma17 views
AI: mind, matter, meaning, metaphors, being, becoming, life values by Twain Liu 刘秋艳
AI: mind, matter, meaning, metaphors, being, becoming, life valuesAI: mind, matter, meaning, metaphors, being, becoming, life values
AI: mind, matter, meaning, metaphors, being, becoming, life values
The Importance of Cybersecurity for Digital Transformation by NUS-ISS
The Importance of Cybersecurity for Digital TransformationThe Importance of Cybersecurity for Digital Transformation
The Importance of Cybersecurity for Digital Transformation
NUS-ISS25 views
handbook for web 3 adoption.pdf by Liveplex
handbook for web 3 adoption.pdfhandbook for web 3 adoption.pdf
handbook for web 3 adoption.pdf
Liveplex19 views
Spesifikasi Lengkap ASUS Vivobook Go 14 by Dot Semarang
Spesifikasi Lengkap ASUS Vivobook Go 14Spesifikasi Lengkap ASUS Vivobook Go 14
Spesifikasi Lengkap ASUS Vivobook Go 14
Dot Semarang35 views
Future of Learning - Khoong Chan Meng by NUS-ISS
Future of Learning - Khoong Chan MengFuture of Learning - Khoong Chan Meng
Future of Learning - Khoong Chan Meng
NUS-ISS31 views
Digital Product-Centric Enterprise and Enterprise Architecture - Tan Eng Tsze by NUS-ISS
Digital Product-Centric Enterprise and Enterprise Architecture - Tan Eng TszeDigital Product-Centric Enterprise and Enterprise Architecture - Tan Eng Tsze
Digital Product-Centric Enterprise and Enterprise Architecture - Tan Eng Tsze
NUS-ISS19 views
Web Dev - 1 PPT.pdf by gdsczhcet
Web Dev - 1 PPT.pdfWeb Dev - 1 PPT.pdf
Web Dev - 1 PPT.pdf
gdsczhcet52 views
AMAZON PRODUCT RESEARCH.pdf by JerikkLaureta
AMAZON PRODUCT RESEARCH.pdfAMAZON PRODUCT RESEARCH.pdf
AMAZON PRODUCT RESEARCH.pdf
JerikkLaureta14 views
The details of description: Techniques, tips, and tangents on alternative tex... by BookNet Canada
The details of description: Techniques, tips, and tangents on alternative tex...The details of description: Techniques, tips, and tangents on alternative tex...
The details of description: Techniques, tips, and tangents on alternative tex...
BookNet Canada110 views

Functional solid