SlideShare a Scribd company logo
1 of 126
Mark   Proctor Project Lead ,[object Object]
The system goes online on August 4th, 1997.
Human decisions are removed from strategic defense.
SkyNet begins to learn at a geometric rate.
It becomes self-aware at 2:14am Eastern time, August 29th
In a panic, they try to pull the plug.
And, Skynet fights back
Agenda ,[object Object]
History
Declarative Programming
Drools Expert
Drools Fustion
jBPM
Roadmap
Boot Camps ,[object Object]
Sun, FAMC, OSDE, Kaseya, Fedex, TU Group, Intermountain Healthcare, Gap, Sony Pictures, Lockheed Martin, Kaiser, HP, Wells Fargo, US Navy Research, FOLIOfn, Boeing ..... ,[object Object],[object Object]
5 day event, with 2 days focus on the healthcare industry
OSDE, AT&T, SAIC, US Navy Research, Kaiser, Clinica, Intermountain Healthcare, GE Healthcare, VA, Boeing, Nationwide ....
Books ,[object Object]
Oh And There are Drools Books Too
History
It All Started Here Birth of CDSS Clinical Decision Support Systems 1970s 1980s Dendral Baobab Mycin Guidon Neomycin Teiresias Puff Emycin WM Sacon Centaur Wheeze Gravida Clot Oncocin
Because Not Everyone  Is As Smart As He Is
Business Rules Engines 1980s 2010s 1990s 2000s OPS5 ART Clips Jess Drools 2 JRules Drools 3 Drools 4 Drools 5
Drools History ,[object Object]
Iterative improves to JRules syntax with Clips functionality ,[object Object],[object Object]
Basic functional programming feature with “from”
Basic Rule Flow
Basic BRMS ,[object Object],[object Object]
More Advanced Rule Flow integration
Complex Event Process ,[object Object]
Sliding Time Windows ,[object Object]
Drools History ,[object Object]
Multi-function accumulates
Prolog like derivation queries
Decision tables and rule templates (Guvnor)
Pure GWT (Guvnor) ,[object Object],[object Object]
Declarative Programming
Integrated Systems Semantic  Ontologies Rules Event Processes Workflows Rules  Workflows Event Processes Semantic  Ontologies
Integrated Systems
Rules and processes loosely coupled tightly coupled specific generic Decision Services Process Rules SCOPE COUPLING ?
Business Logic Lifecycle
Declarative Programming ,[object Object]
when Alarm( status == “alert” )  then send( “warning” ) ,[object Object],[object Object]
descendant( “mary”, “jane”) ,[object Object],[object Object]
avg([12, 16, 4, 6]) ,[object Object],[object Object],[object Object],[object Object],[object Object]
Concepts Overview
Concepts Overview
Concepts Overview
Drools Expert
Classes
rule “increase balance for AccountPeriod Credits” when ap : AccountPeriod() acc : Account( $accountNo : accountNo )  CashFlow( type == CREDIT, accountNo == $accountNo, date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance  += $amount;  end select * from  Account acc,  Cashflow cf, AccountPeriod ap where acc.accountNo ==  cf.accountNo and cf.type == CREDIT  cf.date >= ap.start and cf.date <= ap.end trigger : acc.balance += cf.amount Credit Cashflow Rule
rule “increase balance for AccountPeriod  Credits” when ap : AccountPeriod() acc : Account( $accountNo : accountNo )  CashFlow( type == CREDIT, accountNo == $accountNo, date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance  += $amount;  end rule “decrease balance for AccountPeriod  Debits” when ap : AccountPeriod() acc : Account( $accountNo : accountNo )  CashFlow( type == DEBIT, accountNo == $accountNo, date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance  -= $amount;  end Rules as a “view”
Definitions public class   Room   { private  String  name // getter and setter methods here } public class   Sprinkler { private  Room  room ; private  boolean  on ; // getter and setter methods here } public class  Fire { private  Room  room ; // getter and setter methods here } public class   Alarm { }
Definitions rule   &quot;When there is a fire turn on the sprinkler&quot;   when Fire ($room : room) $sprinkler :  Sprinkler ( room == $room, on == false ) then modify ( $sprinkler ) { on = true }; println (  &quot;Turn on the sprinkler for room &quot;  + $room.name ); end rule   &quot;When the fire is gone turn off the sprinkler&quot;   when $room :  Room ( ) $sprinkler :  Sprinkler ( room == $room, on == true ) not   Fire ( room == $room ) then modify ( $sprinkler ) { on = false }; println (  &quot;Turn off the sprinkler for room &quot;  + $room.name ); end
Definitions rule   &quot;Raise the alarm when we have one or more fires&quot;   when exists   Fire () then insert (  new   Alarm () ); println (  &quot;Raise the alarm&quot;  ); end rule   &quot;Cancel the alarm when all the fires have gone&quot;   when not   Fire () $alarm :  Alarm () then retract ( $alarm ); println (  &quot;Cancel the alarm&quot;  ); end
Definitions rule  &quot;Status output when things are ok&quot;  when not   Alarm () not   Sprinkler ( on == true )  then println (  &quot;Everything is ok&quot;  ); end
Executing String []  names  =  new   String []{ &quot;kitchen&quot; ,  &quot;bedroom&quot; ,  &quot;office&quot; ,  &quot;livingroom&quot; }; Map < String , Room >  name2room  =  new   HashMap < String , Room >(); for (  String   name :  names  ){ Room   room  =  new   Room (  name  ); name2room .put(  name ,  room  ); ksession .insert( room ); Sprinkler   sprinkler  =  new   Sprinkler ( room ); ksession .insert(  sprinkler  ); } ksession .fireAllRules() >  Everything is ok
Executing Fire   kitchenFire  =  new   Fire ( name2room.get(  &quot;kitchen&quot;  ) ); Fire   officeFire  =  new   Fire ( name2room.get(  &quot;office&quot;  ) ); FactHandle   kitchenFireHandle  =  ksession .insert( kitchenFire ); FactHandle   officeFireHandle  =  ksession .insert( officeFire ); ksession .fireAllRules(); >  Raise the alarm >  Turn on the sprinkler for room kitchen >  Turn on the sprinkler for room office
Executing ksession .retract( kitchenFireHandle ); ksession .retract( officeFireHandle ); ksession .fireAllRules() >  Turn off the sprinkler for room office >  Turn off the sprinkler for room kitchen >  Cancel the alarm >  Everything is ok rule  &quot;Status output when things are ok&quot;  when not   Alarm () not   Sprinkler ( on == true )  then println (  &quot;Everything is ok&quot;  ); end
not  Bus( color = “red” ) Conditional Elements exists  Bus( color = “red” ) forall (  $bus : Bus( floors == 2 ) Bus( this == $bus, color == “red” ) ) forall (  $bus : Bus( color == “red” ) )
Accumulate CE rule   &quot;accumulate&quot; when   $sum : Number( intValue > 100 )  from   accumulate ( Bus( color  ==  &quot;red&quot; , $t : takings )  sum( $t ) ) then print  &quot;sum is “  + $sum; end
Accumulate CE Patterns and CE's can be chained with ' from ' rule   &quot;collect&quot; when   $zipCode : ZipCode() $sum : Number( intValue > 100 )  from   accumulate ( Bus( color  ==  &quot;red&quot; , $t : takings ) from  $hbn.getNamedQuery( “Find Buses” ) .setParameters( [  “zipCode”  :  $zipCode ] ) .list(), sum( $t )  ) then print  &quot;sum is “  + $sum; end
Timers rule   “name” timer  (  cron: 0 0/15 * * * * ) when Alarm(  ) then sendEmail(  ”Alert Alert Alert!!!”  ) Field Name   Mandatory?    Allowed Values    Allowed Special Characters Seconds   YES    0-59    , - * / Minutes    YES    0-59    , - * / Hours    YES    0-23    , - * / Day of month YES    1-31    , - * ? / L W Month    YES    1-12 or JAN-DEC    , - * / Day of week   YES    1-7 or SUN-SAT    , - * ? / L # Year    NO    empty, 1970-2099    , - * /  Send alert every quarter of an hour
Calendars rule   &quot;weekdays are high priority&quot; calendars  &quot;weekday&quot; timer  (int:0 1h) when   Alarm() then send(  &quot;priority high - we have an alarm”  ); end   rule   &quot;weekend are low priority&quot; calendars   &quot;weekend&quot; timer  (int:0 4h) when   Alarm() then send(  &quot;priority low - we have an alarm”  ); end Execute now and after  1 hour duration Execute now and after  4 hour duration
Backward Chaining query  isContainedIn( String x, String y ) Location ( x, y; ) or (  Location (  z , y; )  and   ?isContainedIn ( x,  z ; ) ) end rule  reactiveLook when Here ( place : place)  ?isContainedIn ( place,  &quot;keys&quot; ; ) then System.out.println(  &quot;We have found your keys&quot;  ); end
Drools Fusion
Drools Fusion: Enables... ,[object Object]
Ability to reason over event aggregation. ,[object Object],[object Object],[object Object],[object Object]
Drools Fusion: Features ,[object Object]
Strong temporal relationships
Managed lifecycle
Point-in-time and Interval events ,[object Object],[object Object],[object Object],[object Object]
Event Driven Architecture (EDA) “ Event Driven Architecture (EDA)  is a software architecture pattern promoting the  production ,  detection ,  consumption  of, and  reaction  to events. An  event  can be defined as &quot;a significant change in state&quot;[1]. For example, when a consumer purchases a car, the car's state changes from &quot;for sale&quot; to &quot;sold&quot;. A car dealer's system architecture may treat this state change as an event to be produced, published, detected and consumed by various applications within the architecture.”
CEP vs EDA vs SOA ,[object Object]
EDA  is  **not**  SOA 2.0
Complementary  architectures
Metaphor ,[object Object]
EDA is used to build our  sensory system
$c : Custumer( type == “VIP ) BuyOrderEvent( customer == $c )  from entry-point  “Home Broker Stream” Scalability EntryPoint entryPoint = session. getEntryPoint ( “Home Broker Stream” ); entryPoint.insert( event ) ; So lets allow multiple named entry points for those streams So now we can insert different streams concurrently Patterns can now optional specify their entry-point.  When not specified uses the “default” entry-point
declare StockTick @role( event ) end declare StockTick @role( event ) @timestamp( timestampAttr ) companySymbol : String stockPrice : double timestampAttr : long end Automatic Life-Cycle Management Just use the declare statement to declare a type as an event and it will be retracted when it is no longer needed  The declare statement can also specify an internal model, that external objects/xml/csv map on to. We support Smooks and JAXB
$c  : Custumer( type == “VIP ) $oe : BuyOrderEvent( customer == $c )  from entry-point “Home Broker Stream” BuyAckEvent( relatedEvent == $oe.id, this  after[1s, 10s]  $oe )  from entry-point “Stock Trader Stream” ,[object Object]
before
after
meets
metby ,[object Object]
overlappedby
during
includes ,[object Object]
startedby
finishes
finishedby Operators The Full set of Operators are supported BackAckEvent must occur between 1s and 10s ' after'  BuyOrderEvent
Drools Fusion: Temporal Reasoning
Drools Fusion: Temporal Reasoning
$c  : Custumer( type == “VIP ) $oe : BuyOrderEvent( customer == $c )  from entry-point “Home Broker Stream” not  BuyAckEvent( relatedEvent == $oe.id, this after[1s, 10s] $oe )  from entry-point “Stock Trader Stream” Operators Existing Drools  'not'  Conditional Elements can be used to detect non-occurrence of events BackAckEvent must occur between 1s and 10s ' after'  BuyOrderEvent
Aggregations $n : Number( intValue > 100 )  from accumulate (  $s : StockTicker( symbol == “RHAT”  )  over window:time ( 5s ), average ( $s.price ) ) Over 5 seconds Aggregate ticker price for RHAT over last 5 seconds The pattern 'Number' reasons 'from' the accumulate result
Aggregations acc (  $s : StockTicker( symbol == “RHAT”  )  over window:time ( 5s ); $min :  min ( $s.price ), $min :  min ( $s.price ), $avg :  avg ( $s.price ); $min > 10 &&  $max < 20 &&  $avg > 16 ) Over 5 seconds functions Accumlate over data Guard constraint
Aggregations Rule Engines do not deal with aggregations $n : Number( intValue > 100 )  from accumulate (  $s : StockTicker( symbol == “RHAT”  )  over window:time ( 5s ), average ( $s.price ) ) Over 5 seconds Aggregate ticker price for RHAT over last 5 seconds The pattern 'Number' reasons 'from' the accumulate result
CEP Applied at FedEx Custom Critical ,[object Object]
Exclusive use non-stop door-to-door services
Blended Surface and Air services to minimize cost and transit time
Extra care in handling and specially equipped vehicles ,[object Object],* Presented by Adam Mollemkopf at ORF 2009
CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009 ,[object Object]
Risk Avoidance via pro-active monitoring ,[object Object],[object Object]
CEP Applied at FedEx Custom Critical ,[object Object]
Average of 500k+ facts/events concurrently in memory ,[object Object],[object Object],[object Object]
Peak: 1.2 sec ,[object Object]
TMS and Inference rule   &quot;Issue Child Bus Pass&quot; when $p :  Person ( age < 16 ) then insert(new  ChildBusPass ( $p ) ); end rule   &quot;Issue Adult Bus Pass&quot; when $p :  Person ( age >= 16 ) then insert(new  AdultBusPass ( $p ) ); end Couples the logic What happens when the Child  stops being 16?
TMS and Inference ,[object Object]
Leaky
Brittle integrity - manual maintenance
TMS and Inference ,[object Object]
When the rule is no longer true, the object is retracted. when $p :  Person ( age < 16 ) then logicalInsert (  new   IsChild ( $p ) ) end when $p :  Person ( age >= 16 ) then logicalInsert (  new   IsAdult ( $p ) ) end de-couples the logic Maintains the truth by  automatically retracting
TMS and Inference rule   &quot;Issue Child Bus Pass&quot; when $p :  Person ( ) IsChild ( person == $p ) then logicalInsert ( new   ChildBusPass ( $p ) ); end rule   &quot;Issue Adult Bus Pass&quot; when $p :  Person ( age >= 16 ) IsAdult ( person == $p ) then logicalInsert ( new   AdultBusPass ( $p ) ); end The truth maintenance cascades
TMS and Inference rule   &quot;Issue Child Bus Pass&quot; when $p :  Person ( ) not (  ChildBusPass ( person == $p ) ) then requestChildBusPass( $p ); end The truth maintenance cascades
TMS and Inference ,[object Object]
Encapsulate knowledge
Provide semantic abstractions for those encapsulation
Integrity robustness – truth maintenance
Some decisions are complex What insurance premium should I charge?

More Related Content

What's hot

Implementing virtual machines in go & c 2018 redux
Implementing virtual machines in go & c 2018 reduxImplementing virtual machines in go & c 2018 redux
Implementing virtual machines in go & c 2018 reduxEleanor McHugh
 
Java 8 Puzzlers [as presented at OSCON 2016]
Java 8 Puzzlers [as presented at  OSCON 2016]Java 8 Puzzlers [as presented at  OSCON 2016]
Java 8 Puzzlers [as presented at OSCON 2016]Baruch Sadogursky
 
The Groovy Puzzlers – The Complete 01 and 02 Seasons
The Groovy Puzzlers – The Complete 01 and 02 SeasonsThe Groovy Puzzlers – The Complete 01 and 02 Seasons
The Groovy Puzzlers – The Complete 01 and 02 SeasonsBaruch Sadogursky
 
C# Application program UNIT III
C# Application program UNIT IIIC# Application program UNIT III
C# Application program UNIT IIIMinu Rajasekaran
 
The Ring programming language version 1.9 book - Part 91 of 210
The Ring programming language version 1.9 book - Part 91 of 210The Ring programming language version 1.9 book - Part 91 of 210
The Ring programming language version 1.9 book - Part 91 of 210Mahmoud Samir Fayed
 
Fundamentals of Cryptography - Caesar Cipher - Python
Fundamentals of Cryptography - Caesar Cipher - Python Fundamentals of Cryptography - Caesar Cipher - Python
Fundamentals of Cryptography - Caesar Cipher - Python Isham Rashik
 
Dive into kotlins coroutines
Dive into kotlins coroutinesDive into kotlins coroutines
Dive into kotlins coroutinesFreddie Wang
 
Event Stream Processing with Multiple Threads
Event Stream Processing with Multiple ThreadsEvent Stream Processing with Multiple Threads
Event Stream Processing with Multiple ThreadsSylvain Hallé
 
The Ring programming language version 1.3 book - Part 36 of 88
The Ring programming language version 1.3 book - Part 36 of 88The Ring programming language version 1.3 book - Part 36 of 88
The Ring programming language version 1.3 book - Part 36 of 88Mahmoud Samir Fayed
 
PHP for Python Developers
PHP for Python DevelopersPHP for Python Developers
PHP for Python DevelopersCarlos Vences
 
Go ahead, make my day
Go ahead, make my dayGo ahead, make my day
Go ahead, make my dayTor Ivry
 
RAILWAY RESERWATION PROJECT PROGRAM
RAILWAY RESERWATION PROJECT PROGRAMRAILWAY RESERWATION PROJECT PROGRAM
RAILWAY RESERWATION PROJECT PROGRAMKrishna Raj
 
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf MilanFrom Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf MilanFabio Collini
 
The Ring programming language version 1.5.3 book - Part 46 of 184
The Ring programming language version 1.5.3 book - Part 46 of 184The Ring programming language version 1.5.3 book - Part 46 of 184
The Ring programming language version 1.5.3 book - Part 46 of 184Mahmoud Samir Fayed
 
Programmation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScriptProgrammation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScriptLoïc Knuchel
 

What's hot (20)

Implementing virtual machines in go & c 2018 redux
Implementing virtual machines in go & c 2018 reduxImplementing virtual machines in go & c 2018 redux
Implementing virtual machines in go & c 2018 redux
 
Java 8 Puzzlers [as presented at OSCON 2016]
Java 8 Puzzlers [as presented at  OSCON 2016]Java 8 Puzzlers [as presented at  OSCON 2016]
Java 8 Puzzlers [as presented at OSCON 2016]
 
The Groovy Puzzlers – The Complete 01 and 02 Seasons
The Groovy Puzzlers – The Complete 01 and 02 SeasonsThe Groovy Puzzlers – The Complete 01 and 02 Seasons
The Groovy Puzzlers – The Complete 01 and 02 Seasons
 
01c shell
01c shell01c shell
01c shell
 
C# Application program UNIT III
C# Application program UNIT IIIC# Application program UNIT III
C# Application program UNIT III
 
The Ring programming language version 1.9 book - Part 91 of 210
The Ring programming language version 1.9 book - Part 91 of 210The Ring programming language version 1.9 book - Part 91 of 210
The Ring programming language version 1.9 book - Part 91 of 210
 
Fundamentals of Cryptography - Caesar Cipher - Python
Fundamentals of Cryptography - Caesar Cipher - Python Fundamentals of Cryptography - Caesar Cipher - Python
Fundamentals of Cryptography - Caesar Cipher - Python
 
Dive into kotlins coroutines
Dive into kotlins coroutinesDive into kotlins coroutines
Dive into kotlins coroutines
 
Event Stream Processing with Multiple Threads
Event Stream Processing with Multiple ThreadsEvent Stream Processing with Multiple Threads
Event Stream Processing with Multiple Threads
 
Linked lists
Linked listsLinked lists
Linked lists
 
lec4.docx
lec4.docxlec4.docx
lec4.docx
 
The Ring programming language version 1.3 book - Part 36 of 88
The Ring programming language version 1.3 book - Part 36 of 88The Ring programming language version 1.3 book - Part 36 of 88
The Ring programming language version 1.3 book - Part 36 of 88
 
PHP for Python Developers
PHP for Python DevelopersPHP for Python Developers
PHP for Python Developers
 
Lisp
LispLisp
Lisp
 
Go ahead, make my day
Go ahead, make my dayGo ahead, make my day
Go ahead, make my day
 
RAILWAY RESERWATION PROJECT PROGRAM
RAILWAY RESERWATION PROJECT PROGRAMRAILWAY RESERWATION PROJECT PROGRAM
RAILWAY RESERWATION PROJECT PROGRAM
 
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf MilanFrom Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
 
The Ring programming language version 1.5.3 book - Part 46 of 184
The Ring programming language version 1.5.3 book - Part 46 of 184The Ring programming language version 1.5.3 book - Part 46 of 184
The Ring programming language version 1.5.3 book - Part 46 of 184
 
Programmation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScriptProgrammation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScript
 
Class 5 2ciclo
Class 5 2cicloClass 5 2ciclo
Class 5 2ciclo
 

Viewers also liked

Learning Rule Based Programming using Games @DecisionCamp 2016
Learning Rule Based Programming using Games @DecisionCamp 2016Learning Rule Based Programming using Games @DecisionCamp 2016
Learning Rule Based Programming using Games @DecisionCamp 2016Mark Proctor
 
Big Data, Analytics and Real Time Event Processing
Big Data, Analytics and Real Time Event Processing Big Data, Analytics and Real Time Event Processing
Big Data, Analytics and Real Time Event Processing WSO2
 
Drools Happenings 7.0 - Devnation 2016
Drools Happenings 7.0 - Devnation 2016Drools Happenings 7.0 - Devnation 2016
Drools Happenings 7.0 - Devnation 2016Mark Proctor
 
Intelligent Business Processes
Intelligent Business ProcessesIntelligent Business Processes
Intelligent Business ProcessesSandy Kemsley
 
Next-Generation BPM - How to create intelligent Business Processes thanks to ...
Next-Generation BPM - How to create intelligent Business Processes thanks to ...Next-Generation BPM - How to create intelligent Business Processes thanks to ...
Next-Generation BPM - How to create intelligent Business Processes thanks to ...Kai Wähner
 
Speciale. JND209. Jeppe Stavnsbo Sørensen
Speciale. JND209. Jeppe Stavnsbo SørensenSpeciale. JND209. Jeppe Stavnsbo Sørensen
Speciale. JND209. Jeppe Stavnsbo SørensenJeppe Stavnsbo
 
New base special 27 january 2014
New base special  27 january 2014New base special  27 january 2014
New base special 27 january 2014Khaled Al Awadi
 
An Empirical Analysis of Attributes Influencing... Shirin - Abdulaziz -Chris ...
An Empirical Analysis of Attributes Influencing... Shirin - Abdulaziz -Chris ...An Empirical Analysis of Attributes Influencing... Shirin - Abdulaziz -Chris ...
An Empirical Analysis of Attributes Influencing... Shirin - Abdulaziz -Chris ...Shirin Avazxanovna
 
PROJECT PORTFOLIO-Antony Ochieng Odhiambo.
PROJECT PORTFOLIO-Antony Ochieng Odhiambo.PROJECT PORTFOLIO-Antony Ochieng Odhiambo.
PROJECT PORTFOLIO-Antony Ochieng Odhiambo.Anthony Ochieng.
 
Mississippi's Navy Connections
Mississippi's Navy ConnectionsMississippi's Navy Connections
Mississippi's Navy ConnectionsPictureYourself
 
Internship report Robin Corral
Internship report Robin CorralInternship report Robin Corral
Internship report Robin CorralRobin Corral
 
QNB Group Indonesia Economic Insight 2014
QNB Group Indonesia Economic Insight 2014QNB Group Indonesia Economic Insight 2014
QNB Group Indonesia Economic Insight 2014Joannes Mongardini
 
QNB Group China Economic Insight 2015
QNB Group China Economic Insight 2015QNB Group China Economic Insight 2015
QNB Group China Economic Insight 2015Joannes Mongardini
 
Tài liệu tổng quát về cơ sở dữ liệu
Tài liệu tổng quát về cơ sở dữ liệuTài liệu tổng quát về cơ sở dữ liệu
Tài liệu tổng quát về cơ sở dữ liệuAnh Duong Pham
 
Pro mark3rtk reference manual
Pro mark3rtk reference manualPro mark3rtk reference manual
Pro mark3rtk reference manualandy jaya
 

Viewers also liked (20)

Learning Rule Based Programming using Games @DecisionCamp 2016
Learning Rule Based Programming using Games @DecisionCamp 2016Learning Rule Based Programming using Games @DecisionCamp 2016
Learning Rule Based Programming using Games @DecisionCamp 2016
 
Big Data, Analytics and Real Time Event Processing
Big Data, Analytics and Real Time Event Processing Big Data, Analytics and Real Time Event Processing
Big Data, Analytics and Real Time Event Processing
 
The Future of Work
The Future of WorkThe Future of Work
The Future of Work
 
Drools Happenings 7.0 - Devnation 2016
Drools Happenings 7.0 - Devnation 2016Drools Happenings 7.0 - Devnation 2016
Drools Happenings 7.0 - Devnation 2016
 
Intelligent Business Processes
Intelligent Business ProcessesIntelligent Business Processes
Intelligent Business Processes
 
Next-Generation BPM - How to create intelligent Business Processes thanks to ...
Next-Generation BPM - How to create intelligent Business Processes thanks to ...Next-Generation BPM - How to create intelligent Business Processes thanks to ...
Next-Generation BPM - How to create intelligent Business Processes thanks to ...
 
Speciale. JND209. Jeppe Stavnsbo Sørensen
Speciale. JND209. Jeppe Stavnsbo SørensenSpeciale. JND209. Jeppe Stavnsbo Sørensen
Speciale. JND209. Jeppe Stavnsbo Sørensen
 
New base special 27 january 2014
New base special  27 january 2014New base special  27 january 2014
New base special 27 january 2014
 
An Empirical Analysis of Attributes Influencing... Shirin - Abdulaziz -Chris ...
An Empirical Analysis of Attributes Influencing... Shirin - Abdulaziz -Chris ...An Empirical Analysis of Attributes Influencing... Shirin - Abdulaziz -Chris ...
An Empirical Analysis of Attributes Influencing... Shirin - Abdulaziz -Chris ...
 
PROJECT PORTFOLIO-Antony Ochieng Odhiambo.
PROJECT PORTFOLIO-Antony Ochieng Odhiambo.PROJECT PORTFOLIO-Antony Ochieng Odhiambo.
PROJECT PORTFOLIO-Antony Ochieng Odhiambo.
 
Mississippi's Navy Connections
Mississippi's Navy ConnectionsMississippi's Navy Connections
Mississippi's Navy Connections
 
Internship report Robin Corral
Internship report Robin CorralInternship report Robin Corral
Internship report Robin Corral
 
C.V Osman 2015
C.V Osman 2015C.V Osman 2015
C.V Osman 2015
 
QNB Group Indonesia Economic Insight 2014
QNB Group Indonesia Economic Insight 2014QNB Group Indonesia Economic Insight 2014
QNB Group Indonesia Economic Insight 2014
 
QNB Group China Economic Insight 2015
QNB Group China Economic Insight 2015QNB Group China Economic Insight 2015
QNB Group China Economic Insight 2015
 
Tài liệu tổng quát về cơ sở dữ liệu
Tài liệu tổng quát về cơ sở dữ liệuTài liệu tổng quát về cơ sở dữ liệu
Tài liệu tổng quát về cơ sở dữ liệu
 
Resume
ResumeResume
Resume
 
Pro mark3rtk reference manual
Pro mark3rtk reference manualPro mark3rtk reference manual
Pro mark3rtk reference manual
 
M.Hussein CV pdf
M.Hussein CV pdfM.Hussein CV pdf
M.Hussein CV pdf
 
Yasir new CV
Yasir new CVYasir new CV
Yasir new CV
 

Similar to rules, events and workflow

Buenos Aires Drools Expert Presentation
Buenos Aires Drools Expert PresentationBuenos Aires Drools Expert Presentation
Buenos Aires Drools Expert PresentationMark Proctor
 
Drools New York City workshop 2011
Drools New York City workshop 2011Drools New York City workshop 2011
Drools New York City workshop 2011Geoffrey De Smet
 
Classic Games Development with Drools
Classic Games Development with DroolsClassic Games Development with Drools
Classic Games Development with DroolsMark Proctor
 
Java Boilerplate Busters
Java Boilerplate BustersJava Boilerplate Busters
Java Boilerplate BustersHamletDRC
 
2 BytesC++ course_2014_c3_ function basics&parameters and overloading
2 BytesC++ course_2014_c3_ function basics&parameters and overloading2 BytesC++ course_2014_c3_ function basics&parameters and overloading
2 BytesC++ course_2014_c3_ function basics&parameters and overloadingkinan keshkeh
 
Programming ppt files (final)
Programming ppt files (final)Programming ppt files (final)
Programming ppt files (final)yap_raiza
 
Whats new in_csharp4
Whats new in_csharp4Whats new in_csharp4
Whats new in_csharp4Abed Bukhari
 
java compilerCompiler1.javajava compilerCompiler1.javaimport.docx
java compilerCompiler1.javajava compilerCompiler1.javaimport.docxjava compilerCompiler1.javajava compilerCompiler1.javaimport.docx
java compilerCompiler1.javajava compilerCompiler1.javaimport.docxpriestmanmable
 
4 operators, expressions &amp; statements
4  operators, expressions &amp; statements4  operators, expressions &amp; statements
4 operators, expressions &amp; statementsMomenMostafa
 
Java Boilerplate Busters
Java Boilerplate BustersJava Boilerplate Busters
Java Boilerplate BustersHamletDRC
 
Simple API for XML
Simple API for XMLSimple API for XML
Simple API for XMLguest2556de
 
e computer notes - Date time functions
e computer notes - Date time functionse computer notes - Date time functions
e computer notes - Date time functionsecomputernotes
 
Python quickstart for programmers: Python Kung Fu
Python quickstart for programmers: Python Kung FuPython quickstart for programmers: Python Kung Fu
Python quickstart for programmers: Python Kung Fuclimatewarrior
 

Similar to rules, events and workflow (20)

JBoss World 2011 - Drools
JBoss World 2011 - DroolsJBoss World 2011 - Drools
JBoss World 2011 - Drools
 
Buenos Aires Drools Expert Presentation
Buenos Aires Drools Expert PresentationBuenos Aires Drools Expert Presentation
Buenos Aires Drools Expert Presentation
 
Drools BeJUG 2010
Drools BeJUG 2010Drools BeJUG 2010
Drools BeJUG 2010
 
Drools New York City workshop 2011
Drools New York City workshop 2011Drools New York City workshop 2011
Drools New York City workshop 2011
 
Classic Games Development with Drools
Classic Games Development with DroolsClassic Games Development with Drools
Classic Games Development with Drools
 
Groovy
GroovyGroovy
Groovy
 
About Go
About GoAbout Go
About Go
 
Java Boilerplate Busters
Java Boilerplate BustersJava Boilerplate Busters
Java Boilerplate Busters
 
Fantom and Tales
Fantom and TalesFantom and Tales
Fantom and Tales
 
2 BytesC++ course_2014_c3_ function basics&parameters and overloading
2 BytesC++ course_2014_c3_ function basics&parameters and overloading2 BytesC++ course_2014_c3_ function basics&parameters and overloading
2 BytesC++ course_2014_c3_ function basics&parameters and overloading
 
Programming ppt files (final)
Programming ppt files (final)Programming ppt files (final)
Programming ppt files (final)
 
Whats new in_csharp4
Whats new in_csharp4Whats new in_csharp4
Whats new in_csharp4
 
java compilerCompiler1.javajava compilerCompiler1.javaimport.docx
java compilerCompiler1.javajava compilerCompiler1.javaimport.docxjava compilerCompiler1.javajava compilerCompiler1.javaimport.docx
java compilerCompiler1.javajava compilerCompiler1.javaimport.docx
 
4 operators, expressions &amp; statements
4  operators, expressions &amp; statements4  operators, expressions &amp; statements
4 operators, expressions &amp; statements
 
Java Boilerplate Busters
Java Boilerplate BustersJava Boilerplate Busters
Java Boilerplate Busters
 
Simple API for XML
Simple API for XMLSimple API for XML
Simple API for XML
 
e computer notes - Date time functions
e computer notes - Date time functionse computer notes - Date time functions
e computer notes - Date time functions
 
Python quickstart for programmers: Python Kung Fu
Python quickstart for programmers: Python Kung FuPython quickstart for programmers: Python Kung Fu
Python quickstart for programmers: Python Kung Fu
 
SPL 8 | Loop Statements in C
SPL 8 | Loop Statements in CSPL 8 | Loop Statements in C
SPL 8 | Loop Statements in C
 
Pdxpugday2010 pg90
Pdxpugday2010 pg90Pdxpugday2010 pg90
Pdxpugday2010 pg90
 

More from Mark Proctor

Rule Modularity and Execution Control
Rule Modularity and Execution ControlRule Modularity and Execution Control
Rule Modularity and Execution ControlMark Proctor
 
Drools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentationDrools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentationMark Proctor
 
Reducing the Cost of the Linear Growth Effect using Adaptive Rules with Unlin...
Reducing the Cost of the Linear Growth Effect using Adaptive Rules with Unlin...Reducing the Cost of the Linear Growth Effect using Adaptive Rules with Unlin...
Reducing the Cost of the Linear Growth Effect using Adaptive Rules with Unlin...Mark Proctor
 
Drools, jBPM and OptaPlanner (NYC and DC Sept 2017 - Keynote Talk Video)
Drools, jBPM and OptaPlanner (NYC and DC Sept 2017 - Keynote Talk Video)Drools, jBPM and OptaPlanner (NYC and DC Sept 2017 - Keynote Talk Video)
Drools, jBPM and OptaPlanner (NYC and DC Sept 2017 - Keynote Talk Video)Mark Proctor
 
RuleML2015 : Hybrid Relational and Graph Reasoning
RuleML2015 : Hybrid Relational and Graph Reasoning RuleML2015 : Hybrid Relational and Graph Reasoning
RuleML2015 : Hybrid Relational and Graph Reasoning Mark Proctor
 
Red Hat Summit 2015 : Drools, jBPM and UberFire Roadmaps
Red Hat Summit 2015 : Drools, jBPM and UberFire RoadmapsRed Hat Summit 2015 : Drools, jBPM and UberFire Roadmaps
Red Hat Summit 2015 : Drools, jBPM and UberFire RoadmapsMark Proctor
 
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyRed Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyMark Proctor
 
Drools 6.0 (Red Hat Summit)
Drools 6.0 (Red Hat Summit)Drools 6.0 (Red Hat Summit)
Drools 6.0 (Red Hat Summit)Mark Proctor
 
Drools and jBPM 6 Overview
Drools and jBPM 6 OverviewDrools and jBPM 6 Overview
Drools and jBPM 6 OverviewMark Proctor
 
Drools and BRMS 6.0 (Dublin Aug 2013)
Drools and BRMS 6.0 (Dublin Aug 2013)Drools and BRMS 6.0 (Dublin Aug 2013)
Drools and BRMS 6.0 (Dublin Aug 2013)Mark Proctor
 
UberFire Quick Intro and Overview (early beta Aug 2013)
UberFire Quick Intro and Overview (early beta Aug 2013)UberFire Quick Intro and Overview (early beta Aug 2013)
UberFire Quick Intro and Overview (early beta Aug 2013)Mark Proctor
 
What's new in Drools 6 - London JBUG 2013
What's new in Drools 6 - London JBUG 2013What's new in Drools 6 - London JBUG 2013
What's new in Drools 6 - London JBUG 2013Mark Proctor
 
Property Reactive RuleML 2013
Property Reactive RuleML 2013Property Reactive RuleML 2013
Property Reactive RuleML 2013Mark Proctor
 
Reactive Transitive Closures with Drools (Backward Chaining)
Reactive Transitive Closures with Drools (Backward Chaining)Reactive Transitive Closures with Drools (Backward Chaining)
Reactive Transitive Closures with Drools (Backward Chaining)Mark Proctor
 
Drools 6.0 (JudCon 2013)
Drools 6.0 (JudCon 2013)Drools 6.0 (JudCon 2013)
Drools 6.0 (JudCon 2013)Mark Proctor
 
Drools 6.0 (CamelOne 2013)
Drools 6.0 (CamelOne 2013)Drools 6.0 (CamelOne 2013)
Drools 6.0 (CamelOne 2013)Mark Proctor
 
UberFire Quick Intro and Overview (early beta Jul 2013)
UberFire Quick Intro and Overview (early beta Jul 2013)UberFire Quick Intro and Overview (early beta Jul 2013)
UberFire Quick Intro and Overview (early beta Jul 2013)Mark Proctor
 
UberFire (JudCon 2013)
UberFire (JudCon 2013)UberFire (JudCon 2013)
UberFire (JudCon 2013)Mark Proctor
 
Drools 6.0 (Red Hat Summit 2013)
Drools 6.0 (Red Hat Summit 2013)Drools 6.0 (Red Hat Summit 2013)
Drools 6.0 (Red Hat Summit 2013)Mark Proctor
 
Games development with the Drools rule engine
Games development with the Drools rule engineGames development with the Drools rule engine
Games development with the Drools rule engineMark Proctor
 

More from Mark Proctor (20)

Rule Modularity and Execution Control
Rule Modularity and Execution ControlRule Modularity and Execution Control
Rule Modularity and Execution Control
 
Drools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentationDrools, jBPM OptaPlanner presentation
Drools, jBPM OptaPlanner presentation
 
Reducing the Cost of the Linear Growth Effect using Adaptive Rules with Unlin...
Reducing the Cost of the Linear Growth Effect using Adaptive Rules with Unlin...Reducing the Cost of the Linear Growth Effect using Adaptive Rules with Unlin...
Reducing the Cost of the Linear Growth Effect using Adaptive Rules with Unlin...
 
Drools, jBPM and OptaPlanner (NYC and DC Sept 2017 - Keynote Talk Video)
Drools, jBPM and OptaPlanner (NYC and DC Sept 2017 - Keynote Talk Video)Drools, jBPM and OptaPlanner (NYC and DC Sept 2017 - Keynote Talk Video)
Drools, jBPM and OptaPlanner (NYC and DC Sept 2017 - Keynote Talk Video)
 
RuleML2015 : Hybrid Relational and Graph Reasoning
RuleML2015 : Hybrid Relational and Graph Reasoning RuleML2015 : Hybrid Relational and Graph Reasoning
RuleML2015 : Hybrid Relational and Graph Reasoning
 
Red Hat Summit 2015 : Drools, jBPM and UberFire Roadmaps
Red Hat Summit 2015 : Drools, jBPM and UberFire RoadmapsRed Hat Summit 2015 : Drools, jBPM and UberFire Roadmaps
Red Hat Summit 2015 : Drools, jBPM and UberFire Roadmaps
 
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client TechnologyRed Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
Red Hat JBoss BRMS and BPMS Workbench and Rich Client Technology
 
Drools 6.0 (Red Hat Summit)
Drools 6.0 (Red Hat Summit)Drools 6.0 (Red Hat Summit)
Drools 6.0 (Red Hat Summit)
 
Drools and jBPM 6 Overview
Drools and jBPM 6 OverviewDrools and jBPM 6 Overview
Drools and jBPM 6 Overview
 
Drools and BRMS 6.0 (Dublin Aug 2013)
Drools and BRMS 6.0 (Dublin Aug 2013)Drools and BRMS 6.0 (Dublin Aug 2013)
Drools and BRMS 6.0 (Dublin Aug 2013)
 
UberFire Quick Intro and Overview (early beta Aug 2013)
UberFire Quick Intro and Overview (early beta Aug 2013)UberFire Quick Intro and Overview (early beta Aug 2013)
UberFire Quick Intro and Overview (early beta Aug 2013)
 
What's new in Drools 6 - London JBUG 2013
What's new in Drools 6 - London JBUG 2013What's new in Drools 6 - London JBUG 2013
What's new in Drools 6 - London JBUG 2013
 
Property Reactive RuleML 2013
Property Reactive RuleML 2013Property Reactive RuleML 2013
Property Reactive RuleML 2013
 
Reactive Transitive Closures with Drools (Backward Chaining)
Reactive Transitive Closures with Drools (Backward Chaining)Reactive Transitive Closures with Drools (Backward Chaining)
Reactive Transitive Closures with Drools (Backward Chaining)
 
Drools 6.0 (JudCon 2013)
Drools 6.0 (JudCon 2013)Drools 6.0 (JudCon 2013)
Drools 6.0 (JudCon 2013)
 
Drools 6.0 (CamelOne 2013)
Drools 6.0 (CamelOne 2013)Drools 6.0 (CamelOne 2013)
Drools 6.0 (CamelOne 2013)
 
UberFire Quick Intro and Overview (early beta Jul 2013)
UberFire Quick Intro and Overview (early beta Jul 2013)UberFire Quick Intro and Overview (early beta Jul 2013)
UberFire Quick Intro and Overview (early beta Jul 2013)
 
UberFire (JudCon 2013)
UberFire (JudCon 2013)UberFire (JudCon 2013)
UberFire (JudCon 2013)
 
Drools 6.0 (Red Hat Summit 2013)
Drools 6.0 (Red Hat Summit 2013)Drools 6.0 (Red Hat Summit 2013)
Drools 6.0 (Red Hat Summit 2013)
 
Games development with the Drools rule engine
Games development with the Drools rule engineGames development with the Drools rule engine
Games development with the Drools rule engine
 

Recently uploaded

The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
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
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetEnjoy Anytime
 

Recently uploaded (20)

The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
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
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
 

rules, events and workflow

  • 1.
  • 2. The system goes online on August 4th, 1997.
  • 3. Human decisions are removed from strategic defense.
  • 4. SkyNet begins to learn at a geometric rate.
  • 5. It becomes self-aware at 2:14am Eastern time, August 29th
  • 6. In a panic, they try to pull the plug.
  • 8.
  • 13. jBPM
  • 15.
  • 16.
  • 17. 5 day event, with 2 days focus on the healthcare industry
  • 18. OSDE, AT&T, SAIC, US Navy Research, Kaiser, Clinica, Intermountain Healthcare, GE Healthcare, VA, Boeing, Nationwide ....
  • 19.
  • 20. Oh And There are Drools Books Too
  • 22. It All Started Here Birth of CDSS Clinical Decision Support Systems 1970s 1980s Dendral Baobab Mycin Guidon Neomycin Teiresias Puff Emycin WM Sacon Centaur Wheeze Gravida Clot Oncocin
  • 23. Because Not Everyone Is As Smart As He Is
  • 24. Business Rules Engines 1980s 2010s 1990s 2000s OPS5 ART Clips Jess Drools 2 JRules Drools 3 Drools 4 Drools 5
  • 25.
  • 26.
  • 27. Basic functional programming feature with “from”
  • 29.
  • 30. More Advanced Rule Flow integration
  • 31.
  • 32.
  • 33.
  • 36. Decision tables and rule templates (Guvnor)
  • 37.
  • 39. Integrated Systems Semantic Ontologies Rules Event Processes Workflows Rules Workflows Event Processes Semantic Ontologies
  • 41. Rules and processes loosely coupled tightly coupled specific generic Decision Services Process Rules SCOPE COUPLING ?
  • 43.
  • 44.
  • 45.
  • 46.
  • 52. rule “increase balance for AccountPeriod Credits” when ap : AccountPeriod() acc : Account( $accountNo : accountNo ) CashFlow( type == CREDIT, accountNo == $accountNo, date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance += $amount; end select * from Account acc, Cashflow cf, AccountPeriod ap where acc.accountNo == cf.accountNo and cf.type == CREDIT cf.date >= ap.start and cf.date <= ap.end trigger : acc.balance += cf.amount Credit Cashflow Rule
  • 53. rule “increase balance for AccountPeriod Credits” when ap : AccountPeriod() acc : Account( $accountNo : accountNo ) CashFlow( type == CREDIT, accountNo == $accountNo, date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance += $amount; end rule “decrease balance for AccountPeriod Debits” when ap : AccountPeriod() acc : Account( $accountNo : accountNo ) CashFlow( type == DEBIT, accountNo == $accountNo, date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance -= $amount; end Rules as a “view”
  • 54. Definitions public class Room { private String name // getter and setter methods here } public class Sprinkler { private Room room ; private boolean on ; // getter and setter methods here } public class Fire { private Room room ; // getter and setter methods here } public class Alarm { }
  • 55. Definitions rule &quot;When there is a fire turn on the sprinkler&quot; when Fire ($room : room) $sprinkler : Sprinkler ( room == $room, on == false ) then modify ( $sprinkler ) { on = true }; println ( &quot;Turn on the sprinkler for room &quot; + $room.name ); end rule &quot;When the fire is gone turn off the sprinkler&quot; when $room : Room ( ) $sprinkler : Sprinkler ( room == $room, on == true ) not Fire ( room == $room ) then modify ( $sprinkler ) { on = false }; println ( &quot;Turn off the sprinkler for room &quot; + $room.name ); end
  • 56. Definitions rule &quot;Raise the alarm when we have one or more fires&quot; when exists Fire () then insert ( new Alarm () ); println ( &quot;Raise the alarm&quot; ); end rule &quot;Cancel the alarm when all the fires have gone&quot; when not Fire () $alarm : Alarm () then retract ( $alarm ); println ( &quot;Cancel the alarm&quot; ); end
  • 57. Definitions rule &quot;Status output when things are ok&quot; when not Alarm () not Sprinkler ( on == true ) then println ( &quot;Everything is ok&quot; ); end
  • 58. Executing String [] names = new String []{ &quot;kitchen&quot; , &quot;bedroom&quot; , &quot;office&quot; , &quot;livingroom&quot; }; Map < String , Room > name2room = new HashMap < String , Room >(); for ( String name : names ){ Room room = new Room ( name ); name2room .put( name , room ); ksession .insert( room ); Sprinkler sprinkler = new Sprinkler ( room ); ksession .insert( sprinkler ); } ksession .fireAllRules() > Everything is ok
  • 59. Executing Fire kitchenFire = new Fire ( name2room.get( &quot;kitchen&quot; ) ); Fire officeFire = new Fire ( name2room.get( &quot;office&quot; ) ); FactHandle kitchenFireHandle = ksession .insert( kitchenFire ); FactHandle officeFireHandle = ksession .insert( officeFire ); ksession .fireAllRules(); > Raise the alarm > Turn on the sprinkler for room kitchen > Turn on the sprinkler for room office
  • 60. Executing ksession .retract( kitchenFireHandle ); ksession .retract( officeFireHandle ); ksession .fireAllRules() > Turn off the sprinkler for room office > Turn off the sprinkler for room kitchen > Cancel the alarm > Everything is ok rule &quot;Status output when things are ok&quot; when not Alarm () not Sprinkler ( on == true ) then println ( &quot;Everything is ok&quot; ); end
  • 61. not Bus( color = “red” ) Conditional Elements exists Bus( color = “red” ) forall ( $bus : Bus( floors == 2 ) Bus( this == $bus, color == “red” ) ) forall ( $bus : Bus( color == “red” ) )
  • 62. Accumulate CE rule &quot;accumulate&quot; when $sum : Number( intValue > 100 ) from accumulate ( Bus( color == &quot;red&quot; , $t : takings ) sum( $t ) ) then print &quot;sum is “ + $sum; end
  • 63. Accumulate CE Patterns and CE's can be chained with ' from ' rule &quot;collect&quot; when $zipCode : ZipCode() $sum : Number( intValue > 100 ) from accumulate ( Bus( color == &quot;red&quot; , $t : takings ) from $hbn.getNamedQuery( “Find Buses” ) .setParameters( [ “zipCode” : $zipCode ] ) .list(), sum( $t ) ) then print &quot;sum is “ + $sum; end
  • 64. Timers rule “name” timer ( cron: 0 0/15 * * * * ) when Alarm( ) then sendEmail( ”Alert Alert Alert!!!” ) Field Name Mandatory? Allowed Values Allowed Special Characters Seconds YES 0-59 , - * / Minutes YES 0-59 , - * / Hours YES 0-23 , - * / Day of month YES 1-31 , - * ? / L W Month YES 1-12 or JAN-DEC , - * / Day of week YES 1-7 or SUN-SAT , - * ? / L # Year NO empty, 1970-2099 , - * / Send alert every quarter of an hour
  • 65. Calendars rule &quot;weekdays are high priority&quot; calendars &quot;weekday&quot; timer (int:0 1h) when Alarm() then send( &quot;priority high - we have an alarm” ); end rule &quot;weekend are low priority&quot; calendars &quot;weekend&quot; timer (int:0 4h) when Alarm() then send( &quot;priority low - we have an alarm” ); end Execute now and after 1 hour duration Execute now and after 4 hour duration
  • 66. Backward Chaining query isContainedIn( String x, String y ) Location ( x, y; ) or ( Location ( z , y; ) and ?isContainedIn ( x, z ; ) ) end rule reactiveLook when Here ( place : place) ?isContainedIn ( place, &quot;keys&quot; ; ) then System.out.println( &quot;We have found your keys&quot; ); end
  • 68.
  • 69.
  • 70.
  • 73.
  • 74. Event Driven Architecture (EDA) “ Event Driven Architecture (EDA) is a software architecture pattern promoting the production , detection , consumption of, and reaction to events. An event can be defined as &quot;a significant change in state&quot;[1]. For example, when a consumer purchases a car, the car's state changes from &quot;for sale&quot; to &quot;sold&quot;. A car dealer's system architecture may treat this state change as an event to be produced, published, detected and consumed by various applications within the architecture.”
  • 75.
  • 76. EDA is **not** SOA 2.0
  • 78.
  • 79. EDA is used to build our sensory system
  • 80. $c : Custumer( type == “VIP ) BuyOrderEvent( customer == $c ) from entry-point “Home Broker Stream” Scalability EntryPoint entryPoint = session. getEntryPoint ( “Home Broker Stream” ); entryPoint.insert( event ) ; So lets allow multiple named entry points for those streams So now we can insert different streams concurrently Patterns can now optional specify their entry-point. When not specified uses the “default” entry-point
  • 81. declare StockTick @role( event ) end declare StockTick @role( event ) @timestamp( timestampAttr ) companySymbol : String stockPrice : double timestampAttr : long end Automatic Life-Cycle Management Just use the declare statement to declare a type as an event and it will be retracted when it is no longer needed The declare statement can also specify an internal model, that external objects/xml/csv map on to. We support Smooks and JAXB
  • 82.
  • 84. after
  • 85. meets
  • 86.
  • 89.
  • 92. finishedby Operators The Full set of Operators are supported BackAckEvent must occur between 1s and 10s ' after' BuyOrderEvent
  • 95. $c : Custumer( type == “VIP ) $oe : BuyOrderEvent( customer == $c ) from entry-point “Home Broker Stream” not BuyAckEvent( relatedEvent == $oe.id, this after[1s, 10s] $oe ) from entry-point “Stock Trader Stream” Operators Existing Drools 'not' Conditional Elements can be used to detect non-occurrence of events BackAckEvent must occur between 1s and 10s ' after' BuyOrderEvent
  • 96. Aggregations $n : Number( intValue > 100 ) from accumulate ( $s : StockTicker( symbol == “RHAT” ) over window:time ( 5s ), average ( $s.price ) ) Over 5 seconds Aggregate ticker price for RHAT over last 5 seconds The pattern 'Number' reasons 'from' the accumulate result
  • 97. Aggregations acc ( $s : StockTicker( symbol == “RHAT” ) over window:time ( 5s ); $min : min ( $s.price ), $min : min ( $s.price ), $avg : avg ( $s.price ); $min > 10 && $max < 20 && $avg > 16 ) Over 5 seconds functions Accumlate over data Guard constraint
  • 98. Aggregations Rule Engines do not deal with aggregations $n : Number( intValue > 100 ) from accumulate ( $s : StockTicker( symbol == “RHAT” ) over window:time ( 5s ), average ( $s.price ) ) Over 5 seconds Aggregate ticker price for RHAT over last 5 seconds The pattern 'Number' reasons 'from' the accumulate result
  • 99.
  • 100. Exclusive use non-stop door-to-door services
  • 101. Blended Surface and Air services to minimize cost and transit time
  • 102.
  • 103. CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
  • 104. CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
  • 105. CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
  • 106. CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
  • 107. CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
  • 108. CEP Applied at FedEx Custom Critical * Presented by Adam Mollemkopf at ORF 2009
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114. TMS and Inference rule &quot;Issue Child Bus Pass&quot; when $p : Person ( age < 16 ) then insert(new ChildBusPass ( $p ) ); end rule &quot;Issue Adult Bus Pass&quot; when $p : Person ( age >= 16 ) then insert(new AdultBusPass ( $p ) ); end Couples the logic What happens when the Child stops being 16?
  • 115.
  • 116. Leaky
  • 117. Brittle integrity - manual maintenance
  • 118.
  • 119. When the rule is no longer true, the object is retracted. when $p : Person ( age < 16 ) then logicalInsert ( new IsChild ( $p ) ) end when $p : Person ( age >= 16 ) then logicalInsert ( new IsAdult ( $p ) ) end de-couples the logic Maintains the truth by automatically retracting
  • 120. TMS and Inference rule &quot;Issue Child Bus Pass&quot; when $p : Person ( ) IsChild ( person == $p ) then logicalInsert ( new ChildBusPass ( $p ) ); end rule &quot;Issue Adult Bus Pass&quot; when $p : Person ( age >= 16 ) IsAdult ( person == $p ) then logicalInsert ( new AdultBusPass ( $p ) ); end The truth maintenance cascades
  • 121. TMS and Inference rule &quot;Issue Child Bus Pass&quot; when $p : Person ( ) not ( ChildBusPass ( person == $p ) ) then requestChildBusPass( $p ); end The truth maintenance cascades
  • 122.
  • 124. Provide semantic abstractions for those encapsulation
  • 125. Integrity robustness – truth maintenance
  • 126. Some decisions are complex What insurance premium should I charge?
  • 127.
  • 132.
  • 133. If less than 35 add 10% surcharge
  • 134. If less than 45 add 5% surcharge
  • 135.
  • 136.
  • 138. Decision Table rule &quot;Pricing bracket_10&quot; when Driver(age >= 18, age <= 24, locationRiskProfile == &quot;LOW&quot;, priorClaims == &quot;1&quot;) policy: Policy(type == &quot;COMPREHENSIVE&quot;) then policy.setBasePrice(450); end
  • 139.
  • 140. Each row compiles into a separate DRL rule
  • 141.
  • 144.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158. Reduces the number of condition columns.
  • 160. If the same actions exist for rules covering all condition states for a given condition they can be combined and the condition state becomes irrelevant.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 169.
  • 172. Truth maintenance and Inference
  • 173.
  • 174. Types
  • 177.
  • 178.
  • 182.
  • 183.
  • 184.
  • 185.
  • 186.
  • 187.
  • 188.
  • 189. Rules 1, 2 and 3, 4 have the same action no matter what the state of “Hunger”. Therefore they can be contracted...
  • 190.
  • 191.
  • 192. Digitised condition states (enumerated fields)
  • 193.
  • 194. Condition and rule negation
  • 197.
  • 198.
  • 199. jBPM
  • 200.
  • 201. targeting developers and business users
  • 202. collaboration, management and monitoring using web-based consoles
  • 203. powerful rules and event integration
  • 204.
  • 208.
  • 214.
  • 215. Drools Expert KnowledegBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBulider(); kbuilder.addResource( ResourceFactory.newClassPathResource( “myrules.drl”, ResourceType.DRL ); If ( kbuilder.hasErrors() ) { log.error( kbuilder.hasErrors().toString() ); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages( kbase.getKnowledgePackages() ); Knowledge API
  • 216. Drools Flow KnowledegBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBulider(); kbuilder.addResource( ResourceFactory.newClassPathResource( “myflow.bpmn2”, ResourceType.BPMN2 ); If ( kbuilder.hasErrors() ) { log.error( kbuilder.hasErrors().toString() ); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages( kbase.getKnowledgePackages() ); Knowledge API
  • 217. Drools Integration Deployment Descriptors <change-set> <add> <resource source='classpath:myapp/data/myflow.bpmn2' type='BPMN2' /> <resource source='http:myapp/data/myrules.drl' type='DRL' /> <resource source='classpath:data/IntegrationExampleTest. xls ' type=&quot;DTABLE&quot;> <decisiontable- conf input-type=&quot;XLS&quot; worksheet-name=&quot;Tables_2&quot; /> </resource> <add> </change-set> KnowledegBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBulider(); kbuilder.addResource( ResourceFactory.newFileResource( “changeset.xml”, ResourceType.ChangeSet ); Knowledge XML
  • 218. <drools:kbase id=&quot;kbase1&quot;> <drools:resource type=&quot;DRL&quot; source=&quot;classpath:.../testSpring.drl&quot; /> </drools:kbase> <drools:ksession id=&quot;ksession1&quot; type=&quot; stateless &quot; kbase =&quot;kbase1&quot; /> <drools:ksession id=&quot;ksession2&quot; type=&quot; stateful &quot; kbase =&quot;kbase1&quot;/> <camelContext id=&quot;camel&quot;> <route> <from uri=&quot;cxfrs://bean://rsServer&quot;/> <marshal ref=&quot;xstream&quot;/> <to uri=”drools:ksession1” /> <unmarshal ref=&quot;xstream&quot;/> </route> </camelContext> Declarative Services Spring XML and Camel
  • 221.  
  • 222.
  • 224.
  • 227. BPMN 2.0 Example < definitions ... > < process id=&quot;com.sample.bpmn.hello&quot; name=&quot;Hello World&quot; > < startEvent id=&quot;_1&quot; name=&quot;StartProcess&quot; /> < sequenceFlow sourceRef=&quot;_1&quot; targetRef=&quot;_2&quot; /> < scriptTask id=&quot;_2&quot; name=&quot;Hello&quot; > < script >System.out.println(&quot;Hello World&quot;);</ script > </ scriptTask > < sequenceFlow sourceRef=&quot;_2&quot; targetRef=&quot;_3&quot; /> < endEvent id=&quot;_3&quot; name=&quot;EndProcess&quot; /> </ process > </ definitions > < definitions ... > < process id=&quot;com.sample.bpmn.hello&quot; name=&quot;Hello World&quot; > < startEvent id=&quot;_1&quot; name=&quot;StartProcess&quot; /> < sequenceFlow sourceRef=&quot;_1&quot; targetRef=&quot;_2&quot; /> < scriptTask id=&quot;_2&quot; name=&quot;Hello&quot; > < script >System.out.println(&quot;Hello World&quot;);</ script > </ scriptTask > < sequenceFlow sourceRef=&quot;_2&quot; targetRef=&quot;_3&quot; /> < endEvent id=&quot;_3&quot; name=&quot;EndProcess&quot; /> </ process > </ definitions >
  • 228.
  • 230.
  • 232.
  • 234.
  • 235.
  • 236.
  • 237.  
  • 239. Self monitoring and adaptive declare ProcessStartedEvent @role( event ) end rule &quot;Number of process instances above threshold&quot; when Number( nbProcesses : intValue > 1000 ) from accumulate( e: ProcessStartedEvent( processInstance.processId == &quot;com.sample.order.OrderProcess&quot; ) over window:size(1h), count(e) ) then System.err.println( &quot;WARNING: Nb of order processes in the last hour > 1000: &quot; + nbProcesses ); end
  • 240. Rules and Process Together
  • 241. Exceptional Control Flow 90% 5% 3% 2%
  • 242. Exceptional Control Flow 90% Rule1 When ... Then ... Rule2 When ... Then ... Rule3 When ... Then ... 5% 3% 2%
  • 244. Interception When StockMark status == crash Then Terminate “Buy Request” Process Start “System Shutdown” Process Stock Buy Order Request Buy Order Acknowledgement Buy Order Request Process Payment Confirmation Terminate
  • 245. Interception and Redirection When Origin != USA and Destination == USA Then Suspend “Flight Booking” Process Start “ESTA” Process OnSuccess Resume “Flight Booking” OnFailure Terminate “Flight Booking” Simple Flight Booking Process Get Destination Get Dates Get Origin Process Payment Confirmation Terminate
  • 246. Drools flow in Oryx
  • 247. Drools flow in Eclipse
  • 248.
  • 249. HAL : Without your space helmet, Dave, you're going to find that rather difficult.
  • 250. Dave Bowman : HAL, I won't argue with you anymore! Open the doors!
  • 251. HAL : Dave, this conversation can serve no purpose anymore. Goodbye. Joshua: Greetings, Professor Falken. Stephen Falken : Hello, Joshua. Joshua: A strange game. The only winning move is not to play. How about a nice game of chess?