SlideShare a Scribd company logo
SPADE
Javi Palanca
Goals
Simulate different pick-up
strategies for a taxi fleet
Based on agents (SPADE)
Using Agreement
Technologies
Free sandbox
code: https://github.com/javipalanca/taxi_simulator
doc: https://taxi-simulator.readthedocs.io
Taxi Simulator
Agents
TaxiAgent PassengerAgent
CoordinatorAgent
TAXI_WAITING	
TAXI_WAITING_FOR_APPROVAL	
TAXI_MOVING_TO_PASSENGER	
TAXI_IN_PASSENGER_PLACE	
TAXI_MOVING_TO_DESTINY	
PASSENGER_WAITING	
PASSENGER_ASSIGNED	
PASSENGER_IN_TAXI	
PASSENGER_IN_DEST
Request Protocol
TaxiAgent
PassengerAgent CoordinatorAgent
REQUEST_PERFORMATIVE
REQUEST_PERFORMATIVE
PROPOSE_PERFORMATIVE
CANCEL_PERFORMATIVE
ACCEPT_PERFORMATIVE
REFUSE_PERFORMATIVE
GOTO TRAVEL_PROTOCOL pick_up_passenger()
CANCEL_PERFORMATIVE
Strategy Pattern
TaxiAgent
PassengerAgent
CoordinatorAgent
TaxiStrategyBehaviour
PassengerStrategyBehaviour
CoordinatorStrategyBehaviour
def	send_proposal(self,	passenger_id,	content=None)						
def	cancel_proposal(self,	passenger_id,	content=None)					
def	pick_up_passenger(self,	passenger_id,	origin,	dest)		
def	send_request(self,	content=None)	
def	accept_taxi(self,	taxi_aid)							
def	refuse_taxi(self,	taxi_aid)							
def	timeout_receive(self,	timeout=5)			
REQUEST_PROTOCOL
_process(self)
_process(self)
_process(self)
Install
$ pip install --user virtualenv
# Create virtual environment with python 2.7
$ virtualenv --python=`which python2.7` taxi_demo
$ cd taxi_demo/
$ source bin/activate
(taxi-demo)$
# Install taxi simulator
(taxi-demo)$ pip install taxi_simulator
# Run taxi simulator
(taxi-demo)$ taxi_simulator --help
Usage(taxi-demo)$ taxi_simulator --help
Usage: taxi_simulator [OPTIONS]
Console script for taxi_simulator.
Options:
-t, --taxi TEXT Taxi strategy class (default:
AcceptAlwaysStrategyBehaviour).
-p, --passenger TEXT Passenger strategy class (default:
AcceptFirstRequestTaxiBehaviour).
-c, --coordinator TEXT Coordinator strategy class (default:
DelegateRequestTaxiBehaviour).
--port INTEGER Web interface port (default: 9000).
-nt, --num-taxis INTEGER Number of initial taxis to create (default:
0).
-np, --num-passengers INTEGER Number of initial passengers to create
(default: 0).
--name TEXT Coordinator agent name (default:
coordinator).
--passwd TEXT Coordinator agent password (default:
coordinator_passwd).
-bp, --backend-port INTEGER Backend port (default: 5000).
-v, --verbose Show verbose debug.
--help Show this message and exit.
Run
(taxi-demo)$ taxi_simulator --port 9999
INFO:root:XMPP server running.
INFO:root:Running SPADE platform.
INFO:root:Creating 0 taxis and 0 passengers.
INFO:CoordinatorAgent:Coordinator agent running
INFO:CoordinatorAgent:Web interface running at http://127.0.0.1:9999/app
INFO:werkzeug: * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Open http://127.0.0.1:9999/app
Default Strategies: Coordinator
class	DelegateRequestTaxiBehaviour(CoordinatorStrategyBehaviour):	
				def	_process(self):	
								msg	=	self._receive(block=True)	
								msg.removeReceiver(coordinator_aid)	
								for	taxi	in	self.myAgent.taxi_agents.values():	
												msg.addReceiver(taxi.getAID())	
												self.myAgent.send(msg)	
												self.logger.debug("Coordinator	sent	request	to	taxi	{}".format(taxi.getName()))
Default Strategies: Taxi
class	AcceptAlwaysStrategyBehaviour(TaxiStrategyBehaviour):	
				def	_process(self):	
								msg	=	self._receive(block=True)	
								content	=	json.loads(msg.getContent())	
								performative	=	msg.getPerformative()	
								self.logger.debug("Taxi	{}	received	request	protocol	from	passenger	{}.".format(self.myAgent.agent_id,	
																																																																																								content["passenger_id"]))	
								if	performative	==	REQUEST_PERFORMATIVE:	
												if	self.myAgent.status	==	TAXI_WAITING:	
																self.send_proposal(content["passenger_id"],	{})	
																self.myAgent.status	=	TAXI_WAITING_FOR_APPROVAL	
																self.logger.debug("Taxi	{}	sent	proposal	to	passenger	{}.".format(self.myAgent.agent_id,	
																																																																																		content["passenger_id"]))	
								elif	performative	==	ACCEPT_PERFORMATIVE:	
												if	self.myAgent.status	==	TAXI_WAITING_FOR_APPROVAL:	
																self.logger.debug("Taxi	{}	got	accept	from	{}".format(self.myAgent.agent_id,	
																																																																						content["passenger_id"]))	
																self.pick_up_passenger(content["passenger_id"],	content["origin"],	content["dest"])	
												else:	
																self.cancel_proposal(content["passenger_id"],	{})	
								elif	performative	==	REFUSE_PERFORMATIVE:	
												self.logger.debug("Taxi	{}	got	refusal	from	{}".format(self.myAgent.agent_id,	
																																																																			content["passenger_id"]))	
												self.myAgent.status	=	TAXI_WAITING
Default Strategies: Passenger
class	AcceptFirstRequestTaxiBehaviour(PassengerStrategyBehaviour):	
				def	_process(self):	
								if	self.myAgent.status	==	PASSENGER_WAITING:	
												self.send_request(content={})	
								msg	=	self.timeout_receive(timeout=5)	
								if	msg:	
												performative	=	msg.getPerformative()	
												if	performative	==	PROPOSE_PERFORMATIVE:	
																taxi_aid	=	msg.getSender()	
																if	self.myAgent.status	==	PASSENGER_WAITING:	
																				self.logger.debug("Passenger	{}	received	proposal	from	{}".format(self.myAgent.agent_id,	
																																																																																						taxi_aid.getName()))	
																				self.accept_taxi(taxi_aid)	
																else:	
																				self.refuse_taxi(taxi_aid)	
												elif	performative	==	CANCEL_PERFORMATIVE:	
																self.myAgent.status	=	PASSENGER_WAITING
Utils
def	build_aid(agent_id):	
				return	aid(name=agent_id	+	"@127.0.0.1",	addresses=["xmpp://"	+	agent_id	+	"@127.0.0.1"])	
coordinator_aid	=	build_aid("coordinator")	
def	random_position():	
			...	
			return	[lat,	lon]	
def	are_close(coord1,	coord2,	tolerance=10):	
				return	vincenty(coord1,	coord2).meters	<	tolerance	
def	request_path(ori,	dest):	
				...	
				return	path,	distance,	duration	
from	geopy	import	vincenty	
vincenty(coord1,	coord2).meters
Exercices
from	taxi_simulator.coordinator	import	CoordinatorStrategyBehaviour	
from	taxi_simulator.passenger	import	PassengerStrategyBehaviour	
from	taxi_simulator.taxi	import	TaxiStrategyBehaviour	
################################################################	
#																																																														#	
#																					Coordinator	Strategy																					#	
#																																																														#	
################################################################	
class	MyCoordinatorStrategy(CoordinatorStrategyBehaviour):	
				def	_process(self):	
							#	Your	code	here	
################################################################	
#																																																														#	
#																									Taxi	Strategy																								#	
#																																																														#	
################################################################	
class	MyTaxiStrategy(TaxiStrategyBehaviour):	
				def	_process(self):	
							#	Your	code	here	
################################################################	
#																																																														#	
#																							Passenger	Strategy																					#	
#																																																														#	
################################################################	
class	MyPassengerStrategy(PassengerStrategyBehaviour):	
				def	_process(self):	
							#	Your	code	here	
1. Closest taxi strategy 



2. Dynamic closest taxi

strategy

(cancelling ongoing taxis)
my_strategies.py
(taxi-demo)$ taxi_simulator --port 9999 --coordinator my_strategies.MyCoordinatorStrategy
--taxi my_strategies.MyTaxiStrategy --passenger my_strategies.MyPassengerStrategy

More Related Content

Similar to Taxi Simulator

Yelowsoft presentation july
Yelowsoft presentation julyYelowsoft presentation july
Yelowsoft presentation july
Yelowsoft
 
STEP Annual Conference 2018 - Merry Scott, Liftshare Smart Parking and Scoping
STEP Annual Conference 2018 - Merry Scott, Liftshare Smart Parking and Scoping STEP Annual Conference 2018 - Merry Scott, Liftshare Smart Parking and Scoping
STEP Annual Conference 2018 - Merry Scott, Liftshare Smart Parking and Scoping
STEP_scotland
 
Automatic car parking system with and without password report
Automatic car parking system with and without password reportAutomatic car parking system with and without password report
Automatic car parking system with and without password report
SOHIL PATEL
 
On demand taxi service mobile app platform
On demand taxi service mobile  app platformOn demand taxi service mobile  app platform
On demand taxi service mobile app platform
Harikrishna Patel
 
LSCM ASSIGNMENT 2.docx
LSCM ASSIGNMENT 2.docxLSCM ASSIGNMENT 2.docx
LSCM ASSIGNMENT 2.docx
raymondcyril1
 
Travel api integration
Travel api integrationTravel api integration
Travel api integration
LeenaSajo
 
Custom PHP Web Development Company
Custom PHP Web Development CompanyCustom PHP Web Development Company
Custom PHP Web Development Company
ManekTech
 
Opensource Technology
Opensource TechnologyOpensource Technology
Opensource Technology
ManekTech
 
WordPress Web Development | ManekTech
WordPress Web Development | ManekTechWordPress Web Development | ManekTech
WordPress Web Development | ManekTech
ManekTech
 
Angularjs Web Application Development
 Angularjs Web Application Development Angularjs Web Application Development
Angularjs Web Application Development
ManekTech
 
Hands-On Lab: Quickly and Easily Monitor Applications using CA Application Pe...
Hands-On Lab: Quickly and Easily Monitor Applications using CA Application Pe...Hands-On Lab: Quickly and Easily Monitor Applications using CA Application Pe...
Hands-On Lab: Quickly and Easily Monitor Applications using CA Application Pe...
CA Technologies
 
Psa car easy apps
Psa car easy appsPsa car easy apps
Psa car easy apps
FabMob
 
Car Parking Management Software At Watermelon Parking.pptx
Car Parking Management Software At Watermelon Parking.pptxCar Parking Management Software At Watermelon Parking.pptx
Car Parking Management Software At Watermelon Parking.pptx
watermelonparking9
 
Mobile based app
Mobile based appMobile based app
Mobile based app
Prerna Saini
 
Intelligent Parking Management System.pptx
Intelligent Parking Management System.pptxIntelligent Parking Management System.pptx
Intelligent Parking Management System.pptx
watermelonparking9
 
The Role Of Artificial Intelligence in Taxi Booking App Development
The Role Of Artificial Intelligence in Taxi Booking App DevelopmentThe Role Of Artificial Intelligence in Taxi Booking App Development
The Role Of Artificial Intelligence in Taxi Booking App Development
V3cube
 
Dev summer2016 - Automation code as Production code
Dev summer2016 - Automation code as Production codeDev summer2016 - Automation code as Production code
Dev summer2016 - Automation code as Production code
Kostas Mamalis (CSM CSPO)
 
Automated Car Parking Solutions
Automated Car Parking SolutionsAutomated Car Parking Solutions
Automated Car Parking Solutions
WatermelonParking
 
[WSO2 Integration Summit Bern 2019] API-led Integration
[WSO2 Integration Summit Bern 2019] API-led Integration[WSO2 Integration Summit Bern 2019] API-led Integration
[WSO2 Integration Summit Bern 2019] API-led Integration
WSO2
 
hSenid Mobile presentation at TADHack
hSenid Mobile presentation at TADHackhSenid Mobile presentation at TADHack
hSenid Mobile presentation at TADHack
Alan Quayle
 

Similar to Taxi Simulator (20)

Yelowsoft presentation july
Yelowsoft presentation julyYelowsoft presentation july
Yelowsoft presentation july
 
STEP Annual Conference 2018 - Merry Scott, Liftshare Smart Parking and Scoping
STEP Annual Conference 2018 - Merry Scott, Liftshare Smart Parking and Scoping STEP Annual Conference 2018 - Merry Scott, Liftshare Smart Parking and Scoping
STEP Annual Conference 2018 - Merry Scott, Liftshare Smart Parking and Scoping
 
Automatic car parking system with and without password report
Automatic car parking system with and without password reportAutomatic car parking system with and without password report
Automatic car parking system with and without password report
 
On demand taxi service mobile app platform
On demand taxi service mobile  app platformOn demand taxi service mobile  app platform
On demand taxi service mobile app platform
 
LSCM ASSIGNMENT 2.docx
LSCM ASSIGNMENT 2.docxLSCM ASSIGNMENT 2.docx
LSCM ASSIGNMENT 2.docx
 
Travel api integration
Travel api integrationTravel api integration
Travel api integration
 
Custom PHP Web Development Company
Custom PHP Web Development CompanyCustom PHP Web Development Company
Custom PHP Web Development Company
 
Opensource Technology
Opensource TechnologyOpensource Technology
Opensource Technology
 
WordPress Web Development | ManekTech
WordPress Web Development | ManekTechWordPress Web Development | ManekTech
WordPress Web Development | ManekTech
 
Angularjs Web Application Development
 Angularjs Web Application Development Angularjs Web Application Development
Angularjs Web Application Development
 
Hands-On Lab: Quickly and Easily Monitor Applications using CA Application Pe...
Hands-On Lab: Quickly and Easily Monitor Applications using CA Application Pe...Hands-On Lab: Quickly and Easily Monitor Applications using CA Application Pe...
Hands-On Lab: Quickly and Easily Monitor Applications using CA Application Pe...
 
Psa car easy apps
Psa car easy appsPsa car easy apps
Psa car easy apps
 
Car Parking Management Software At Watermelon Parking.pptx
Car Parking Management Software At Watermelon Parking.pptxCar Parking Management Software At Watermelon Parking.pptx
Car Parking Management Software At Watermelon Parking.pptx
 
Mobile based app
Mobile based appMobile based app
Mobile based app
 
Intelligent Parking Management System.pptx
Intelligent Parking Management System.pptxIntelligent Parking Management System.pptx
Intelligent Parking Management System.pptx
 
The Role Of Artificial Intelligence in Taxi Booking App Development
The Role Of Artificial Intelligence in Taxi Booking App DevelopmentThe Role Of Artificial Intelligence in Taxi Booking App Development
The Role Of Artificial Intelligence in Taxi Booking App Development
 
Dev summer2016 - Automation code as Production code
Dev summer2016 - Automation code as Production codeDev summer2016 - Automation code as Production code
Dev summer2016 - Automation code as Production code
 
Automated Car Parking Solutions
Automated Car Parking SolutionsAutomated Car Parking Solutions
Automated Car Parking Solutions
 
[WSO2 Integration Summit Bern 2019] API-led Integration
[WSO2 Integration Summit Bern 2019] API-led Integration[WSO2 Integration Summit Bern 2019] API-led Integration
[WSO2 Integration Summit Bern 2019] API-led Integration
 
hSenid Mobile presentation at TADHack
hSenid Mobile presentation at TADHackhSenid Mobile presentation at TADHack
hSenid Mobile presentation at TADHack
 

Recently uploaded

Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
Drona Infotech
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Launch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in MinutesLaunch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in Minutes
Roshan Dwivedi
 
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
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
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
 
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
 
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
 
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
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
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
 
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
 
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
 

Recently uploaded (20)

Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
 
OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024OpenMetadata Community Meeting - 5th June 2024
OpenMetadata Community Meeting - 5th June 2024
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Launch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in MinutesLaunch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in Minutes
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
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"
 
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
 
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
 
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
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
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...
 
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
 
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
 

Taxi Simulator