SlideShare a Scribd company logo
Using symfony events to create clean
class interfaces

                                       by Dennis Benkert
Dennis Who?!




               2
Dennis Who?!




               2
Dennis Who?!




               2
Dennis Who?!




               2
Dennis Who?!




               2
Agenda




         3
Agenda

         Code Coupling




                         3
Agenda

         Code Coupling
         Event Basics




                         3
Agenda

         Code Coupling
          Event Basics
         Events in Code




                          3
Agenda

         Code Coupling
          Event Basics
         Events in Code
         Usage Examples



                          3
Agenda

           Code Coupling
            Event Basics
          Events in Code
          Usage Examples
         Problems of Events


                              3
Code Coupling


                4
In the beginning it‘s all so cleaned up...




... but over time things start to change
                                                          5
„Coupling is the single greatest problem in large
                               software systems“

                                              - Ted Faison




                                                        6
„You don‘t want to achieve consistency by making the
classes tightly coupled, because that reduces their
reuseability“
                                          - Gang of Four




                                                       7
Separation of Concerns




                         8
Separation of Concerns




                         8
Separation of Concerns




                         8
Separation of Concerns




                         8
Separation of Concerns




                         8
Separation of Concerns




                         8
Separation of Concerns




                         8
Separation of Concerns




                         8
Separation of Concerns




                         8
Separation of Concerns




          Events, DI, ...




                            8
Event Basics


               9
Event Connection

               Event Dispatcher




           Software Components
                                  10
Event Connection

               Event Dispatcher




           Software Components
                                  10
Event Connection

                                  Event Dispatcher




                  connect
  (registration.complete) .




                              Software Components
                                                     10
Event Connection

                                  Event Dispatcher




                  connect
  (registration.complete) .




                              Software Components
                                                     10
Event Connection

                                  Event Dispatcher




                                                     connect
                  connect                              (registration.complete)
  (registration.complete) .




                              Software Components
                                                                         10
Basic Event Notification




                          11
Basic Event Notification




                          11
Basic Event Notification


     notify




                          11
Basic Event Notification


           notify
 (registration.complete)




                           11
Basic Event Notification


           notify
 (registration.complete)




                           11
Basic Event Notification


           notify
 (registration.complete)




                 notification




                               11
Basic Event Notification


           notify
 (registration.complete)




                 notification




                               11
Basic Event Notification


           notify
 (registration.complete)




                 notification




                               11
Basic Event Notification


           notify
 (registration.complete)



                               notification
                 notification




                                             11
Basic Event Notification


           notify
 (registration.complete)



                               notification
                 notification




                                             11
More Event Notifications




                          12
More Event Notifications




                          12
More Event Notifications


    filter




                          12
More Event Notifications


        filter
  (blog_post.render)




                          12
More Event Notifications


        filter
  (blog_post.render)




                          12
More Event Notifications


        filter
  (blog_post.render)




                       notification




                                     12
More Event Notifications


        filter
  (blog_post.render)




                       notification




                                     12
More Event Notifications


        filter
  (blog_post.render)




                       notification




                                     12
More Event Notifications


        filter
  (blog_post.render)



           returnValue
                         notification




                                       12
More Event Notifications


        filter
  (blog_post.render)



           returnValue
                         notification




                                       12
More Event Notifications


        filter
  (blog_post.render)



           returnValue             notification
                         notification




                                                 12
More Event Notifications


        filter
  (blog_post.render)



           returnValue             notification
                         notification




                                                 12
More Event Notifications


        filter
  (blog_post.render)



           returnValue             notification
                         notification




                                                 12
More Event Notifications


        filter
  (blog_post.render)


                                                 returnValue
           returnValue             notification
                         notification




                                                               12
More Event Notifications


        filter
  (blog_post.render)


                                                 returnValue
           returnValue             notification
                         notification




                                                               12
More Event Notifications

                 returnValue

        filter
  (blog_post.render)


                                                  returnValue
           returnValue              notification
                          notification




                                                                12
More Event Notifications




                          13
More Event Notifications




                          13
More Event Notifications


  notifyUntil




                          13
More Event Notifications


     notifyUntil
(registration.complete)




                          13
More Event Notifications


     notifyUntil
(registration.complete)




                          13
More Event Notifications


     notifyUntil
(registration.complete)




                          notification




                                        13
More Event Notifications


     notifyUntil
(registration.complete)




                          notification




                                        13
More Event Notifications


     notifyUntil
(registration.complete)




                          notification




                                        13
More Event Notifications


     notifyUntil
(registration.complete)



             returnValue
                           notification




                                         13
More Event Notifications


     notifyUntil
(registration.complete)



             returnValue
                           notification




                                         13
More Event Notifications

                    returnValue

     notifyUntil
(registration.complete)



             returnValue
                             notification




                                           13
More Event Notifications

                    returnValue

     notifyUntil
(registration.complete)



             returnValue
                             notification




                                           13
More Event Notifications

                    returnValue

     notifyUntil
(registration.complete)



             returnValue
                             notification




                                           13
More Event Notifications

                    returnValue

     notifyUntil
(registration.complete)



             returnValue
                             notification




                                           13
More Event Notifications

                    returnValue

     notifyUntil
(registration.complete)



             returnValue
                             notification




                                           13
Events in Code


                 14
Events in Code


 class frontendConfiguration extends sfApplicationConfiguration
 {
   public function configure()
   {
     $this->dispatcher->connect('registration.complete',
       array(SomeClass, 'listenToRegistrationComplete'));

         // [...]
     }
 }




                                                                  15
Events in Code


 class frontendConfiguration extends sfApplicationConfiguration
 {
   public function configure()
   {
     $this->dispatcher->connect('registration.complete',
       array(SomeClass, 'listenToRegistrationComplete'));

         // [...]
     }
 }




                                                                  15
Events in Code

                                       Event Name

 class frontendConfiguration extends sfApplicationConfiguration
 {
   public function configure()
   {
     $this->dispatcher->connect('registration.complete',
       array(SomeClass, 'listenToRegistrationComplete'));

         // [...]
     }
 }




                                                                  15
Events in Code

                                       Event Name

 class frontendConfiguration extends sfApplicationConfiguration
 {
   public function configure()
   {
     $this->dispatcher->connect('registration.complete',
       array(SomeClass, 'listenToRegistrationComplete'));

         // [...]
     }
 }




                                                                  15
Events in Code

                                                Event Name

 class frontendConfiguration extends sfApplicationConfiguration
 {
   public function configure()
   {
     $this->dispatcher->connect('registration.complete',
       array(SomeClass, 'listenToRegistrationComplete'));

         // [...]
     }
 }



                           Callable
                    (can be static or non-static)


                                                                  15
Events in Code




  $this->dispatcher->notify(new sfEvent($user, 'registration.complete'));




                                                                            16
Events in Code




  $this->dispatcher->notify(new sfEvent($user, 'registration.complete'));




                                                                            16
Events in Code

      Notification Type


  $this->dispatcher->notify(new sfEvent($user, 'registration.complete'));




                                                                            16
Events in Code

      Notification Type


  $this->dispatcher->notify(new sfEvent($user, 'registration.complete'));




                                                                            16
Events in Code

      Notification Type


  $this->dispatcher->notify(new sfEvent($user, 'registration.complete'));




                                  Subject

                                                                            16
Events in Code

      Notification Type


  $this->dispatcher->notify(new sfEvent($user, 'registration.complete'));




                                  Subject

                                                                            16
Events in Code

                                              Event Name
      Notification Type


  $this->dispatcher->notify(new sfEvent($user, 'registration.complete'));




                                  Subject

                                                                            16
Events in Code


 class SomeClass
 {
   public static function listenToRegistrationComplete(sfEvent $event)
   {
     $user = $event->getSubject();

         // [...]
     }
 }




                                                                         17
Events in Code


 class SomeClass
 {
   public static function listenToRegistrationComplete(sfEvent $event)
   {
     $user = $event->getSubject();

         // [...]
     }
 }




                                                                         17
Events in Code
                               Registered Method
                                     (called via notfiy)



 class SomeClass
 {
   public static function listenToRegistrationComplete(sfEvent $event)
   {
     $user = $event->getSubject();

         // [...]
     }
 }




                                                                         17
Events in Code
                               Registered Method
                                     (called via notfiy)



 class SomeClass
 {
   public static function listenToRegistrationComplete(sfEvent $event)
   {
     $user = $event->getSubject();

         // [...]
     }
 }




                                                                         17
Events in Code
                               Registered Method
                                     (called via notfiy)



 class SomeClass
 {
   public static function listenToRegistrationComplete(sfEvent $event)
   {
     $user = $event->getSubject();

         // [...]
     }
 }




                                     Event as Parameter
                                                                         17
Events in Code
                               Registered Method
                                     (called via notfiy)



 class SomeClass
 {
   public static function listenToRegistrationComplete(sfEvent $event)
   {
     $user = $event->getSubject();

         // [...]
     }
 }




                                     Event as Parameter
                                                                         17
Events in Code
                               Registered Method
                                     (called via notfiy)



 class SomeClass
 {
   public static function listenToRegistrationComplete(sfEvent $event)
   {
     $user = $event->getSubject();

         // [...]
     }
 }



         Passed Subject
                                     Event as Parameter
                                                                         17
Events in Code




 $returnValue = $this->dispatcher->filter(new sfEvent($blogPost,
 'blog_post.render'), $blogPost->getBody());




                                                                   18
Events in Code




 $returnValue = $this->dispatcher->filter(new sfEvent($blogPost,
 'blog_post.render'), $blogPost->getBody());




                                                                   18
Events in Code

                               Notification Type


 $returnValue = $this->dispatcher->filter(new sfEvent($blogPost,
 'blog_post.render'), $blogPost->getBody());




                                                                   18
Events in Code

                               Notification Type


 $returnValue = $this->dispatcher->filter(new sfEvent($blogPost,
 'blog_post.render'), $blogPost->getBody());




                                                                   18
Events in Code

                               Notification Type


 $returnValue = $this->dispatcher->filter(new sfEvent($blogPost,
 'blog_post.render'), $blogPost->getBody());




                                      Raw Value

                                                                   18
Events in Code

                               Notification Type


 $returnValue = $this->dispatcher->filter(new sfEvent($blogPost,
 'blog_post.render'), $blogPost->getBody());




                                      Raw Value

                                                                   18
Events in Code

                               Notification Type


 $returnValue = $this->dispatcher->filter(new sfEvent($blogPost,
 'blog_post.render'), $blogPost->getBody());




      Filtered Value
                                      Raw Value

                                                                   18
Events in Code

 class MarkdownParser
 {

     // [...]

     public static function listenToRegistrationComplete(sfEvent $event, $body)
     {
       $markdownParser = new self();
       $parsedBody = $markdownParser->parse($body);

         // [...]

         return $parsedBody;
     }
 }




                                                                                  19
Events in Code

 class MarkdownParser
 {

     // [...]

     public static function listenToRegistrationComplete(sfEvent $event, $body)
     {
       $markdownParser = new self();
       $parsedBody = $markdownParser->parse($body);

         // [...]

         return $parsedBody;
     }
 }




                                                                                  19
Events in Code
                               Raw Value as Parameter
 class MarkdownParser
 {

     // [...]

     public static function listenToRegistrationComplete(sfEvent $event, $body)
     {
       $markdownParser = new self();
       $parsedBody = $markdownParser->parse($body);

         // [...]

         return $parsedBody;
     }
 }




                                                                                  19
Events in Code
                               Raw Value as Parameter
 class MarkdownParser
 {

     // [...]

     public static function listenToRegistrationComplete(sfEvent $event, $body)
     {
       $markdownParser = new self();
       $parsedBody = $markdownParser->parse($body);

         // [...]

         return $parsedBody;
     }
 }




                                                                                  19
Events in Code
                               Raw Value as Parameter
 class MarkdownParser
 {

     // [...]

     public static function listenToRegistrationComplete(sfEvent $event, $body)
     {
       $markdownParser = new self();
       $parsedBody = $markdownParser->parse($body);

         // [...]

         return $parsedBody;
     }
 }


                        Filtered Value
                                                                                  19
Usage Examples


                 20
Other Usage Examples




 skoop


                       21
Other Usage Examples



         Being able to add extra actions to
         specific functionality without having
         to alter the existing code.



 skoop


                                                21
Other Usage Examples




snzapka


                       22
Other Usage Examples


          I use events mostly with object
          states changes, for example to send
          email, notify someone, clear cache,
          calculate sth.



snzapka


                                                22
Other Usage Examples




b00giZm


                       23
Other Usage Examples


          I have a centralized "spot" for file
          system operations. e.g. when a user
          deletes an image from the DB, it
          kicks off an event



b00giZm


                                                23
Other Usage Examples




helasliban


                       24
Other Usage Examples


             Right now I'm using symfony events
             for loose coupling of symfony
             plugins.



helasliban


                                                  24
Other Usage Examples




ubermuda


                       25
Other Usage Examples


           Obfuscate code, totally screwing up
           the app's workflow with chain-
           binded useless events. o/



ubermuda


                                                 25
Problems of Events


                     26
Problems of Events


          No Silver Bullet




                             27
Problems of Events


             No Silver Bullet

     Events won‘t help with every problem!




                                             27
Problems of Events


    Use Events for optional coupling




                                       28
Problems of Events


    Use Events for optional coupling

     If you need mandatory coupling use DI.




                                              28
Problems of Events


       No Notification Order




                              29
Problems of Events


          No Notification Order

  If your listeners need ordering ure doin it rong!




                                                      29
Problems of Events


         Harder debugging




                            30
Problems of Events


              Harder debugging
   It can get complicated if you do weird things.




                                                    30
Problems of Events


              Harder debugging
   It can get complicated if you do weird things.
               (Remember ubermuda)




                                                    30
Problems of Events


      Real Setup Hardly Testable




                                   31
Problems of Events


        Real Setup Hardly Testable

  You can never know who connected to an event.




                                                  31
Problems of Events


            Slowness




                       32
Problems of Events


                   Slowness

  Every firing starts the Events notification chain.




                                                     32
Thank you!
Give feedback on joind.in, please
 http://joind.in/talk/view/1415



                                    33
Credits

         Thanks to:
         - Bernhard and Andreas for the reviews and tips.
         - Konrad and Samim for the designs and the artworks.


Creative Commons stuff used:
- „Cog, Gear, Settings“ icon by „Visual Pharm“ - http://www.iconfinder.net/icondetails/27879/128/
- „Crying, Man“ icon by Rokey - http://www.iconfinder.net/icondetails/37613/128/
- „Box, Package“ icon by Alessandro Rei - http://www.iconfinder.net/icondetails/6507/128/




                                                                                            34

More Related Content

More from D

Monitoring und Metriken im Wunderland
Monitoring und Metriken im WunderlandMonitoring und Metriken im Wunderland
Monitoring und Metriken im Wunderland
D
 
Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014D
 
The Dog Ate My Deployment - PHP Uncoference September 2013
The Dog Ate My Deployment - PHP Uncoference September 2013The Dog Ate My Deployment - PHP Uncoference September 2013
The Dog Ate My Deployment - PHP Uncoference September 2013D
 
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013D
 
Dennis Benkert - The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
Dennis Benkert -  The Dog Ate My Deployment - Symfony Usergroup Berlin March ...Dennis Benkert -  The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
Dennis Benkert - The Dog Ate My Deployment - Symfony Usergroup Berlin March ...D
 
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...D
 
What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012D
 
symfony Live 2010 - Using Doctrine Migrations
symfony Live 2010 -  Using Doctrine Migrationssymfony Live 2010 -  Using Doctrine Migrations
symfony Live 2010 - Using Doctrine MigrationsD
 
symfony and immobilienscout24.de - Dennis Benkert
symfony and immobilienscout24.de - Dennis Benkertsymfony and immobilienscout24.de - Dennis Benkert
symfony and immobilienscout24.de - Dennis Benkert
D
 
symfony and immobilienscout24.de - Rob Bors
symfony and immobilienscout24.de - Rob Borssymfony and immobilienscout24.de - Rob Bors
symfony and immobilienscout24.de - Rob Bors
D
 
Railslove Lightningtalk 20 02 09 - Web Debug Toolbars
Railslove Lightningtalk 20 02 09 - Web Debug ToolbarsRailslove Lightningtalk 20 02 09 - Web Debug Toolbars
Railslove Lightningtalk 20 02 09 - Web Debug ToolbarsD
 

More from D (11)

Monitoring und Metriken im Wunderland
Monitoring und Metriken im WunderlandMonitoring und Metriken im Wunderland
Monitoring und Metriken im Wunderland
 
Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014Dockerizing Symfony Applications - Symfony Live Berlin 2014
Dockerizing Symfony Applications - Symfony Live Berlin 2014
 
The Dog Ate My Deployment - PHP Uncoference September 2013
The Dog Ate My Deployment - PHP Uncoference September 2013The Dog Ate My Deployment - PHP Uncoference September 2013
The Dog Ate My Deployment - PHP Uncoference September 2013
 
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
The Dog Ate My Deployment - Symfony Usergroup Cologne July 2013
 
Dennis Benkert - The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
Dennis Benkert -  The Dog Ate My Deployment - Symfony Usergroup Berlin March ...Dennis Benkert -  The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
Dennis Benkert - The Dog Ate My Deployment - Symfony Usergroup Berlin March ...
 
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
Things Your Mother Didn't Tell You About Bundle Configurations - Symfony Live...
 
What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012
 
symfony Live 2010 - Using Doctrine Migrations
symfony Live 2010 -  Using Doctrine Migrationssymfony Live 2010 -  Using Doctrine Migrations
symfony Live 2010 - Using Doctrine Migrations
 
symfony and immobilienscout24.de - Dennis Benkert
symfony and immobilienscout24.de - Dennis Benkertsymfony and immobilienscout24.de - Dennis Benkert
symfony and immobilienscout24.de - Dennis Benkert
 
symfony and immobilienscout24.de - Rob Bors
symfony and immobilienscout24.de - Rob Borssymfony and immobilienscout24.de - Rob Bors
symfony and immobilienscout24.de - Rob Bors
 
Railslove Lightningtalk 20 02 09 - Web Debug Toolbars
Railslove Lightningtalk 20 02 09 - Web Debug ToolbarsRailslove Lightningtalk 20 02 09 - Web Debug Toolbars
Railslove Lightningtalk 20 02 09 - Web Debug Toolbars
 

Recently uploaded

Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Jeffrey Haguewood
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 

Recently uploaded (20)

Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 

symfony live 2010 - Using symfony events to create clean class interfaces