SlideShare a Scribd company logo
PROJECTIONS
EXPLAINED
{ YVES REYNHOUT }
AGENDA
Meet the domain
Projections
Terminology
Designing
Terminatomy
Authoring
Testing
Retrospective
WELCOME @
BEAUFORMA (FR)
YOU ARE THE PRODUCT
ON THE OUTSIDE
ON THE INSIDE
THAT IS ...
IF YOU CAN AFFORD US
;-)
CHALLENGES
BUSINESS ACTIVITIES
REWARD
WHAT'S NOT TO LIKE ABOUT
BEAUFORMA?
BUT, DUDE, BRO ...
WE'RE HERE FOR
PROJECTIONS,
REMEMBER?
TERMINOLOGY
Event: a fact, something that happened, a message, a
datastructure
Stream: a sequence of events, partitioned by something
Event store: a collection of streams (simplified)
Disclaimer: not authoritive, just my take
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
open System 
type GuestStartedShopping = {  
  SubsidiaryId : Guid; 
  FeelGoodCartId : Guid;  
  GuestId : Guid; 
  StartDateAndTime : DateTime; 
} 
type GuestCheckedOutCart = {  
  FeelGoodPackageId : Guid; 
  FeelGoodCartId : Guid;  
  GuestId : Guid; 
  Items : Guid array; 
} 
type GuestAbandonedCart = {  
  FeelGoodCartId : Guid;  
  GuestId : Guid; 
  LastSeenDateAndTime : DateTime; 
} 
1:
2:
3:
4:
5:
6:
7:
8:
type ItemWasAddedToCart = {  
  FeelGoodCartId : Guid;  
  ItemId : Guid; 
} 
type ItemWasRemovedFromCart = {  
  FeelGoodCartId : Guid;  
  ItemId : Guid; 
} 
VANILLA CQRS+ES
DESIGNING
PROJECTIONS
consumer driven (by screen, api, model, ...)
affected by the choice of store (e.g. required querying
capabilities, non-functional requirements, ...)
DATASTRUCTURES
EXERCISE
Define a datastructure for this widget
POSSIBLE SOLUTION
1:
2:
3:
4:
5:
6:
7:
8:
type GuestsArrivingRecord = {  
  RecordId: string; 
  SubsidairyId: Guid; 
  Date: DateTime; 
  AppointmentId : Guid; 
  GuestName : string;  
  AppointmentDateAndTime : DateTime  
} 
POSSIBLE SOLUTION
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type Appointment = { 
  AppointmentId : Guid; 
  GuestName : string;  
  AppointmentDateAndTime : DateTime  
} 
type GuestsArrivingDocument = {  
  DocumentId: string; 
  SubsidairyId: Guid; 
  Date: DateTime; 
  Appointments : Appointment array 
} 
EXERCISE
Define 1 or more datastructures for this screen
OBSERVATIONS
Not all data comes from one projection,
Not all data is owned by one model
EVENTS
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
type GuestBookedAppointment = {  
  AppointmentId : Guid;  
  GuestId : Guid; 
  AppointmentDateAndTime : DateTime;  
  FeelGoodPackageId : Guid;  
  SubsidiaryId : Guid  
} 
type GuestRescheduledAppointment = {  
  AppointmentId : Guid;  
  GuestId : Guid;  
  AppointmentDateAndTime : DateTime;  
  FeelGoodPackageId : Guid;  
  SubsidiaryId : Guid  
} 
type GuestSwappedAppointmentFeelGoodPackage = {  
  AppointmentId : Guid;  
  GuestId : Guid;  
  FeelGoodPackageId : Guid;  
  SubsidiaryId : Guid  
} 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type GuestCancelledAppointment = {  
  AppointmentId : Guid; 
  GuestId : Guid; 
  Reason : string;  
  SubsidiaryId : Guid  
} 
type SubsidiaryCancelledAppointment = {  
  AppointmentId : Guid; 
  GuestId : Guid; 
  Reason : string;  
  SubsidiaryId : Guid  
} 
EXERCISE
Fill your datastructure using these events
- booking.fshttps://goo.gl/aM40kQ
OBSERVATIONS
Not all events are useful,
Information might be missing from events,
Not all data is for viewing
Events challenge the datastructure
What about your observations?
EXERCISE
ONE EXTRA EVENT TO TAKE INTO ACCOUNT
1:
2:
3:
4:
5:
type GuestRegistered = {  
  GuestId : Guid; 
  FullName : string; 
  DateOfRegistration: DateTime; 
} 
Extend your projection with the event
- booking|guests.fshttps://goo.gl/aM40kQ
POSSIBLE SOLUTION
1:
2:
3:
4:
5:
type GuestDocument = {  
  DocumentId: string; 
  GuestId: Guid; 
  FullName: string; 
} 
TERMINATOMY
ProjectionHandler: a function that projects an event
Projection: a collection of handlers that form a unit
Projector: a function that dispatches an event or a batch
of events to the matching handler(s)
[Optional] ProjectionHandlerResolver: a function that
returns the handlers that match an event
Disclaimer: not authoritive, just my take
EXAMPLE - F# - FUNCTIONAL
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
open StackExchange.Redis 
let inline (!>) (x:^a) : ^b =  
  ((^a or ^b) : (static member op_Implicit : ^a ­> ^b) x) 
type ActiveShoppersEvents = 
  | GuestStartedShopping of GuestStartedShopping 
  | GuestCheckedOutCart of GuestCheckedOutCart 
  | GuestAbandonedCart of GuestAbandonedCart 
let activeShoppersProjection (connection:IDatabase) (message:ActiveShoppe
  match message with 
  | GuestStartedShopping _ ­>  
    connection.StringIncrement(!> "ActiveShoppers", 1L) |> ignore 
  | GuestAbandonedCart _ ­>  
    connection.StringDecrement(!> "ActiveShoppers", 1L) |> ignore 
  | GuestCheckedOutCart _ ­>  
    connection.StringDecrement(!> "ActiveShoppers", 1L) |> ignore 
EXAMPLE - C# - OBJECT ORIENTED
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
public interface IHandler<TMessage> 
{ void Handle(TMessage message); } 
public class ActiveShoppersProjection : IHandler<GuestStartedShopping>, 
  IHandler<GuestAbandonedCart>, IHandler<GuestCheckedOutCart>  
{ 
  public readonly IDatabase _connection; 
  public ActiveShoppersProjection(IDatabase connection)  
  { this.connection = connection; } 
  public void Handle(GuestStartedShopping message) 
  { this.connection.StringIncrement("ActiveShoppers"); } 
  public void Handle(GuestAbandonedCart message) 
  { connection.StringDecrement("ActiveShoppers"); } 
  public void Handle(GuestCheckedOutCart message) 
  { connection.StringDecrement("ActiveShoppers"); } 
} 
EXAMPLE - C# - PROJAC
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
public class ActiveShoppersProjection : ConnectedProjection<IDatabase> 
{ 
  public ActiveShoppersProjection() 
  { 
    When<GuestStartedShopping>((connection, message) =>  
      connection.StringIncrementAsync("ActiveShoppers")); 
    When<GuestAbandonedCart>((connection, message) =>  
      connection.StringDecrementAsync("ActiveShoppers")); 
    When<GuestCheckedOutCart>((connection, message) =>  
      connection.StringDecrementAsync("ActiveShoppers")); 
  } 
} 
VANILLA CQRS+ES
VANILLA DDD
AUTHORING
PROJECTIONS
EXERCISE
Express the projection in your language and store of choice
- booking|guests.fshttps://goo.gl/aM40kQ
RECIPE?
define message types in code (for statically typed
languages)
define and implement projection handlers for each
message type
define and implement a dispatcher to those projection
handlers
test drive in the program's main
NOT CHALLENGING ENOUGH?
There's an online environment for you to play with:
EventStore
Redis
Elasticsearch
Postgres
- online-
environment.md
https://goo.gl/aM40kQ
TESTING PROJECTIONS
EXAMPLE - F# - FUNCTIONAL
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
let ``when multiple active shoppers`` = 
    Given [ 
        GuestStartedShopping {  
          SubsidiaryId = BonifacioId;  
          FeelGoodCartId=RandomCartId(); 
          GuestId = OliverMartinezId; 
          StartDateAndTime= 6 <pm>; } 
        GuestStartedShopping {  
          SubsidiaryId = BonifacioId;  
          FeelGoodCartId=RandomCartId(); 
          GuestId = RodriguezId; 
          StartDateAndTime= 4 <pm>; } 
    ] |>  
    Expect [ 
        { Key = "ActiveShoppersCount"; Value = 2 }   
    ]
EXAMPLE - C# - OBJECT ORIENTED - PROJAC
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
public class ActiveShoppersProjectionScenarios 
{ 
  public Task when_multiple_active_shoppers() 
  { 
    return MemoryCacheProjection.For(new ActiveShoppersProjection()) 
      .Given( 
        new GuestStartedShopping {  
          SubsidiaryId = BonifacioId,  
          FeelGoodCartId = RandomCartId(), 
          GuestId = OliverMartinezId, 
          StartDateAndTime = Today.At(6.PM()) 
        },
        new GuestStartedShopping {  
          SubsidiaryId = BonifacioId,  
          FeelGoodCartId = RandomCartId(), 
          GuestId = RodriguezId, 
          StartDateAndTime = Today.At(4.PM()) 
        })
      .Expect(new CacheItem("ActiveShoppersCount", 2)); 
  } 
} 
EXERCISE
Express an integration test for your projection.
- booking|guests.fshttps://goo.gl/aM40kQ
RETROSPECTIVE
FURTHER
EXPLORATION
Mechanical Sympathy (know your stores)
Checkpointing & Failure Recovery & High Availability
Event delivery & Idempotency
Batching & Partitioning & (Data) Composition
Deploying & Upgrading
Parallel Test Execution

More Related Content

Viewers also liked

Unleash Your Domain With Greg Young @ DDD-Day
Unleash Your Domain With Greg Young @ DDD-DayUnleash Your Domain With Greg Young @ DDD-Day
Unleash Your Domain With Greg Young @ DDD-DayDotNetMarche
 
DDD Dirty Harry style
DDD Dirty Harry styleDDD Dirty Harry style
DDD Dirty Harry style
Alberto Brandolini
 
Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...
Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...
Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...
Alberto Brandolini
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven DesignAndré Borgonovo
 
Model storming
Model stormingModel storming
Model storming
Alberto Brandolini
 
Greg Young on Architectural Innovation: Eventing, Event Sourcing
Greg Young on Architectural Innovation: Eventing, Event SourcingGreg Young on Architectural Innovation: Eventing, Event Sourcing
Greg Young on Architectural Innovation: Eventing, Event Sourcing
Skills Matter
 
Ember CLI & Ember Tooling
Ember CLI & Ember ToolingEmber CLI & Ember Tooling
Ember CLI & Ember Tooling
Mark Provan
 
Small business solutions worldwide
Small business solutions worldwideSmall business solutions worldwide
Small business solutions worldwide
SB Zone
 
Digital economy with the speed of s4 hana
Digital economy with the speed of s4 hanaDigital economy with the speed of s4 hana
Digital economy with the speed of s4 hana
Kyyba Inc.
 
Trance'former présentation eng
Trance'former présentation engTrance'former présentation eng
Trance'former présentation enggms project
 
Product families
Product familiesProduct families
Product families
Manageware
 
From User to Global: A Spectrum of Experience
From User to Global: A Spectrum of ExperienceFrom User to Global: A Spectrum of Experience
From User to Global: A Spectrum of Experience
Ren Pope
 
Q1.0 [Quiz Quirks]
Q1.0 [Quiz Quirks]Q1.0 [Quiz Quirks]
Q1.0 [Quiz Quirks]
Divakar Raj M
 
Automated Test Design: Single Use Vs Reusable Tests
Automated Test Design: Single Use Vs Reusable TestsAutomated Test Design: Single Use Vs Reusable Tests
Automated Test Design: Single Use Vs Reusable Tests
Josh Grant
 
Amir33202057 2013 03-17-19-06-07
Amir33202057 2013 03-17-19-06-07Amir33202057 2013 03-17-19-06-07
Amir33202057 2013 03-17-19-06-07Dushyant Kumar
 

Viewers also liked (17)

Unleash Your Domain With Greg Young @ DDD-Day
Unleash Your Domain With Greg Young @ DDD-DayUnleash Your Domain With Greg Young @ DDD-Day
Unleash Your Domain With Greg Young @ DDD-Day
 
DDD Dirty Harry style
DDD Dirty Harry styleDDD Dirty Harry style
DDD Dirty Harry style
 
Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...
Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...
Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
Model storming
Model stormingModel storming
Model storming
 
Greg Young on Architectural Innovation: Eventing, Event Sourcing
Greg Young on Architectural Innovation: Eventing, Event SourcingGreg Young on Architectural Innovation: Eventing, Event Sourcing
Greg Young on Architectural Innovation: Eventing, Event Sourcing
 
E commerce(1)
E commerce(1)E commerce(1)
E commerce(1)
 
Ember CLI & Ember Tooling
Ember CLI & Ember ToolingEmber CLI & Ember Tooling
Ember CLI & Ember Tooling
 
Small business solutions worldwide
Small business solutions worldwideSmall business solutions worldwide
Small business solutions worldwide
 
Digital economy with the speed of s4 hana
Digital economy with the speed of s4 hanaDigital economy with the speed of s4 hana
Digital economy with the speed of s4 hana
 
Trance'former présentation eng
Trance'former présentation engTrance'former présentation eng
Trance'former présentation eng
 
Product families
Product familiesProduct families
Product families
 
From User to Global: A Spectrum of Experience
From User to Global: A Spectrum of ExperienceFrom User to Global: A Spectrum of Experience
From User to Global: A Spectrum of Experience
 
Q1.0 [Quiz Quirks]
Q1.0 [Quiz Quirks]Q1.0 [Quiz Quirks]
Q1.0 [Quiz Quirks]
 
Automated Test Design: Single Use Vs Reusable Tests
Automated Test Design: Single Use Vs Reusable TestsAutomated Test Design: Single Use Vs Reusable Tests
Automated Test Design: Single Use Vs Reusable Tests
 
Amir33202057 2013 03-17-19-06-07
Amir33202057 2013 03-17-19-06-07Amir33202057 2013 03-17-19-06-07
Amir33202057 2013 03-17-19-06-07
 
HockeyApp is not an app
HockeyApp is not an appHockeyApp is not an app
HockeyApp is not an app
 

Similar to Socrates BE - Projections Explained

Flux - new/old approach to building frontend
Flux - new/old approach to building frontendFlux - new/old approach to building frontend
Flux - new/old approach to building frontend
Bartek Witczak
 
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years laterSymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
Haehnchen
 
RxSwift to Combine
RxSwift to CombineRxSwift to Combine
RxSwift to Combine
Bo-Young Park
 
Lightbend Lagom: Microservices Just Right (Scala Days 2016 Berlin)
Lightbend Lagom: Microservices Just Right (Scala Days 2016 Berlin)Lightbend Lagom: Microservices Just Right (Scala Days 2016 Berlin)
Lightbend Lagom: Microservices Just Right (Scala Days 2016 Berlin)
mircodotta
 
Writing JavaScript that doesn't suck
Writing JavaScript that doesn't suckWriting JavaScript that doesn't suck
Writing JavaScript that doesn't suck
Ross Bruniges
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to Django
James Casey
 
Asynchronous Programming at Netflix
Asynchronous Programming at NetflixAsynchronous Programming at Netflix
Asynchronous Programming at Netflix
C4Media
 
Symfony War Stories
Symfony War StoriesSymfony War Stories
Symfony War Stories
Jakub Zalas
 
Event Sourcing with Kotlin, who needs frameworks!
Event Sourcing with Kotlin, who needs frameworks!Event Sourcing with Kotlin, who needs frameworks!
Event Sourcing with Kotlin, who needs frameworks!
Nico Krijnen
 
Introducing the WSO2 Complex Event Processor
Introducing the WSO2 Complex Event ProcessorIntroducing the WSO2 Complex Event Processor
Introducing the WSO2 Complex Event ProcessorWSO2
 
Patterns & Practices for Cloud-based Microservices
Patterns & Practices for Cloud-based MicroservicesPatterns & Practices for Cloud-based Microservices
Patterns & Practices for Cloud-based Microservices
C4Media
 
GWT MVP Case Study
GWT MVP Case StudyGWT MVP Case Study
GWT MVP Case Study
David Chandler
 
Event driven network
Event driven networkEvent driven network
Event driven network
Harish B
 
RxSwift to Combine
RxSwift to CombineRxSwift to Combine
RxSwift to Combine
Bo-Young Park
 
Yesplan: 10 Years later
Yesplan: 10 Years laterYesplan: 10 Years later
Yesplan: 10 Years later
Pharo
 
Joe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand DwrJoe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand Dwrdeimos
 
Constance et qualité du code dans une équipe - Rémi Prévost
Constance et qualité du code dans une équipe - Rémi PrévostConstance et qualité du code dans une équipe - Rémi Prévost
Constance et qualité du code dans une équipe - Rémi Prévost
Web à Québec
 
Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development Mahmoud Hamed Mahmoud
 
Turku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-componentsTurku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-components
James Stone
 

Similar to Socrates BE - Projections Explained (20)

Flux - new/old approach to building frontend
Flux - new/old approach to building frontendFlux - new/old approach to building frontend
Flux - new/old approach to building frontend
 
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years laterSymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
 
RxSwift to Combine
RxSwift to CombineRxSwift to Combine
RxSwift to Combine
 
Lightbend Lagom: Microservices Just Right (Scala Days 2016 Berlin)
Lightbend Lagom: Microservices Just Right (Scala Days 2016 Berlin)Lightbend Lagom: Microservices Just Right (Scala Days 2016 Berlin)
Lightbend Lagom: Microservices Just Right (Scala Days 2016 Berlin)
 
Web-First Design Patterns
Web-First Design PatternsWeb-First Design Patterns
Web-First Design Patterns
 
Writing JavaScript that doesn't suck
Writing JavaScript that doesn't suckWriting JavaScript that doesn't suck
Writing JavaScript that doesn't suck
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to Django
 
Asynchronous Programming at Netflix
Asynchronous Programming at NetflixAsynchronous Programming at Netflix
Asynchronous Programming at Netflix
 
Symfony War Stories
Symfony War StoriesSymfony War Stories
Symfony War Stories
 
Event Sourcing with Kotlin, who needs frameworks!
Event Sourcing with Kotlin, who needs frameworks!Event Sourcing with Kotlin, who needs frameworks!
Event Sourcing with Kotlin, who needs frameworks!
 
Introducing the WSO2 Complex Event Processor
Introducing the WSO2 Complex Event ProcessorIntroducing the WSO2 Complex Event Processor
Introducing the WSO2 Complex Event Processor
 
Patterns & Practices for Cloud-based Microservices
Patterns & Practices for Cloud-based MicroservicesPatterns & Practices for Cloud-based Microservices
Patterns & Practices for Cloud-based Microservices
 
GWT MVP Case Study
GWT MVP Case StudyGWT MVP Case Study
GWT MVP Case Study
 
Event driven network
Event driven networkEvent driven network
Event driven network
 
RxSwift to Combine
RxSwift to CombineRxSwift to Combine
RxSwift to Combine
 
Yesplan: 10 Years later
Yesplan: 10 Years laterYesplan: 10 Years later
Yesplan: 10 Years later
 
Joe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand DwrJoe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand Dwr
 
Constance et qualité du code dans une équipe - Rémi Prévost
Constance et qualité du code dans une équipe - Rémi PrévostConstance et qualité du code dans une équipe - Rémi Prévost
Constance et qualité du code dans une équipe - Rémi Prévost
 
Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development
 
Turku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-componentsTurku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-components
 

Recently uploaded

Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
Alina Yurenko
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
Google
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 

Recently uploaded (20)

Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)GOING AOT WITH GRAALVM FOR  SPRING BOOT (SPRING IO)
GOING AOT WITH GRAALVM FOR SPRING BOOT (SPRING IO)
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 

Socrates BE - Projections Explained