SlideShare a Scribd company logo
PROJECTIONS
EXPLAINED
{ YVES REYNHOUT }
AGENDA
Meet the domain
Projections
Terminology
Designing
Authoring
Testing
WELCOME @
BEAUFORMA (FR)
YOU ARE THE PRODUCT
ON THE OUTSIDE
ON THE INSIDE
THAT IS ...
IF YOU CAN AFFORD US
;-)
CHALLENGES
CONTEXT MAP
REWARD
WHAT'S NOT TO LIKE ABOUT
BEAUFORMA?
BUT, DUDE ... 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
TERMINOLOGY
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
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
open StackExchange.Redis 
let inline (!>) (x:^a) : ^b =  
  ((^a or ^b) : (static member op_Implicit : ^a ­> ^b) x)  
let activeShoppersProjection (connection:IDatabase, message:Object) = 
  match message with 
  | :? GuestStartedShopping ­>  
    connection.StringIncrement(!> "ActiveShoppers", 1L) |> ignore 
  | :? GuestAbandonedCart ­>  
    connection.StringDecrement(!> "ActiveShoppers", 1L) |> ignore 
  | :? GuestCheckedOutCart ­>  
    connection.StringDecrement(!> "ActiveShoppers", 1L) |> ignore 
  | _ ­> () 
EXAMPLE
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")); 
  } 
} 
EXAMPLE
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
public interface IHandler<TMessage> 
{ 
  void Handle(IDatabase connection, TMessage message); 
} 
public class ActiveShoppersProjection : IHandler<GuestStartedShopping>, 
  IHandler<GuestAbandonedCart>, IHandler<GuestCheckedOutCart>  
{ 
  public void Handle(IDatabase connection, GuestStartedShopping message) 
  { 
    connection.StringIncrement("ActiveShoppers"); 
  } 
  public void Handle(IDatabase connection, GuestAbandonedCart message) 
  { 
    connection.StringDecrement("ActiveShoppers"); 
  } 
  public void Handle(IDatabase connection, GuestCheckedOutCart message) 
  { 
    connection.StringDecrement("ActiveShoppers"); 
  } 
} 
VANILLA CQRS+ES
VANILLA DDD
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 GuestsArrivingDocument = {  
  DocumentId: string; 
  SubsidairyId: Guid; 
  Date: DateTime; 
  Appointments : Appointment array 
} 
type Appointment = { 
  AppointmentId : Guid; 
  GuestName : string;  
  AppointmentDateAndTime : DateTime  
} 
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/BTBTfi
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?
OBSERVATIONS
Not all data comes from one projection,
Not all data is owned by one model
ONE EXTRA EVENT TO TAKE INTO ACCOUNT
1:
2:
3:
4:
5:
type GuestRegistered = {  
  GuestId : Guid; 
  FullName : string; 
  DateOfRegistration: DateTime; 
} 
EXERCISE
Extend your projection with the event
- booking|guests.fshttps://goo.gl/BTBTfi
POSSIBLE SOLUTION
1:
2:
3:
4:
5:
type GuestDocument = {  
  DocumentId: string; 
  GuestId: Guid; 
  FullName: string; 
} 
AUTHORING
PROJECTIONS
EXERCISE
Express the projection in your language and store of choice
- booking|guests.fshttps://goo.gl/BTBTfi
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?
EVENTSTORE
IP Address: 178.62.229.196
Http Port: 2113
Tcp Port: 1113
Login: admin
Password: changeit
REDIS
IP Address: 178.62.229.196
Port: 6379
ELASTICSEARCH
IP Address: 178.62.229.196
Port: 9200
POSTGRES
IP Address: 46.101.161.64
Port: 5432
Login: dddeu16
Password: dddeu16
Database: dddeu16
SslMode: required
Server Certificate: see online environment file
- online-
environment.md
https://goo.gl/BTBTfi
TESTING PROJECTIONS
EXAMPLE
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)); 
  } 
} 

More Related Content

Viewers also liked

Get Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP StreamsGet Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP StreamsDavey Shafik
 
Techniques d'accélération des pages web
Techniques d'accélération des pages webTechniques d'accélération des pages web
Techniques d'accélération des pages web
Jean-Pierre Vincent
 
Automation using-phing
Automation using-phingAutomation using-phing
Automation using-phing
Rajat Pandit
 
PHP5.5 is Here
PHP5.5 is HerePHP5.5 is Here
PHP5.5 is Here
julien pauli
 
Electrify your code with PHP Generators
Electrify your code with PHP GeneratorsElectrify your code with PHP Generators
Electrify your code with PHP Generators
Mark Baker
 
The quest for global design principles (SymfonyLive Berlin 2015)
The quest for global design principles (SymfonyLive Berlin 2015)The quest for global design principles (SymfonyLive Berlin 2015)
The quest for global design principles (SymfonyLive Berlin 2015)
Matthias Noback
 
Top tips my_sql_performance
Top tips my_sql_performanceTop tips my_sql_performance
Top tips my_sql_performance
afup Paris
 
Mocking Demystified
Mocking DemystifiedMocking Demystified
Mocking Demystified
Marcello Duarte
 
Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015
Marcello Duarte
 
Why elasticsearch rocks!
Why elasticsearch rocks!Why elasticsearch rocks!
Why elasticsearch rocks!tlrx
 
Writing infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQLWriting infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQL
Gabriele Bartolini
 
Si le tdd est mort alors pratiquons une autopsie mix-it 2015
Si le tdd est mort alors pratiquons une autopsie mix-it 2015Si le tdd est mort alors pratiquons une autopsie mix-it 2015
Si le tdd est mort alors pratiquons une autopsie mix-it 2015
Bruno Boucard
 
L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)
Arnauld Loyer
 
Behat 3.0 meetup (March)
Behat 3.0 meetup (March)Behat 3.0 meetup (March)
Behat 3.0 meetup (March)
Konstantin Kudryashov
 
TDD with PhpSpec - Lone Star PHP 2016
TDD with PhpSpec - Lone Star PHP 2016TDD with PhpSpec - Lone Star PHP 2016
TDD with PhpSpec - Lone Star PHP 2016
CiaranMcNulty
 
Performance serveur et apache
Performance serveur et apachePerformance serveur et apache
Performance serveur et apache
afup Paris
 
The Wonderful World of Symfony Components
The Wonderful World of Symfony ComponentsThe Wonderful World of Symfony Components
The Wonderful World of Symfony Components
Ryan Weaver
 
PHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4DevelopersPHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4Developers
Kacper Gunia
 
Design how your objects talk through mocking
Design how your objects talk through mockingDesign how your objects talk through mocking
Design how your objects talk through mocking
Konstantin Kudryashov
 

Viewers also liked (20)

Get Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP StreamsGet Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP Streams
 
Techniques d'accélération des pages web
Techniques d'accélération des pages webTechniques d'accélération des pages web
Techniques d'accélération des pages web
 
Automation using-phing
Automation using-phingAutomation using-phing
Automation using-phing
 
PHP5.5 is Here
PHP5.5 is HerePHP5.5 is Here
PHP5.5 is Here
 
Electrify your code with PHP Generators
Electrify your code with PHP GeneratorsElectrify your code with PHP Generators
Electrify your code with PHP Generators
 
The quest for global design principles (SymfonyLive Berlin 2015)
The quest for global design principles (SymfonyLive Berlin 2015)The quest for global design principles (SymfonyLive Berlin 2015)
The quest for global design principles (SymfonyLive Berlin 2015)
 
Top tips my_sql_performance
Top tips my_sql_performanceTop tips my_sql_performance
Top tips my_sql_performance
 
Mocking Demystified
Mocking DemystifiedMocking Demystified
Mocking Demystified
 
Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015Understanding Craftsmanship SwanseaCon2015
Understanding Craftsmanship SwanseaCon2015
 
Why elasticsearch rocks!
Why elasticsearch rocks!Why elasticsearch rocks!
Why elasticsearch rocks!
 
Writing infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQLWriting infinite scalability web applications with PHP and PostgreSQL
Writing infinite scalability web applications with PHP and PostgreSQL
 
Si le tdd est mort alors pratiquons une autopsie mix-it 2015
Si le tdd est mort alors pratiquons une autopsie mix-it 2015Si le tdd est mort alors pratiquons une autopsie mix-it 2015
Si le tdd est mort alors pratiquons une autopsie mix-it 2015
 
L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)
 
Behat 3.0 meetup (March)
Behat 3.0 meetup (March)Behat 3.0 meetup (March)
Behat 3.0 meetup (March)
 
TDD with PhpSpec - Lone Star PHP 2016
TDD with PhpSpec - Lone Star PHP 2016TDD with PhpSpec - Lone Star PHP 2016
TDD with PhpSpec - Lone Star PHP 2016
 
Caching on the Edge
Caching on the EdgeCaching on the Edge
Caching on the Edge
 
Performance serveur et apache
Performance serveur et apachePerformance serveur et apache
Performance serveur et apache
 
The Wonderful World of Symfony Components
The Wonderful World of Symfony ComponentsThe Wonderful World of Symfony Components
The Wonderful World of Symfony Components
 
PHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4DevelopersPHPSpec - the only Design Tool you need - 4Developers
PHPSpec - the only Design Tool you need - 4Developers
 
Design how your objects talk through mocking
Design how your objects talk through mockingDesign how your objects talk through mocking
Design how your objects talk through mocking
 

Recently uploaded

Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
Ortus Solutions, Corp
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
informapgpstrackings
 
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
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
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
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
IES VE
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
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
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
e20449
 

Recently uploaded (20)

Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
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
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
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
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
 

Projections explained