SlideShare a Scribd company logo
1 of 113
Download to read offline
Using the Workflow
component for
e-commerce
Michelle Sanver
Liip
@michellesanver #phpfwdays
“Learn the most by sharing
your knowledge with others”
- @coderabbi
WIIIIE o/
@michellesanver #phpfwdays
Using the Workflow
component for
e-commerce
@michellesanver #phpfwdays
Writing Good Code
@michellesanver #phpfwdays
This talk assumes little
knowledge
@michellesanver #phpfwdays
This talk is…
Open Source
@michellesanver #phpfwdays
Michelle Sanver
Colour and code addict
@michellesanver #phpfwdays
Accent!?
@michellesanver #phpfwdays
@michellesanver #phpfwdays
“It’s like Uber… 

For shopping”
@michellesanver #phpfwdays
Order API
Challenges
@michellesanver #phpfwdays
Keeping orders/prices
up to date
@michellesanver #phpfwdays
Making our
consumers love us

(Good error messages and
documentation)
@michellesanver #phpfwdays
Handling cancellation of
an order
@michellesanver #phpfwdays
Handling a large amount
of SMS and Push
notifications
@michellesanver #phpfwdays
@michellesanver #phpfwdays
State Machines
@michellesanver #phpfwdays
Why?
@michellesanver #phpfwdays
GREEN YELLOW RED
@michellesanver #phpfwdays
GREEN YELLOW RED
@michellesanver #phpfwdays
GREEN YELLOW RED
@michellesanver #phpfwdays
GREEN
YELLOW
RED
@michellesanver #phpfwdays
GREEN
YELLOW
REDTimer
@michellesanver #phpfwdays
GREEN
YELLOW
REDTimer
T1
@michellesanver #phpfwdays
GREEN
YELLOW
REDTimer
T1 T1
@michellesanver #phpfwdays
GREEN
YELLOW
REDTimer
T1 T1
T1
@michellesanver #phpfwdays
GREEN
YELLOW
RED
Timer
T1 T1
T1
T0
@michellesanver #phpfwdays
GREEN
YELLOW
RED
Timer
T1 T1
T1
T0
T0
T0
@michellesanver #phpfwdays
GREEN RED ;) BLUE
@michellesanver #phpfwdays
GREEN
YELLOW
BLUE
T1
T2
Workflow
@michellesanver #phpfwdays
GREEN
YELLOW
BLUE
T1
T2
State Machine
T3
@michellesanver #phpfwdays
We already think
in states and
workflows
@michellesanver #phpfwdays
The Order

State Machine
@michellesanver #phpfwdays
Happy Workflow
@michellesanver #phpfwdays
1. An order is created
Open
@michellesanver #phpfwdays
2. Items are updated
Open
@michellesanver #phpfwdays
3. User sets delivery
address on order.
Open
@michellesanver #phpfwdays
4. User checks out
Confirmed
@michellesanver #phpfwdays
5. Pickers get notified
Confirmed
@michellesanver #phpfwdays
6. Picker accepts order
Assigned
To
Picker
@michellesanver #phpfwdays
7. Picker goes shopping
Picked
Up
@michellesanver #phpfwdays
8. Picker delivers order
Delivered
@michellesanver #phpfwdays
9. Card gets charged for
order, picker gets paid
Delivered
@michellesanver #phpfwdays
Open Confirmed
Assigned
To
Picker
Picked
Up
Delivered
Happy Workflow
@michellesanver #phpfwdays
Cancelled Aborted
@michellesanver #phpfwdays
Cancelled
By
System
@michellesanver #phpfwdays
Open Confirmed
Assigned
To
Picker
Picked
Up
Delivered
Cancelled Aborted
Cancelled
By
System
@michellesanver #phpfwdays
Open Confirmed
Assigned
To
Picker
Picked
Up
Delivered
CancelledAborted
Cancelled
By
System
@michellesanver #phpfwdays
Open Confirmed
Assigned
To
Picker
Picked
Up
Delivered
CancelledAborted
Cancelled
By
System
Cancel Order
For technical Reasons
Cancel
Abort
Checkout
Assign to
picker
Pick Up
Deliver
Cancel
Cancel Cancel
@michellesanver #phpfwdays
Open OpenUpdateItem
@michellesanver #phpfwdays
State machines
make business
logic explicit
@michellesanver #phpfwdays
Open Confirmed
Assigned
To
Picker
Picked
Up
Delivered
CancelledAborted
Cancelled
By
System
Cancel Order
For technical Reasons
Cancel
Abort
Checkout
Assign to
picker
Pick Up
Deliver
Cancel
Cancel Cancel
@michellesanver #phpfwdays
A workflow does not contain all logic
@michellesanver #phpfwdays
The Workflow
Component
@michellesanver #phpfwdays
composer require
symfony/workflow
@michellesanver #phpfwdays
Our Workflow
@michellesanver #phpfwdays
Open Confirmed
Assigned
To
Picker
Picked
Up
Delivered
CancelledAborted
Cancelled
By
System
Cancel Order
For technical Reasons
Cancel
Abort
Checkout
Assign to
picker
Pick Up
Deliver
Cancel
Cancel Cancel
@michellesanver #phpfwdays
framework:

workflows:

order:

type: state_machine

marking_store:

type: 'single_state'

arguments:

- 'state'

supports:

- AppBundleEntityOrder

places:

- open

- confirmed

- assigned-to-delivery-person

- picked-up

- delivered

- aborted

- cancelled

transitions:

updateItem:

from: open

to: open
@michellesanver #phpfwdays
framework:

workflows:

order:

type: state_machine

marking_store:

type: 'single_state'

arguments:

- 'state'

supports:

- AppBundleEntityOrder
@michellesanver #phpfwdays
framework:

workflows:

order:

type: state_machine

marking_store:

type: 'single_state'

arguments:

- 'state'

supports:

- AppBundleEntityOrder
@michellesanver #phpfwdays
framework:

workflows:

order:

type: state_machine
marking_store:

type: 'single_state'

arguments:

- 'state'

supports:

- AppBundleEntityOrder
@michellesanver #phpfwdays
framework:

workflows:

order:

type: state_machine

marking_store:
type: 'single_state'
arguments:
- 'state'
supports:

- AppBundleEntityOrder
@michellesanver #phpfwdays
framework:

workflows:

order:

type: state_machine

marking_store:

type: 'single_state'

arguments:

- 'state'

supports:
- AppBundleEntityOrder
@michellesanver #phpfwdays
places:
- open

- confirmed

- assigned-to-picker

- picked-up

- delivered

- aborted

- cancelled

- cancelled-by-system
@michellesanver #phpfwdays
transitions:
updateItem:

from: open

to: open
@michellesanver #phpfwdays
The Model
@michellesanver #phpfwdays
public const STATE_OPEN = 'open';
public const STATE_CONFIRMED = 'confirmed';
public const STATE_ASSIGNED_TO_PICKER = 'assigned-to-picker';
public const STATE_PICKED_UP = 'picked-up';
public const STATE_DELIVERED = 'delivered';
public const STATE_ABORTED_BY_CUSTOMER = 'aborted';
public const STATE_CANCELLED_BY_SUPPORT = 'cancelled';
public const STATE_CANCELLED_BY_SYSTEM = 'cancelled-by-system';
@michellesanver #phpfwdays
public const STATES = [
self::STATE_OPEN,
self::STATE_CONFIRMED,
self::STATE_ASSIGNED_TO_PICKER,
self::STATE_PICKED_UP,
self::STATE_DELIVERED,
self::STATE_ABORTED_BY_CUSTOMER,
self::STATE_CANCELLED_BY_SUPPORT,
self::STATE_CANCELLED_BY_SYSTEM,
];
@michellesanver #phpfwdays
public const TRANSITION_UPDATE_ITEM = 'updateItem';
@michellesanver #phpfwdays
/**
* @var string
*/
private $state = self::STATE_OPEN;
@michellesanver #phpfwdays
@michellesanver #phpfwdays
Demo: Workflow
outside of Symfony
@michellesanver #phpfwdays
Events
@michellesanver #phpfwdays
EventDispatcher
@michellesanver #phpfwdays
EventDispatcher
Listener1 Listener2
@michellesanver #phpfwdays
EventDispatcher
Listener1 Listener2
@michellesanver #phpfwdays
EventDispatcher
Listener1 Listener2
Event1 Event2
@michellesanver #phpfwdays
EventDispatcher
Listener1 Listener2
Event1 Event2
@michellesanver #phpfwdays
Solves Tight Coupling
@michellesanver #phpfwdays
EventDispatcher
@michellesanver #phpfwdays
composer require
symfony/event-dispatcher
@michellesanver #phpfwdays
The Listener
@michellesanver #phpfwdays
class OrderWorkflowListener implements EventSubscriberInterface
{

…
}
@michellesanver #phpfwdays
/**
* @return array Hashmap of Symfony events this handler cares about
*/
public static function getSubscribedEvents()
{
return [
// Guard events (Validate whether the transition is allowed at all)
'workflow.order.guard' => 'guardGeneralOrderWorkflow',
sprintf('workflow.order.guard.%s', Order::TRANSITION_CHANGE_REGION) => 'guardChangeRegion',
sprintf('workflow.order.guard.%s', Order::TRANSITION_CONFIRM_ORDER) => 'guardConfirmOrder',
sprintf('workflow.order.guard.%s', Order::TRANSITION_ASSIGN_PICKER) => 'guardAssignPicker',
sprintf('workflow.order.guard.%s', Order::TRANSITION_ASSIGN_CUSTOMER) => 'guardAssignCustomer',
// Enter events (The object is about to enter a new place)
sprintf('workflow.order.enter.%s', Order::STATE_CONFIRMED) => 'enterConfirmed',
sprintf('workflow.order.enter.%s', Order::STATE_DELIVERED) => 'enterDelivered',
// Entered events (The object entered a new place)
sprintf('workflow.order.entered.%s', Order::STATE_PICKED_UP) => 'enteredPickedUp',
// The object has completed this transition.
'workflow.order.completed' => 'onCompleted',
];
}
@michellesanver #phpfwdays
/**
* @return array Hashmap of Symfony events this handler cares about
*/
public static function getSubscribedEvents()
{
return [
// Guard events (Validate whether the transition is allowed at all)
'workflow.order.guard' => 'guardGeneralOrderWorkflow',
sprintf('workflow.order.guard.%s', Order::TRANSITION_CHANGE_REGION) => 'guardChangeRegion',
sprintf('workflow.order.guard.%s', Order::TRANSITION_CONFIRM_ORDER) => 'guardConfirmOrder',
sprintf('workflow.order.guard.%s', Order::TRANSITION_ASSIGN_PICKER) => 'guardAssignPicker',
sprintf('workflow.order.guard.%s', Order::TRANSITION_ASSIGN_CUSTOMER) => 'guardAssignCustomer',
// Enter events (The object is about to enter a new place)
sprintf('workflow.order.enter.%s', Order::STATE_CONFIRMED) => 'enterConfirmed',
sprintf('workflow.order.enter.%s', Order::STATE_DELIVERED) => 'enterDelivered',
// Entered events (The object entered a new place)
sprintf('workflow.order.entered.%s', Order::STATE_PICKED_UP) => 'enteredPickedUp',
// The object has completed this transition.
'workflow.order.completed' => 'onCompleted',
];
}
@michellesanver #phpfwdays
/**
* @return array Hashmap of Symfony events this handler cares about
*/
public static function getSubscribedEvents()
{
return [
// Guard events (Validate whether the transition is allowed at all)
'workflow.order.guard' => 'guardGeneralOrderWorkflow',
sprintf('workflow.order.guard.%s', Order::TRANSITION_CHANGE_REGION) => 'guardChangeRegion',
sprintf('workflow.order.guard.%s', Order::TRANSITION_CONFIRM_ORDER) => 'guardConfirmOrder',
sprintf('workflow.order.guard.%s', Order::TRANSITION_ASSIGN_PICKER) => 'guardAssignPicker',
sprintf('workflow.order.guard.%s', Order::TRANSITION_ASSIGN_CUSTOMER) => 'guardAssignCustomer',
// Enter events (The object is about to enter a new place)
sprintf('workflow.order.enter.%s', Order::STATE_CONFIRMED) => 'enterConfirmed',
sprintf('workflow.order.enter.%s', Order::STATE_DELIVERED) => 'enterDelivered',
// Entered events (The object entered a new place)
sprintf('workflow.order.entered.%s', Order::STATE_PICKED_UP) => 'enteredPickedUp',
// The object has completed this transition.
'workflow.order.completed' => 'onCompleted',
];
}
@michellesanver #phpfwdays
/**
* @return array Hashmap of Symfony events this handler cares about
*/
public static function getSubscribedEvents()
{
return [
// Guard events (Validate whether the transition is allowed at all)
'workflow.order.guard' => 'guardGeneralOrderWorkflow',
sprintf('workflow.order.guard.%s', Order::TRANSITION_CHANGE_REGION) => 'guardChangeRegion',
sprintf('workflow.order.guard.%s', Order::TRANSITION_CONFIRM_ORDER) => 'guardConfirmOrder',
sprintf('workflow.order.guard.%s', Order::TRANSITION_ASSIGN_PICKER) => 'guardAssignPicker',
sprintf('workflow.order.guard.%s', Order::TRANSITION_ASSIGN_CUSTOMER) => 'guardAssignCustomer',
// Enter events (The object is about to enter a new place)
sprintf('workflow.order.enter.%s', Order::STATE_CONFIRMED) => 'enterConfirmed',
sprintf('workflow.order.enter.%s', Order::STATE_DELIVERED) => 'enterDelivered',
// Entered events (The object entered a new place)
sprintf('workflow.order.entered.%s', Order::STATE_PICKED_UP) => 'enteredPickedUp',
// The object has completed this transition.
'workflow.order.completed' => 'onCompleted',
];
}
@michellesanver #phpfwdays
/**
* @return array Hashmap of Symfony events this handler cares about
*/
public static function getSubscribedEvents()
{
return [
// Guard events (Validate whether the transition is allowed at all)
'workflow.order.guard' => 'guardGeneralOrderWorkflow',
sprintf('workflow.order.guard.%s', Order::TRANSITION_CHANGE_REGION) => 'guardChangeRegion',
sprintf('workflow.order.guard.%s', Order::TRANSITION_CONFIRM_ORDER) => 'guardConfirmOrder',
sprintf('workflow.order.guard.%s', Order::TRANSITION_ASSIGN_PICKER) => 'guardAssignPicker',
sprintf('workflow.order.guard.%s', Order::TRANSITION_ASSIGN_CUSTOMER) => 'guardAssignCustomer',
// Enter events (The object is about to enter a new place)
sprintf('workflow.order.enter.%s', Order::STATE_CONFIRMED) => 'enterConfirmed',
sprintf('workflow.order.enter.%s', Order::STATE_DELIVERED) => 'enterDelivered',
// Entered events (The object entered a new place)
sprintf('workflow.order.entered.%s', Order::STATE_PICKED_UP) => 'enteredPickedUp',
// The object has completed this transition.
'workflow.order.completed' => 'onCompleted',
];
}
@michellesanver #phpfwdays
Workflow component
does so much for us
@michellesanver #phpfwdays
Order API
Challenges Solved
@michellesanver #phpfwdays
Keeping orders/prices
up to date
@michellesanver #phpfwdays
public function onCompleted(Event $event): void
{
$transition = $event->getTransition();
$fromState = $transition->getFroms()[0];
/** @var Order $order */
$order = $event->getSubject();
// If an order is already in delivered state, all calculations are done, and should stay as
they are.
if (Order::STATE_DELIVERED !== $fromState) {
$this->orderModifier->updateTotals($order);
}
$this->orderStateHistoryRepository->storeOrderStateTransition($order, $transition);
$this->orderEventService->eventHappened($transition->getName(), $order->getId(), $fromState);
}
@michellesanver #phpfwdays
public function onCompleted(Event $event): void
{
$transition = $event->getTransition();
$fromState = $transition->getFroms()[0];
/** @var Order $order */
$order = $event->getSubject();
// If an order is already in delivered state, all calculations are done, and should stay as
they are.
if (Order::STATE_DELIVERED !== $fromState) {
$this->orderModifier->updateTotals($order);
}
$this->orderStateHistoryRepository->storeOrderStateTransition($order, $transition);
$this->orderEventService->eventHappened($transition->getName(), $order->getId(), $fromState);
}
@michellesanver #phpfwdays
if (Order::STATE_DELIVERED !== $fromState) {
$this->orderModifier->updateTotals($order);
}
@michellesanver #phpfwdays
Making our
consumers love us

(Good error messages and
documentation)
@michellesanver #phpfwdays
Handling cancellation of
an order
@michellesanver #phpfwdays
Handling a large amount
of SMS and Push
notifications
@michellesanver #phpfwdays
public function onCompleted(Event $event): void
{
$transition = $event->getTransition();
$fromState = $transition->getFroms()[0];
/** @var Order $order */
$order = $event->getSubject();
// If an order is already in delivered state, all calculations are done, and should stay as
they are.
if (Order::STATE_DELIVERED !== $fromState) {
$this->orderModifier->updateTotals($order);
}
$this->orderStateHistoryRepository->storeOrderStateTransition($order, $transition);
$this->orderEventService->eventHappened($transition->getName(), $order->getId(), $fromState);
}
@michellesanver #phpfwdays
public function onCompleted(Event $event): void
{
$transition = $event->getTransition();
$fromState = $transition->getFroms()[0];
/** @var Order $order */
$order = $event->getSubject();
// If an order is already in delivered state, all calculations are done, and should stay as
they are.
if (Order::STATE_DELIVERED !== $fromState) {
$this->orderModifier->updateTotals($order);
}
$this->orderStateHistoryRepository->storeOrderStateTransition($order, $transition);
$this->orderEventService->eventHappened($transition->getName(), $order->getId(), $fromState);
}
@michellesanver #phpfwdays
$this->orderEventService->eventHappened($transition->getName(), $order->getId(), $fromState);
@michellesanver #phpfwdays
public function eventHappened(string $type, string $orderId, ?string $previousState)
{
foreach ($this->handlers as $handler) {
if ($handler->canHandle($type)) {
$this->orderEventProducer->publish(
$type,
$orderId,
$previousState,
$handler->getPriority()
);
return;
}
}
}
@michellesanver #phpfwdays
public function eventHappened(string $type, string $orderId, ?string $previousState)
{
foreach ($this->handlers as $handler) {
if ($handler->canHandle($type)) {
$this->orderEventProducer->publish(
$type,
$orderId,
$previousState,
$handler->getPriority()
);
return;
}
}
}
@michellesanver #phpfwdays
class SmsNotificationHandler implements OrderEventHandler
{
private const TRANSITION_STATE_MAP = [
Order::TRANSITION_ASSIGN_PICKER => Order::STATE_ASSIGNED_TO_PICKER,
Order::TRANSITION_TIMEOUT_FINDING_PICKER => Order::STATE_ABORTED_BY_CUSTOMER,
Order::TRANSITION_PICKER_CONFIRMS_PURCHASE => Order::STATE_PICKED_UP,
Order::TRANSITION_CONFIRM_DELIVERY => Order::STATE_DELIVERED,
Order::TRANSITION_REFERRAL_PICKER_RECEIVES_REWARD => Order::STATE_DELIVERED,
Order::TRANSITION_SEND_ORDER_AVAILABLE_REMINDER => Order::STATE_CONFIRMED,
];
@michellesanver #phpfwdays
public function canHandle(string $type): bool
{
return array_key_exists($type, self::TRANSITION_STATE_MAP);
}
@michellesanver #phpfwdays
Conclusion
@michellesanver #phpfwdays
We already think
in states and
workflows
@michellesanver #phpfwdays
State machines
make business
logic explicit
@michellesanver #phpfwdays
Workflow component
does so much for us!
@michellesanver #phpfwdays
Writing Good Code
@michellesanver #phpfwdays
This talk is for you
Questions?
Contributions?
@michellesanver #phpfwdays
Thank You
#phpfwdays
Thank You
#phpfwdays
Michelle Sanver
Liip

More Related Content

What's hot

Monoids, Store, and Dependency Injection - Abstractions for Spark Streaming Jobs
Monoids, Store, and Dependency Injection - Abstractions for Spark Streaming JobsMonoids, Store, and Dependency Injection - Abstractions for Spark Streaming Jobs
Monoids, Store, and Dependency Injection - Abstractions for Spark Streaming JobsRyan Weald
 
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)James Titcumb
 
Confident Refactoring - Ember SF Meetup
Confident Refactoring - Ember SF MeetupConfident Refactoring - Ember SF Meetup
Confident Refactoring - Ember SF MeetupFastly
 
Railway Orientated Programming In C#
Railway Orientated Programming In C#Railway Orientated Programming In C#
Railway Orientated Programming In C#Tama000
 
Best practices for crafting high quality PHP apps (ScotlandPHP 2018)
Best practices for crafting high quality PHP apps (ScotlandPHP 2018)Best practices for crafting high quality PHP apps (ScotlandPHP 2018)
Best practices for crafting high quality PHP apps (ScotlandPHP 2018)James Titcumb
 
Rails antipatterns
Rails antipatternsRails antipatterns
Rails antipatternsChul Ju Hong
 
Styling recipes for Angular components
Styling recipes for Angular componentsStyling recipes for Angular components
Styling recipes for Angular componentsNir Kaufman
 
Turn your spaghetti code into ravioli with JavaScript modules
Turn your spaghetti code into ravioli with JavaScript modulesTurn your spaghetti code into ravioli with JavaScript modules
Turn your spaghetti code into ravioli with JavaScript modulesjerryorr
 

What's hot (8)

Monoids, Store, and Dependency Injection - Abstractions for Spark Streaming Jobs
Monoids, Store, and Dependency Injection - Abstractions for Spark Streaming JobsMonoids, Store, and Dependency Injection - Abstractions for Spark Streaming Jobs
Monoids, Store, and Dependency Injection - Abstractions for Spark Streaming Jobs
 
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
Kicking off with Zend Expressive and Doctrine ORM (ConFoo YVR 2017)
 
Confident Refactoring - Ember SF Meetup
Confident Refactoring - Ember SF MeetupConfident Refactoring - Ember SF Meetup
Confident Refactoring - Ember SF Meetup
 
Railway Orientated Programming In C#
Railway Orientated Programming In C#Railway Orientated Programming In C#
Railway Orientated Programming In C#
 
Best practices for crafting high quality PHP apps (ScotlandPHP 2018)
Best practices for crafting high quality PHP apps (ScotlandPHP 2018)Best practices for crafting high quality PHP apps (ScotlandPHP 2018)
Best practices for crafting high quality PHP apps (ScotlandPHP 2018)
 
Rails antipatterns
Rails antipatternsRails antipatterns
Rails antipatterns
 
Styling recipes for Angular components
Styling recipes for Angular componentsStyling recipes for Angular components
Styling recipes for Angular components
 
Turn your spaghetti code into ravioli with JavaScript modules
Turn your spaghetti code into ravioli with JavaScript modulesTurn your spaghetti code into ravioli with JavaScript modules
Turn your spaghetti code into ravioli with JavaScript modules
 

Similar to Michelle Sanver "Using the Workflow component for e-commerce"

Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...
Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...
Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...Coupa Software
 
Rails antipattern-public
Rails antipattern-publicRails antipattern-public
Rails antipattern-publicChul Ju Hong
 
Going serverless with Fn project, Fn Flow and Kubernetes
Going serverless with Fn project, Fn Flow and KubernetesGoing serverless with Fn project, Fn Flow and Kubernetes
Going serverless with Fn project, Fn Flow and KubernetesAndy Moncsek
 
Intro to-rails-webperf
Intro to-rails-webperfIntro to-rails-webperf
Intro to-rails-webperfNew Relic
 
深入淺出 MVC
深入淺出 MVC深入淺出 MVC
深入淺出 MVCJace Ju
 
The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010Fabien Potencier
 
Beyond MVC: from Model to Domain
Beyond MVC: from Model to DomainBeyond MVC: from Model to Domain
Beyond MVC: from Model to DomainJeremy Cook
 
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Michelangelo van Dam
 
Synapseindia reviews sharing intro cakephp
Synapseindia reviews sharing intro cakephpSynapseindia reviews sharing intro cakephp
Synapseindia reviews sharing intro cakephpSynapseindiaComplaints
 
Web Performance Culture and Tools at Etsy
Web Performance Culture and Tools at EtsyWeb Performance Culture and Tools at Etsy
Web Performance Culture and Tools at EtsyMike Brittain
 
Event Driven Architecture (Integration Tech Event 2019)
Event Driven Architecture (Integration Tech Event 2019)Event Driven Architecture (Integration Tech Event 2019)
Event Driven Architecture (Integration Tech Event 2019)Jeppe Cramon
 
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSAntonio Peric-Mazar
 
Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)Fabien Potencier
 
Multi tenant/lang application with Ruby on Rails
Multi tenant/lang application with Ruby on RailsMulti tenant/lang application with Ruby on Rails
Multi tenant/lang application with Ruby on RailsSimon Courtois
 
PHP and MySQL : Server Side Scripting For Web Development
PHP and MySQL : Server Side Scripting For Web DevelopmentPHP and MySQL : Server Side Scripting For Web Development
PHP and MySQL : Server Side Scripting For Web DevelopmentEdureka!
 
Send, pass, get variables with php, form, html & java script code
Send, pass, get variables with php, form, html & java script codeSend, pass, get variables with php, form, html & java script code
Send, pass, get variables with php, form, html & java script codeNoushadur Shoukhin
 
Live Streaming & Server Sent Events
Live Streaming & Server Sent EventsLive Streaming & Server Sent Events
Live Streaming & Server Sent Eventstkramar
 
Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012Michelangelo van Dam
 

Similar to Michelle Sanver "Using the Workflow component for e-commerce" (20)

Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...
Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...
Staying railsy - while scaling complexity or Ruby on Rails in Enterprise Soft...
 
Dancing with websocket
Dancing with websocketDancing with websocket
Dancing with websocket
 
Rails antipattern-public
Rails antipattern-publicRails antipattern-public
Rails antipattern-public
 
Going serverless with Fn project, Fn Flow and Kubernetes
Going serverless with Fn project, Fn Flow and KubernetesGoing serverless with Fn project, Fn Flow and Kubernetes
Going serverless with Fn project, Fn Flow and Kubernetes
 
Intro to-rails-webperf
Intro to-rails-webperfIntro to-rails-webperf
Intro to-rails-webperf
 
深入淺出 MVC
深入淺出 MVC深入淺出 MVC
深入淺出 MVC
 
The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010The state of Symfony2 - SymfonyDay 2010
The state of Symfony2 - SymfonyDay 2010
 
Beyond MVC: from Model to Domain
Beyond MVC: from Model to DomainBeyond MVC: from Model to Domain
Beyond MVC: from Model to Domain
 
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12
 
Synapseindia reviews sharing intro cakephp
Synapseindia reviews sharing intro cakephpSynapseindia reviews sharing intro cakephp
Synapseindia reviews sharing intro cakephp
 
Web Performance Culture and Tools at Etsy
Web Performance Culture and Tools at EtsyWeb Performance Culture and Tools at Etsy
Web Performance Culture and Tools at Etsy
 
Introduction to Angular JS
Introduction to Angular JSIntroduction to Angular JS
Introduction to Angular JS
 
Event Driven Architecture (Integration Tech Event 2019)
Event Driven Architecture (Integration Tech Event 2019)Event Driven Architecture (Integration Tech Event 2019)
Event Driven Architecture (Integration Tech Event 2019)
 
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJS
 
Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)
 
Multi tenant/lang application with Ruby on Rails
Multi tenant/lang application with Ruby on RailsMulti tenant/lang application with Ruby on Rails
Multi tenant/lang application with Ruby on Rails
 
PHP and MySQL : Server Side Scripting For Web Development
PHP and MySQL : Server Side Scripting For Web DevelopmentPHP and MySQL : Server Side Scripting For Web Development
PHP and MySQL : Server Side Scripting For Web Development
 
Send, pass, get variables with php, form, html & java script code
Send, pass, get variables with php, form, html & java script codeSend, pass, get variables with php, form, html & java script code
Send, pass, get variables with php, form, html & java script code
 
Live Streaming & Server Sent Events
Live Streaming & Server Sent EventsLive Streaming & Server Sent Events
Live Streaming & Server Sent Events
 
Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012
 

More from Fwdays

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...Fwdays
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil TopchiiFwdays
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro SpodaretsFwdays
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym KindritskyiFwdays
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...Fwdays
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...Fwdays
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...Fwdays
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...Fwdays
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...Fwdays
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...Fwdays
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...Fwdays
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...Fwdays
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra MyronovaFwdays
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...Fwdays
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...Fwdays
 

More from Fwdays (20)

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
 

Recently uploaded

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 

Recently uploaded (20)

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 

Michelle Sanver "Using the Workflow component for e-commerce"