SlideShare a Scribd company logo
Mark
     Proctor
    Project Lead




●
  The SkyNet funding bill is passed.
●
  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
Introduction




Drools     Drools     Drools     Drools
Expert      Flow      Fusion     Guvnor


    Business Logic integration Platform



                                          2
Drools Expert
Learn by Example
Classes

                                                       C a s h f lo w
     A cco u n t
                                                  D a te d a te
lo n g a c c o u n t N o
                                                  d o u b le a m o u n t
d o u b le b a la n c e
                                                  in t t y p e
                                                  lo n g a c c o u n t N o




                           A c c o u n t in g P e r io d

                           D a te s ta r t
                           D a te e n d




                                                                             5
Creating Views with
                           Triggers
        date          amount            type       accountNo     AccountingPeriod
 12-Jan-07                      100 CREDIT     1                       start               end
 2-Feb-07                       200 DEBIT      1                     01-Jan-07          31-Mar-07
 18-May-07                       50 CREDIT     1
 9-Mar-07                        75 CREDIT     1                 Account
                                                                    accountNo             balance
                                                                 1                  0
increase balance for AccountPeriod Credits                 decrease balance for AccountPeriod Debits

select * from Account acc,                                     select * from Account acc,
     Cashflow cf, AccountPeriod ap                                  Cashflow cf, AccountPeriod ap
where acc.accountNo == cf.accountNo and                        where acc.accountNo == cf.accountNo and
      cf.type == CREDIT                                              cf.type == DEBIT
      cf.date >= ap.start and                                        cf.date >= ap.start and
      cf.date <= ap.end                                              cf.date <= ap.end

  trigger : acc.balance += cf.amount                            trigger : acc.balance -= cf.amount

 CashFlow                                                      CashFlow
        date           amount          type
                                                                      date          amount            type
 12-Jan-07                      100 CREDIT
                                                               2-Feb-07                       200 DEBIT
 9-Mar-07                        75 CREDIT


 Account
    accountNo              balance
 1                   -25
                                                                                                             6
What is a Rule

                                     salience     <int>
Quotes on Rule names are
                                     agenda-group <string>
optional if the rule name has
                                     no-loop      <boolean>
no spaces.
                                     auto-focus  <boolean>
                                     duration     <long>
                                     ....
   • rule “<name>”
         <attribute> <value>
         when
             <LHS>
         then
             <RHS>         RHS can be any valid java.
                           Or MVEL. Other languages
     end                   could be added.




                                                              7
Imperative vs Declarative
             Methods that must                  specific passing of
             be called directly                 instances


        •         public void helloMark(Person person) {
Rules can never     if ( person.getName().equals( “mark” ) {
be called directly        System.out.println( “Hello Mark” );
                      }               Specific instances
                  }                   cannot be passed.

        •   rule “Hello Mark”                     LHS
                when
                    Person( name == “mark” )
                then
                    System.out.println( “Hello Mark” );
            end
                                     RHS




                                                                      8
What is a Pattern
                            P a tte rn

   O b je c t T y p e               F ie ld C o n s t r a in t

                        F ie ld N a m e                      R e s t r ic t io n


                                                      E v a lu a t o r      V a lu e



S h o w e r( te m p e r a tu re = = “ h o t” )

                                                                                       9
Bringing it Together
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            Pattern
  trigger : acc.balance += cf.amount
 Pattern Binding

                                               field Binding

rule “increase balance for AccountPeriod Credits”
       when                                     Variable Restriction
            ap : AccountPeriod()
            acc : Account( $accountNo : accountNo )
            CashFlow( type == CREDIT,
                              accountNo == $accountNo,
Literal Restriction           date >= ap.start && <= ap.end,
                              $ammount : ammount )
       then
            acc.balance += $amount;             Multri Restriction - Variable
end                                             Restriction


                                                  field Binding
        Consequence (RHS)
                                                                                10
Rules as a “view”
         date       amount           type       accountNo   AccountingPeriod
  12-Jan-07                  100 CREDIT     1                     start               end
  2-Feb-07                   200 DEBIT      1                   01-Jan-07          31-Mar-07
  18-May-07                   50 CREDIT     1
  9-Mar-07                    75 CREDIT     1               Account
                                                               accountNo             balance
                                                            1                  0
rule “increase balance for AccountPeriod    rule “decrease balance for AccountPeriod
       Credits”                                    Debits”
  when                                        when
    ap : AccountPeriod()                        ap : AccountPeriod()
    acc : Account( $accountNo : accountNo )     acc : Account( $accountNo : accountNo )

    CashFlow( type == CREDIT,                     CashFlow( type == DEBIT,
                accountNo == $accountNo,                      accountNo == $accountNo,
                date >= ap.start && <= ap.end,                date >= ap.start && <= ap.end,
                $ammount : ammount )                          $ammount : ammount )
  then                                          then
    acc.balance += $amount;                       acc.balance -= $amount;
end CashFlow                                  end   CashFlow
           date         amount        type                 date         amount         type
    12-Jan-07                  100 CREDIT           2-Feb-07                   200 DEBIT
    9-Mar-07                    75 CREDIT

    Account
       accountNo           balance
    1                -25
                                                                                               11
Patterns in more details

CashFlow( type == “credit” )

$ap : AccountPeriod()
CashFlow( date >= $ap.start )


$ap : AccountPeriod()
CashFlow( date >= $ap.start && <= $ap.end )


$ap : AccountPeriod()
CashFlow( type == “credit”,
           date >= $ap.start && <= $ap.end )


                                               12
More Pattern Examples

Person( $age : age )
Person( age == ( $age + 1 ) )



Person( $age : age )
Person( eval( age == $age + 1 ) )



Person( $age1 : age )
Person( $age2 : age )
eval( $age2 == $age1 + 1 )




                                    13
More Pattern
           Examples
Person(age > 30 && < 40 || hair == “black”)

Person(age > 30 && < 40 || hair in (“black”, “brown”) )


Person( (age > 30 && < 40 && hair == “black”)
         ||
        (age > 50 && hair == “grey”) )


Person(pets contain $rover )


Person(pets[’rover’].type == “dog”)


Person(pets[0].type == “dog”)
                                                          14
What is a Production Rule
                  System
Codification of
the business                        Repository of
knowledge                           inserted Java
                                    instances

                        Inference
                         Engine

     Production         Pattern              Working
      Memory            Matcher              Memory


        (rules)                                (facts)
                        Agenda
                                         insert
  Rules can change                      update
      on the fly                        retract


                                                         15
Production Rule System
                               Approximated by SQL and
                               Views
T a b le s   A cco unt              A c c o u n t in g P e r io d              C a s h f lo w




                                                                                           O b je c t T y p e s   A cco unt              A c c o u n t in g P e r io d              C a s h f lo w
V ie w s                 v ie w 1                                   v ie w 2




V ie w
                                      m a in v ie w                                        R u le s                           r u le 1                                   r u le 2




                                                                                           agenda
                                                                                                                                              agenda




                                                                                                                                                                                                     16
Conflict Resolution with
             Salience
                      Salience

rule “Print blance for AccountPeriod”
      salience -50
   when
      ap : AccountPeriod()
      acc : Account( )
   then
      System.out.println( acc.accountNo + “ : “ acc.balance );
end




Agenda
     1            increase balance
     2            decrease balance               arbitrary
     3            increase balance
     4            print balance




                                                                 17
RuleFlow
           rule “increase balance for AccountPeriod Credits”
                ruleflow-group “calculation”
              when
                 ap : AccountPeriod()
                 acc : Account( $accountNo : accountNo )
                 CashFlow( type == CREDIT,
                            accountNo == $accountNo,
                            date >= ap.start && <= ap.end,
                            $ammount : ammount )
              then
                 acc.balance += $amount;
           end

                             ruleflow-group

           rule “Print blance for AccountPeriod”
                ruleflow-group “report”
              when
                 ap : AccountPeriod()
                 acc : Account( )
              then
                 System.out.println( acc.accountNo + “ : “ acc.balance );
           end




                                                                            18
Two Phase System
                                       Determine
                                     possible rules to
                                           fire
                                                               Agenda Evaluation




Working Memory Action




                                                              Rule
      insert                modify
                                                             Found             Select
                                                 Fire Rule
                                                                             Rule to Fire


                  retract




                                                                               No Rule
                                                                                Found




                                                                                   exit



                                                                                            19
Conditional
 Elements
From CE for Expressions

not Bus( color = “red” )


exists Bus( color = “red” )


forall ( $bus : Bus( color == “red” ) )


forall ( $bus : Bus( floors == 2 )
               Bus( this == $bus, color == “red” ) )




                                                       21
From CE
for Expressions
From CE for Expressions

Using 'from' to reason over the nested list


rule “Find all the pets for a given owner”
when
   $owner : Person( name == “mark” )
             Pet( name == “rover” ) from $owner.pets




                                                       23
From CE for Expressions

'from' can work on any expression, not just a nested
field on a bound variable.


rule “Find People for given zip code”
when
   $zipCode : ZipCode()
   Person( ) from $hbn.getNamedQuery(“Find People”)
                        .setParameters( [ “zipCode” : $zipCode ] )
                        .list()

      Hibernate session




                                                                     24
Collect CE
Collect CE
rule "accumulate"
when
   $list : List( intValue > 100 )
             from collect( Bus( color == "red" ) )
then
   print "red buses “ + $list;
end




                                                     26
Accumulate CE
Accumulate CE
rule "accumulate"
when
   $sum : Number( intValue > 100 )
           from accumulate( Bus( color == "red", $t :
takings )
                            init( sum = 0 ),
                            action( sum += $t ),
                            result( sum ) )
then
   print "sum is “ + $sum;
end




                                                        28
Accumulate CE
rule "accumulate"
when
   $sum : Number( intValue > 100 )
           from accumulate( Bus( color == "red", $t :
takings )                                sum( $t ) )
then
   print "sum is “ + $sum;
end




                                                        29
Accumulate CE
Patterns and CE's can be chained with 'from'

rule "collect"
when
   $zipCode : ZipCode()
   $sum : Number( intValue > 100 )
          from accumulate( Bus( color == "red", $t : takings )
                             from $hbn.getNamedQuery(“Find
Buses”)

.setParameters( [ “zipCode” :
                          $zipCode ] )
                                         .list(),
                           sum( $t ) )
then                                                         30
Timers
Calendars
Timers
 rule “name”
    timer 1m30s
 when
    $l : Light( status == “on” )
 then
   SendEmail( “turn the light off” )



rule “name”
   timer (int: 0 1m30)
when
   $l : Light( status == “on” )
then
  SendEmail( “turn the light off” )


                                       32
Timers
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               ,-*?/LW
Month        YES        1-12 or JAN-DEC     ,-*/
Day of week YES         1-7 or SUN-SAT          ,-*?/L#
Year         NO         empty, 1970-2099    ,-*/



rule “name”
  timer ( cron: 0 0/15 * * * * )
when
   $l : Light( status == “on” )
then
  sendEmail( “turn the light off” )




                                                                        33
Calendars
rule "weekdays are high priority"
  calendars "weekday"
  timer (int:0 1h)
when
   Alarm()
then
   send( "priority high - we have an alarm” );
end

rule "weekend are low priority"
  calendars "weekend"
  timer (int:0 4h)
when
   Alarm()
then
   send( "priority low - we have an alarm” );
end

                                                 34
Truth Maintenance
Inference
TMS and Inference
rule "Issue Child Bus Pass"             Couples the logic
when
 $p : Person( age < 16 )
then
 insert(new ChildBusPass( $p ) );
end
rule "Issue Adult Bus Pass"
                                    What happens when the Child
when                                      stops being 16?
 $p : Person( age >= 16 )
then
 insert(new AdultBusPass( $p ) );
end


                                                                  36
TMS and Inference
   Bad
    ●   Monolithic
    ●   Leaky
    ●   Brittle integrity - manual maintenance




                                                 37
TMS and Inference
 A rule “logically” inserts an object
 When the rule is no longer true, the object is
  retracted.
when                                  de-couples the logic

 $p : Person( age < 16 )
then
  logicalInsert( new IsChild( $p ) )
end
                                 Maintains the truth by
when                             automatically retracting
 $p : Person( age >= 16 )
then
  logicalInsert( new IsAdult( $p ) )
end

                                                             38
TMS and Inference
rule "Issue Child Bus Pass"
when
 $p : Person( )
       IsChild( person =$p )
then
 logicalInsert(new ChildBusPass( $p ) );
end
rule "Issue Adult Bus Pass"   The truth maintenance cascades
when
 $p : Person( age >= 16 )
       IsAdult( person =$p )
then
 logicalInsert(new AdultBusPass( $p ) );
end
                                                               39
TMS and Inference
rule "Issue Child Bus Pass"
when
 $p : Person( )
       not( ChildBusPass( person == $p ) )
then
   requestChildBusPass( $p );
                                  The truth maintenance cascades
End




                                                                   40
TMS and Inference
   Good
    ●   De-couple knowledge responsibilities
    ●   Encapsulate knowledge
    ●   Provide semantic abstractions for those encapsulation
    ●   Integrity robustness – truth maintenance




                                                                41
Tooling
Guided Editor




                43
Interactive Debugging




                        44
Decision Tables




                  45
DSLs




       46
DSLs




       47
Rule Flow




            48
Drools Fusion
Scalability

Rule engines do not scale for CEP. They have a single point of insertion
and are single threaded, CEP has concurrent streams of events.



       session.insert( event ) ;   $c : Custumer( type == “VIP” )
                                   BuyOrderEvent( customer == $c )

          Single Point of
              entry
                                         Patterns, evaluate
                                       facts sequentially in a
                                           single thread.




                                                                       50
Scalability
                                        So lets allow multiple
                                       named entry points for
                                           those streams


EntryPoint entryPoint = session.getEntryPoint( “Home Broker Stream” );
entryPoint.insert( event ) ;


   So now we can insert                    When not specified uses
     different streams                     the “default” entry-point
        concurrently

   $c : Custumer( type == “VIP )
   BuyOrderEvent( customer == $c ) from entry-point “Home Broker Stream”




                                        Patterns can now optional
                                        specify their entry-point.


                                                                           51
Automatic Life-Cycle
                Management
All Fact life-cycles must be managed by the user, so
retractions are manual.

 declare StockTick              Just use the declare statement to
  @role( event )                declare a type as an event and it
 end                           will be retracted when it is no longer
                                              needed


declare StockTick
 @role( event )
 @timestamp( timestampAttr )

 companySymbol : String
 stockPrice : double                 The declare statement can also
 timestampAttr : long                 specify an internal model, that
end                                external objects/xml/csv map on to.
                                     We support Smooks and JAXB



                                                                         52
Operators
Rule engines do not have rich enough set of temporal comparison
operators                                     BackAckEvent must occur
                                                                between 1s and 10s 'after'
  $c : Custumer( type == “VIP )                                      BuyOrderEvent
  $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”



 The Full set of Operators are supported
          ●   coincides         ●   overlaps             ●   starts
          ●   before            ●   overlappedby         ●   startedby
          ●   after             ●   during               ●   finishes
          ●   meets             ●   includes             ●   finishedby
          ●   metby



                                                                                             53
Operators




            54
Operators

$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”



             Existing Drools 'not'
          Conditional Elements can
           be used to detect non-
            occurrence of events




                                                                           55
Sliding time windows
Rule engines react to events happening now, there is no
temporal understanding of changes over time.

 StockTicker( symbol == “RHAT” ) over window:time( 5s )                     5s
 StockTicker( symbol == “RHAT” ) over window:length( 1000 )
                                                                         1000 tickers




  That isn't much without the ability to deal with aggregations, rules
  engines suck.




                                                                                        56
Aggregations
Rule Engines do not deal with aggregations
                                                                    Over 5 seconds

$n : Number( intValue > 100 )
       from accumulate( $s : StockTicker( symbol == “RHAT” ) over window:time( 5s ),
                         average( $s.price ) )


                                Aggregate ticker price
 The pattern 'Number'            for RHAT over last 5
  reasons 'from' the                   seconds
  accumulate result




$n : accumulate( $s : StockTicker( symbol == “RHAT” ) over window:time( 5s ),
                 average( $s.price ) > 100 )


  We can use some sugar to reduce
             verbosity
                                                                                       57
Drools Flow
Drools Flow

 A workflow engine combining processes and
 Integration       rules
    ●   From loose coupling (decision services)
    ●   To advance integration (process rules)
   Unification
    ●   Rules and processes are different types of business
        knowledge assets
    ●   Infrastructure
         ●   Timers/Schedulers
         ●   Testing
         ●   Communication/Services
    ●   Tooling
         ●   IDE
         ●   repository, management
         ●   Auditing
         ●                                                    59
Truth Maintenance
Inference
Rules and
                        processes
generic




                              ?
                                           Decision
                                           Services
SCOPE




                Process
specific




                 Rules




           tightly coupled    COUPLING   loosely coupled
                                                           61
Business Logic Lifecycle




                           62
Example




          63
RuleFlowGroup
Workflow can control my rules?




                                 64
RuleFlowGroup



    Rule Flow Group




                      65
RuleFlowGroup




                66
Constraints




              Java code constraint




                                     67
Constraints
Rules can control my workflow?


                         LHS “when”
                        Rule Constraint




                                          68
Example


   Business decisions are externalized using a decision
    service




                      rule
               rule Decision1
                 when Decision1
                 rule Decision1
                   // conditions
                   when when
                 then // conditions
                           //
                   // actions
                   then
               end    conditions
                      // actions
                 end     then
                         //
                     actions
                     end                                   69
Example


   What if there is a lot of business logic like this?




                    rule Decision1       rule Decision1
           rule       when Decision1
                      rule                 when Decision1
                                           rule                  rule             rule
    rule Decision1      // conditions        // conditionsrule Decision1    rule Decision1
                        when Decision1
      when Decision1 rule  rule              when Decision1
                                                rule
      rule Decision1 then // conditions rule rule conditions Decision1 when Decision1
                    rule Decision1            Decision1
                                           then //          when Decision1
                                                            rule              rule Decision1
        // conditionswhen when
                      rule Decision1
                                                when          // conditions     // conditions
        when when       then // conditionswhen Decision1 when when
                            Decision1
                        // actions         rule actions
                                             // Decision1
                                             then // conditions                 when when
      then // conditions// conditions end // conditionsthen // conditionsthen // conditions
                // end when when
        // actions
        then
                           // actions
                           then              when when
                                                // actions
                                                then
                      then // conditions then // conditions// actions
                                                              then
                                                                      //                //
                                                                                // actions
                                                                                then
    end               end
           conditions// actions  //
                              // actions   end        //
                                                   // actions    conditions       conditions
           // actions   then                 // actions end
                                             then                // actions end   // actions
      end     then end end actions end end actions end
                           conditions
                           //                   conditions
                                                //                  then      end    then
                // end         then        end      then              //                //
          actions             //                  //         actions           actions
          end             actions             actions        end               end
                          end                 end

                                                                                                70
Flow of Control




       Process
       Engine




       Rules
       Engine



                  71
Inversion of Control




              Process
              Engine

     Agenda




              Rules
              Engine




                        72
Self monitoring and
              adaptive
declare ProcessStartedEvent
  @role( event )
end


rule "Number of process instances above threshold" when
  Number( nbProcesses : intValue > 1000 )
       from accumulate(
            e: ProcessStartedEvent(
  processInstance.processId ==
"com.sample.order.OrderProcess" )
                   over window:size(1h),
             count(e) )
then
  System.err.println( "WARNING: Nb of order processes in
the last                      hour > 1000: " +
nbProcesses );
                                                           73
Domain Specific Processes




                            74
Domain Specific Processes




                            75
Integrated debug and audit




                             76
Unified API
Definitions
    Runtime
          Language
Definitions
jBPM
File file = new File (“.....”); // file to XML process definition

ProcessDefinition processDefinition =
   ProcessDefinition.parseXmlString( IoUtils.FileToString( file ) );

ProcessInstance processInstance =
   new ProcessInstance(processDefinition);
Jess
Rete engine = new Rete();

FileReader file = new FileReader("myfile.clp");

Jesp parser = new Jesp(file, engine);

parser.parse(false);


Esper

EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider();

EPStatement countStmt = admin.createEPL( "...." );

countStmt.start();
                                                                               78
Definitions
Drools Flow

KnowledegBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBulider();

kbuilder.addResource(
   ResourceFactory.newClassPathResource( “myflow.drf”,
   ResourceType.DRF );

If ( kbuilder.hasErrors() ) {
    log.error( kbuilder.hasErrors().toString() );
}

KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbase.getKnowledgePackages() );




                                                                             79
Definitions

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() );




                                                                             80
Drools Integration Deployment Descriptors

<change-set>
   <add>
     <resource source='classpath:myapp/data/myflow.drf' type='DRF' />
     <resource source='http:myapp/data/myrules.drl' type='DRL' />
     <resource source='classpath:data/IntegrationExampleTest.xls'
                 type="DTABLE">
          <decisiontable-conf input-type="XLS"
                                worksheet-name="Tables_2" />
     </resource>
   <add>
</change-set>


KnowledegBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBulider();
kbuilder.addResource(
   ResourceFactory.newFileResource( “changeset.xml”,
                                     ResourceType.ChangeSet );




                                                                             81
Unified Event Model
Mixins
Interface Markers
Stateful Knowledge
Session




                     85
Knowledge Runtime




                    86
Coming in 5.1
   BPMN2 (80% of Workflow)
   Integration
    ●   OSGi ready
    ●   Spring
    ●   Camel
   Seamless Remoting
   Simulation/Testing
   New Rete Algorithm “true modify”




                                       87
Spring + camel




from("direct:test-with-session").
to("drools:sm/ksession1?dataFormat=drools-xstream");


                                                       88
Questions?
                        • Dave Bowman: All right, HAL; I'll
                          go in through the emergency
                          airlock.
                        • HAL: Without your space helmet,
                          Dave, you're going to find that
                          rather difficult.
                        • Dave Bowman: HAL, I won't argue
                          with you anymore! Open the
                          doors!
                        • 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?


                                                              89

More Related Content

What's hot

Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 SeoulElastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
SeungYong Oh
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
Abdoulaye Dieng
 
Spring Framework - Validation
Spring Framework - ValidationSpring Framework - Validation
Spring Framework - Validation
Dzmitry Naskou
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
Abdoulaye Dieng
 
MongoDB Aggregation
MongoDB Aggregation MongoDB Aggregation
MongoDB Aggregation
Amit Ghosh
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나
종민 김
 
cours javascript.pptx
cours javascript.pptxcours javascript.pptx
cours javascript.pptx
YaminaGh1
 
Rules Engine - java(Drools) & ruby(ruleby)
Rules Engine - java(Drools) & ruby(ruleby)Rules Engine - java(Drools) & ruby(ruleby)
Rules Engine - java(Drools) & ruby(ruleby)
martincabrera
 
Drools et les moteurs de règles
Drools et les moteurs de règlesDrools et les moteurs de règles
Drools et les moteurs de règles
Publicis Sapient Engineering
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
Abdoulaye Dieng
 
jBPM
jBPMjBPM
Drools Expert and Fusion Intro : London 2012
Drools Expert and Fusion Intro  : London 2012Drools Expert and Fusion Intro  : London 2012
Drools Expert and Fusion Intro : London 2012
Mark Proctor
 
Introducing Drools
Introducing DroolsIntroducing Drools
Introducing Drools
Mario Fusco
 
Cloud Native Days Korea 2019 - kakao's k8s_as_a_service
Cloud Native Days Korea 2019 - kakao's k8s_as_a_serviceCloud Native Days Korea 2019 - kakao's k8s_as_a_service
Cloud Native Days Korea 2019 - kakao's k8s_as_a_service
Dennis Hong
 
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
KWON JUNHYEOK
 
RxJS + Redux + React = Amazing
RxJS + Redux + React = AmazingRxJS + Redux + React = Amazing
RxJS + Redux + React = Amazing
Jay Phelps
 
PostgreSQL and JDBC: striving for high performance
PostgreSQL and JDBC: striving for high performancePostgreSQL and JDBC: striving for high performance
PostgreSQL and JDBC: striving for high performance
Vladimir Sitnikov
 
Ngrx slides
Ngrx slidesNgrx slides
Ngrx slides
Christoffer Noring
 
React
React React
React
중운 박
 
Ngrx: Redux in angular
Ngrx: Redux in angularNgrx: Redux in angular
Ngrx: Redux in angular
Saadnoor Salehin
 

What's hot (20)

Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 SeoulElastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
Elastic Stack 을 이용한 게임 서비스 통합 로깅 플랫폼 - elastic{on} 2019 Seoul
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Spring Framework - Validation
Spring Framework - ValidationSpring Framework - Validation
Spring Framework - Validation
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
 
MongoDB Aggregation
MongoDB Aggregation MongoDB Aggregation
MongoDB Aggregation
 
엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나엘라스틱서치, 로그스태시, 키바나
엘라스틱서치, 로그스태시, 키바나
 
cours javascript.pptx
cours javascript.pptxcours javascript.pptx
cours javascript.pptx
 
Rules Engine - java(Drools) & ruby(ruleby)
Rules Engine - java(Drools) & ruby(ruleby)Rules Engine - java(Drools) & ruby(ruleby)
Rules Engine - java(Drools) & ruby(ruleby)
 
Drools et les moteurs de règles
Drools et les moteurs de règlesDrools et les moteurs de règles
Drools et les moteurs de règles
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
 
jBPM
jBPMjBPM
jBPM
 
Drools Expert and Fusion Intro : London 2012
Drools Expert and Fusion Intro  : London 2012Drools Expert and Fusion Intro  : London 2012
Drools Expert and Fusion Intro : London 2012
 
Introducing Drools
Introducing DroolsIntroducing Drools
Introducing Drools
 
Cloud Native Days Korea 2019 - kakao's k8s_as_a_service
Cloud Native Days Korea 2019 - kakao's k8s_as_a_serviceCloud Native Days Korea 2019 - kakao's k8s_as_a_service
Cloud Native Days Korea 2019 - kakao's k8s_as_a_service
 
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
[Devil's camp 2019] 혹시 Elixir 아십니까? 정.말.갓.언.어.입.니.다
 
RxJS + Redux + React = Amazing
RxJS + Redux + React = AmazingRxJS + Redux + React = Amazing
RxJS + Redux + React = Amazing
 
PostgreSQL and JDBC: striving for high performance
PostgreSQL and JDBC: striving for high performancePostgreSQL and JDBC: striving for high performance
PostgreSQL and JDBC: striving for high performance
 
Ngrx slides
Ngrx slidesNgrx slides
Ngrx slides
 
React
React React
React
 
Ngrx: Redux in angular
Ngrx: Redux in angularNgrx: Redux in angular
Ngrx: Redux in angular
 

Viewers also liked

Advanced IT Analytics: A Look at Real Adoptions in the Real World
Advanced IT Analytics: A Look at Real Adoptions in the Real WorldAdvanced IT Analytics: A Look at Real Adoptions in the Real World
Advanced IT Analytics: A Look at Real Adoptions in the Real World
Enterprise Management Associates
 
JBoss World 2011 - Drools
JBoss World 2011 - DroolsJBoss World 2011 - Drools
JBoss World 2011 - Drools
Geoffrey De Smet
 
Developing applications with rules, workflow and event processing (it@cork 2010)
Developing applications with rules, workflow and event processing (it@cork 2010)Developing applications with rules, workflow and event processing (it@cork 2010)
Developing applications with rules, workflow and event processing (it@cork 2010)
Geoffrey De Smet
 
jBPM5 (Argentina workshop)
jBPM5 (Argentina workshop)jBPM5 (Argentina workshop)
jBPM5 (Argentina workshop)
Kris Verlaenen
 
JUDCon India 2012 Drools Fusion
JUDCon  India 2012 Drools FusionJUDCon  India 2012 Drools Fusion
JUDCon India 2012 Drools Fusion
Mark 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
 

Viewers also liked (6)

Advanced IT Analytics: A Look at Real Adoptions in the Real World
Advanced IT Analytics: A Look at Real Adoptions in the Real WorldAdvanced IT Analytics: A Look at Real Adoptions in the Real World
Advanced IT Analytics: A Look at Real Adoptions in the Real World
 
JBoss World 2011 - Drools
JBoss World 2011 - DroolsJBoss World 2011 - Drools
JBoss World 2011 - Drools
 
Developing applications with rules, workflow and event processing (it@cork 2010)
Developing applications with rules, workflow and event processing (it@cork 2010)Developing applications with rules, workflow and event processing (it@cork 2010)
Developing applications with rules, workflow and event processing (it@cork 2010)
 
jBPM5 (Argentina workshop)
jBPM5 (Argentina workshop)jBPM5 (Argentina workshop)
jBPM5 (Argentina workshop)
 
JUDCon India 2012 Drools Fusion
JUDCon  India 2012 Drools FusionJUDCon  India 2012 Drools Fusion
JUDCon India 2012 Drools Fusion
 
Drools 6.0 (Red Hat Summit)
Drools 6.0 (Red Hat Summit)Drools 6.0 (Red Hat Summit)
Drools 6.0 (Red Hat Summit)
 

Similar to Lille2010markp

JUDCon India 2012 Drools Expert
JUDCon  India 2012 Drools ExpertJUDCon  India 2012 Drools Expert
JUDCon India 2012 Drools Expert
Mark Proctor
 
Improving application design with a rich domain model (springone 2007)
Improving application design with a rich domain model (springone 2007)Improving application design with a rich domain model (springone 2007)
Improving application design with a rich domain model (springone 2007)
Chris Richardson
 
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
Mark Proctor
 
Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)
Geoffrey De Smet
 
Accounting Mechanics Processing Accounting Information
Accounting Mechanics Processing Accounting InformationAccounting Mechanics Processing Accounting Information
Accounting Mechanics Processing Accounting Information
We Learn - A Continuous Learning Forum from Welingkar's Distance Learning Program.
 
Proses Pencatatan Transaksi
Proses Pencatatan TransaksiProses Pencatatan Transaksi
Proses Pencatatan Transaksi
Fair Nurfachrizi
 
Chapter 4
Chapter 4Chapter 4
Chapter 4
dhyanimehta87
 
Aslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec BddAslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec Bdd
deimos
 
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
 
The Actuary and FAS 163
The Actuary and FAS 163The Actuary and FAS 163
The Actuary and FAS 163
kylemrotek
 
SQL Server 2008 Portfolio
SQL Server 2008 PortfolioSQL Server 2008 Portfolio
SQL Server 2008 Portfolio
anthonyfeliciano
 
Dr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyceDr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyce
Michał Kurzeja
 
Actor Model
Actor ModelActor Model
Accounting_Accruals_and_Deferrals_ppt.pdf
Accounting_Accruals_and_Deferrals_ppt.pdfAccounting_Accruals_and_Deferrals_ppt.pdf
Accounting_Accruals_and_Deferrals_ppt.pdf
MaiSaleh20
 
Drools 6.0 (CamelOne 2013)
Drools 6.0 (CamelOne 2013)Drools 6.0 (CamelOne 2013)
Drools 6.0 (CamelOne 2013)
Mark Proctor
 
Lecture5 mba
Lecture5 mbaLecture5 mba
Lecture5 mba
gldazo
 
Serverless Functions and Vue.js
Serverless Functions and Vue.jsServerless Functions and Vue.js
Serverless Functions and Vue.js
Sarah Drasner
 
Tsi Green Flag Notebook Web Presentation Version 29 Apr09
Tsi Green Flag Notebook Web Presentation Version 29 Apr09Tsi Green Flag Notebook Web Presentation Version 29 Apr09
Tsi Green Flag Notebook Web Presentation Version 29 Apr09
Peter_Glassman
 
Financial ratio
Financial ratioFinancial ratio
Financial ratio
Babasab Patil
 
Recs Presentation
Recs PresentationRecs Presentation
Recs Presentation
Sylverflash
 

Similar to Lille2010markp (20)

JUDCon India 2012 Drools Expert
JUDCon  India 2012 Drools ExpertJUDCon  India 2012 Drools Expert
JUDCon India 2012 Drools Expert
 
Improving application design with a rich domain model (springone 2007)
Improving application design with a rich domain model (springone 2007)Improving application design with a rich domain model (springone 2007)
Improving application design with a rich domain model (springone 2007)
 
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
 
Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)
 
Accounting Mechanics Processing Accounting Information
Accounting Mechanics Processing Accounting InformationAccounting Mechanics Processing Accounting Information
Accounting Mechanics Processing Accounting Information
 
Proses Pencatatan Transaksi
Proses Pencatatan TransaksiProses Pencatatan Transaksi
Proses Pencatatan Transaksi
 
Chapter 4
Chapter 4Chapter 4
Chapter 4
 
Aslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec BddAslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec Bdd
 
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)
 
The Actuary and FAS 163
The Actuary and FAS 163The Actuary and FAS 163
The Actuary and FAS 163
 
SQL Server 2008 Portfolio
SQL Server 2008 PortfolioSQL Server 2008 Portfolio
SQL Server 2008 Portfolio
 
Dr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyceDr Strangler and Mr Hype - Strangler pattern w praktyce
Dr Strangler and Mr Hype - Strangler pattern w praktyce
 
Actor Model
Actor ModelActor Model
Actor Model
 
Accounting_Accruals_and_Deferrals_ppt.pdf
Accounting_Accruals_and_Deferrals_ppt.pdfAccounting_Accruals_and_Deferrals_ppt.pdf
Accounting_Accruals_and_Deferrals_ppt.pdf
 
Drools 6.0 (CamelOne 2013)
Drools 6.0 (CamelOne 2013)Drools 6.0 (CamelOne 2013)
Drools 6.0 (CamelOne 2013)
 
Lecture5 mba
Lecture5 mbaLecture5 mba
Lecture5 mba
 
Serverless Functions and Vue.js
Serverless Functions and Vue.jsServerless Functions and Vue.js
Serverless Functions and Vue.js
 
Tsi Green Flag Notebook Web Presentation Version 29 Apr09
Tsi Green Flag Notebook Web Presentation Version 29 Apr09Tsi Green Flag Notebook Web Presentation Version 29 Apr09
Tsi Green Flag Notebook Web Presentation Version 29 Apr09
 
Financial ratio
Financial ratioFinancial ratio
Financial ratio
 
Recs Presentation
Recs PresentationRecs Presentation
Recs Presentation
 

More from Ch'ti JUG

Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambda
Ch'ti JUG
 
Spring 3.1
Spring 3.1Spring 3.1
Spring 3.1
Ch'ti JUG
 
Bonita Open Solution
Bonita Open SolutionBonita Open Solution
Bonita Open Solution
Ch'ti JUG
 
Adobe flash platform java
Adobe flash platform javaAdobe flash platform java
Adobe flash platform java
Ch'ti JUG
 
MC3SI Chti Jug Soiree Agilite
MC3SI Chti Jug Soiree AgiliteMC3SI Chti Jug Soiree Agilite
MC3SI Chti Jug Soiree AgiliteCh'ti JUG
 
Chti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projets
Chti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projetsChti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projets
Chti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projets
Ch'ti JUG
 
GlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUGGlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUGCh'ti JUG
 
Drools Planner Chtijug 2010
Drools Planner Chtijug 2010Drools Planner Chtijug 2010
Drools Planner Chtijug 2010
Ch'ti JUG
 
HTML5 ADEO
HTML5 ADEOHTML5 ADEO
HTML5 ADEO
Ch'ti JUG
 
Terracotta Ch'ti Jug
Terracotta Ch'ti JugTerracotta Ch'ti Jug
Terracotta Ch'ti Jug
Ch'ti JUG
 

More from Ch'ti JUG (10)

Java 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambdaJava 8 : Un ch'ti peu de lambda
Java 8 : Un ch'ti peu de lambda
 
Spring 3.1
Spring 3.1Spring 3.1
Spring 3.1
 
Bonita Open Solution
Bonita Open SolutionBonita Open Solution
Bonita Open Solution
 
Adobe flash platform java
Adobe flash platform javaAdobe flash platform java
Adobe flash platform java
 
MC3SI Chti Jug Soiree Agilite
MC3SI Chti Jug Soiree AgiliteMC3SI Chti Jug Soiree Agilite
MC3SI Chti Jug Soiree Agilite
 
Chti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projets
Chti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projetsChti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projets
Chti Jug Octo 16032010 Réduisons le ticket d’entrée de nos projets
 
GlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUGGlassFish ESB Ch'ti JUG
GlassFish ESB Ch'ti JUG
 
Drools Planner Chtijug 2010
Drools Planner Chtijug 2010Drools Planner Chtijug 2010
Drools Planner Chtijug 2010
 
HTML5 ADEO
HTML5 ADEOHTML5 ADEO
HTML5 ADEO
 
Terracotta Ch'ti Jug
Terracotta Ch'ti JugTerracotta Ch'ti Jug
Terracotta Ch'ti Jug
 

Recently uploaded

GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their MainframeDigital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Precisely
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
ScyllaDB
 
Trusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process MiningTrusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process Mining
LucaBarbaro3
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
Alex Pruden
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
Miro Wengner
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
Ivanti
 
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Jeffrey Haguewood
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
alexjohnson7307
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
Antonios Katsarakis
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
dbms calicut university B. sc Cs 4th sem.pdf
dbms  calicut university B. sc Cs 4th sem.pdfdbms  calicut university B. sc Cs 4th sem.pdf
dbms calicut university B. sc Cs 4th sem.pdf
Shinana2
 

Recently uploaded (20)

GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their MainframeDigital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
Digital Banking in the Cloud: How Citizens Bank Unlocked Their Mainframe
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
 
Trusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process MiningTrusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process Mining
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
 
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
dbms calicut university B. sc Cs 4th sem.pdf
dbms  calicut university B. sc Cs 4th sem.pdfdbms  calicut university B. sc Cs 4th sem.pdf
dbms calicut university B. sc Cs 4th sem.pdf
 

Lille2010markp

  • 1. Mark Proctor Project Lead ● The SkyNet funding bill is passed. ● 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
  • 2. Introduction Drools Drools Drools Drools Expert Flow Fusion Guvnor Business Logic integration Platform 2
  • 5. Classes C a s h f lo w A cco u n t D a te d a te lo n g a c c o u n t N o d o u b le a m o u n t d o u b le b a la n c e in t t y p e lo n g a c c o u n t N o A c c o u n t in g P e r io d D a te s ta r t D a te e n d 5
  • 6. Creating Views with Triggers date amount type accountNo AccountingPeriod 12-Jan-07 100 CREDIT 1 start end 2-Feb-07 200 DEBIT 1 01-Jan-07 31-Mar-07 18-May-07 50 CREDIT 1 9-Mar-07 75 CREDIT 1 Account accountNo balance 1 0 increase balance for AccountPeriod Credits decrease balance for AccountPeriod Debits select * from Account acc, select * from Account acc, Cashflow cf, AccountPeriod ap Cashflow cf, AccountPeriod ap where acc.accountNo == cf.accountNo and where acc.accountNo == cf.accountNo and cf.type == CREDIT cf.type == DEBIT cf.date >= ap.start and cf.date >= ap.start and cf.date <= ap.end cf.date <= ap.end trigger : acc.balance += cf.amount trigger : acc.balance -= cf.amount CashFlow CashFlow date amount type date amount type 12-Jan-07 100 CREDIT 2-Feb-07 200 DEBIT 9-Mar-07 75 CREDIT Account accountNo balance 1 -25 6
  • 7. What is a Rule salience <int> Quotes on Rule names are agenda-group <string> optional if the rule name has no-loop <boolean> no spaces. auto-focus <boolean> duration <long> .... • rule “<name>”     <attribute> <value>     when         <LHS>     then         <RHS> RHS can be any valid java. Or MVEL. Other languages end could be added. 7
  • 8. Imperative vs Declarative Methods that must specific passing of be called directly instances • public void helloMark(Person person) { Rules can never     if ( person.getName().equals( “mark” ) { be called directly        System.out.println( “Hello Mark” );     } Specific instances } cannot be passed. • rule “Hello Mark” LHS     when         Person( name == “mark” )     then         System.out.println( “Hello Mark” ); end RHS 8
  • 9. What is a Pattern P a tte rn O b je c t T y p e F ie ld C o n s t r a in t F ie ld N a m e R e s t r ic t io n E v a lu a t o r V a lu e S h o w e r( te m p e r a tu re = = “ h o t” ) 9
  • 10. Bringing it Together 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 Pattern trigger : acc.balance += cf.amount Pattern Binding field Binding rule “increase balance for AccountPeriod Credits” when Variable Restriction ap : AccountPeriod() acc : Account( $accountNo : accountNo ) CashFlow( type == CREDIT, accountNo == $accountNo, Literal Restriction date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance += $amount; Multri Restriction - Variable end Restriction field Binding Consequence (RHS) 10
  • 11. Rules as a “view” date amount type accountNo AccountingPeriod 12-Jan-07 100 CREDIT 1 start end 2-Feb-07 200 DEBIT 1 01-Jan-07 31-Mar-07 18-May-07 50 CREDIT 1 9-Mar-07 75 CREDIT 1 Account accountNo balance 1 0 rule “increase balance for AccountPeriod rule “decrease balance for AccountPeriod Credits” Debits” when when ap : AccountPeriod() ap : AccountPeriod() acc : Account( $accountNo : accountNo ) acc : Account( $accountNo : accountNo ) CashFlow( type == CREDIT, CashFlow( type == DEBIT, accountNo == $accountNo, accountNo == $accountNo, date >= ap.start && <= ap.end, date >= ap.start && <= ap.end, $ammount : ammount ) $ammount : ammount ) then then acc.balance += $amount; acc.balance -= $amount; end CashFlow end CashFlow date amount type date amount type 12-Jan-07 100 CREDIT 2-Feb-07 200 DEBIT 9-Mar-07 75 CREDIT Account accountNo balance 1 -25 11
  • 12. Patterns in more details CashFlow( type == “credit” ) $ap : AccountPeriod() CashFlow( date >= $ap.start ) $ap : AccountPeriod() CashFlow( date >= $ap.start && <= $ap.end ) $ap : AccountPeriod() CashFlow( type == “credit”, date >= $ap.start && <= $ap.end ) 12
  • 13. More Pattern Examples Person( $age : age ) Person( age == ( $age + 1 ) ) Person( $age : age ) Person( eval( age == $age + 1 ) ) Person( $age1 : age ) Person( $age2 : age ) eval( $age2 == $age1 + 1 ) 13
  • 14. More Pattern Examples Person(age > 30 && < 40 || hair == “black”) Person(age > 30 && < 40 || hair in (“black”, “brown”) ) Person( (age > 30 && < 40 && hair == “black”) || (age > 50 && hair == “grey”) ) Person(pets contain $rover ) Person(pets[’rover’].type == “dog”) Person(pets[0].type == “dog”) 14
  • 15. What is a Production Rule System Codification of the business Repository of knowledge inserted Java instances Inference Engine Production Pattern Working Memory Matcher Memory (rules) (facts) Agenda insert Rules can change update on the fly retract 15
  • 16. Production Rule System Approximated by SQL and Views T a b le s A cco unt A c c o u n t in g P e r io d C a s h f lo w O b je c t T y p e s A cco unt A c c o u n t in g P e r io d C a s h f lo w V ie w s v ie w 1 v ie w 2 V ie w m a in v ie w R u le s r u le 1 r u le 2 agenda agenda 16
  • 17. Conflict Resolution with Salience Salience rule “Print blance for AccountPeriod” salience -50 when ap : AccountPeriod() acc : Account( ) then System.out.println( acc.accountNo + “ : “ acc.balance ); end Agenda 1 increase balance 2 decrease balance arbitrary 3 increase balance 4 print balance 17
  • 18. RuleFlow rule “increase balance for AccountPeriod Credits” ruleflow-group “calculation” when ap : AccountPeriod() acc : Account( $accountNo : accountNo ) CashFlow( type == CREDIT, accountNo == $accountNo, date >= ap.start && <= ap.end, $ammount : ammount ) then acc.balance += $amount; end ruleflow-group rule “Print blance for AccountPeriod” ruleflow-group “report” when ap : AccountPeriod() acc : Account( ) then System.out.println( acc.accountNo + “ : “ acc.balance ); end 18
  • 19. Two Phase System Determine possible rules to fire Agenda Evaluation Working Memory Action Rule insert modify Found Select Fire Rule Rule to Fire retract No Rule Found exit 19
  • 21. From CE for Expressions not Bus( color = “red” ) exists Bus( color = “red” ) forall ( $bus : Bus( color == “red” ) ) forall ( $bus : Bus( floors == 2 ) Bus( this == $bus, color == “red” ) ) 21
  • 23. From CE for Expressions Using 'from' to reason over the nested list rule “Find all the pets for a given owner” when $owner : Person( name == “mark” ) Pet( name == “rover” ) from $owner.pets 23
  • 24. From CE for Expressions 'from' can work on any expression, not just a nested field on a bound variable. rule “Find People for given zip code” when $zipCode : ZipCode() Person( ) from $hbn.getNamedQuery(“Find People”) .setParameters( [ “zipCode” : $zipCode ] ) .list() Hibernate session 24
  • 26. Collect CE rule "accumulate" when $list : List( intValue > 100 ) from collect( Bus( color == "red" ) ) then print "red buses “ + $list; end 26
  • 28. Accumulate CE rule "accumulate" when $sum : Number( intValue > 100 ) from accumulate( Bus( color == "red", $t : takings ) init( sum = 0 ), action( sum += $t ), result( sum ) ) then print "sum is “ + $sum; end 28
  • 29. Accumulate CE rule "accumulate" when $sum : Number( intValue > 100 ) from accumulate( Bus( color == "red", $t : takings ) sum( $t ) ) then print "sum is “ + $sum; end 29
  • 30. Accumulate CE Patterns and CE's can be chained with 'from' rule "collect" when $zipCode : ZipCode() $sum : Number( intValue > 100 ) from accumulate( Bus( color == "red", $t : takings ) from $hbn.getNamedQuery(“Find Buses”) .setParameters( [ “zipCode” : $zipCode ] ) .list(), sum( $t ) ) then 30
  • 32. Timers rule “name” timer 1m30s when $l : Light( status == “on” ) then SendEmail( “turn the light off” ) rule “name” timer (int: 0 1m30) when $l : Light( status == “on” ) then SendEmail( “turn the light off” ) 32
  • 33. Timers 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 ,-*?/LW Month YES 1-12 or JAN-DEC ,-*/ Day of week YES 1-7 or SUN-SAT ,-*?/L# Year NO empty, 1970-2099 ,-*/ rule “name” timer ( cron: 0 0/15 * * * * ) when $l : Light( status == “on” ) then sendEmail( “turn the light off” ) 33
  • 34. Calendars rule "weekdays are high priority" calendars "weekday" timer (int:0 1h) when Alarm() then send( "priority high - we have an alarm” ); end rule "weekend are low priority" calendars "weekend" timer (int:0 4h) when Alarm() then send( "priority low - we have an alarm” ); end 34
  • 36. TMS and Inference rule "Issue Child Bus Pass" Couples the logic when $p : Person( age < 16 ) then insert(new ChildBusPass( $p ) ); end rule "Issue Adult Bus Pass" What happens when the Child when stops being 16? $p : Person( age >= 16 ) then insert(new AdultBusPass( $p ) ); end 36
  • 37. TMS and Inference  Bad ● Monolithic ● Leaky ● Brittle integrity - manual maintenance 37
  • 38. TMS and Inference  A rule “logically” inserts an object  When the rule is no longer true, the object is retracted. when de-couples the logic $p : Person( age < 16 ) then logicalInsert( new IsChild( $p ) ) end Maintains the truth by when automatically retracting $p : Person( age >= 16 ) then logicalInsert( new IsAdult( $p ) ) end 38
  • 39. TMS and Inference rule "Issue Child Bus Pass" when $p : Person( ) IsChild( person =$p ) then logicalInsert(new ChildBusPass( $p ) ); end rule "Issue Adult Bus Pass" The truth maintenance cascades when $p : Person( age >= 16 ) IsAdult( person =$p ) then logicalInsert(new AdultBusPass( $p ) ); end 39
  • 40. TMS and Inference rule "Issue Child Bus Pass" when $p : Person( ) not( ChildBusPass( person == $p ) ) then requestChildBusPass( $p ); The truth maintenance cascades End 40
  • 41. TMS and Inference  Good ● De-couple knowledge responsibilities ● Encapsulate knowledge ● Provide semantic abstractions for those encapsulation ● Integrity robustness – truth maintenance 41
  • 46. DSLs 46
  • 47. DSLs 47
  • 48. Rule Flow 48
  • 50. Scalability Rule engines do not scale for CEP. They have a single point of insertion and are single threaded, CEP has concurrent streams of events. session.insert( event ) ; $c : Custumer( type == “VIP” ) BuyOrderEvent( customer == $c ) Single Point of entry Patterns, evaluate facts sequentially in a single thread. 50
  • 51. Scalability So lets allow multiple named entry points for those streams EntryPoint entryPoint = session.getEntryPoint( “Home Broker Stream” ); entryPoint.insert( event ) ; So now we can insert When not specified uses different streams the “default” entry-point concurrently $c : Custumer( type == “VIP ) BuyOrderEvent( customer == $c ) from entry-point “Home Broker Stream” Patterns can now optional specify their entry-point. 51
  • 52. Automatic Life-Cycle Management All Fact life-cycles must be managed by the user, so retractions are manual. declare StockTick Just use the declare statement to @role( event ) declare a type as an event and it end will be retracted when it is no longer needed declare StockTick @role( event ) @timestamp( timestampAttr ) companySymbol : String stockPrice : double The declare statement can also timestampAttr : long specify an internal model, that end external objects/xml/csv map on to. We support Smooks and JAXB 52
  • 53. Operators Rule engines do not have rich enough set of temporal comparison operators BackAckEvent must occur between 1s and 10s 'after' $c : Custumer( type == “VIP ) BuyOrderEvent $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” The Full set of Operators are supported ● coincides ● overlaps ● starts ● before ● overlappedby ● startedby ● after ● during ● finishes ● meets ● includes ● finishedby ● metby 53
  • 54. Operators 54
  • 55. Operators $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” Existing Drools 'not' Conditional Elements can be used to detect non- occurrence of events 55
  • 56. Sliding time windows Rule engines react to events happening now, there is no temporal understanding of changes over time. StockTicker( symbol == “RHAT” ) over window:time( 5s ) 5s StockTicker( symbol == “RHAT” ) over window:length( 1000 ) 1000 tickers That isn't much without the ability to deal with aggregations, rules engines suck. 56
  • 57. Aggregations Rule Engines do not deal with aggregations Over 5 seconds $n : Number( intValue > 100 ) from accumulate( $s : StockTicker( symbol == “RHAT” ) over window:time( 5s ), average( $s.price ) ) Aggregate ticker price The pattern 'Number' for RHAT over last 5 reasons 'from' the seconds accumulate result $n : accumulate( $s : StockTicker( symbol == “RHAT” ) over window:time( 5s ), average( $s.price ) > 100 ) We can use some sugar to reduce verbosity 57
  • 59. Drools Flow A workflow engine combining processes and  Integration rules ● From loose coupling (decision services) ● To advance integration (process rules)  Unification ● Rules and processes are different types of business knowledge assets ● Infrastructure ● Timers/Schedulers ● Testing ● Communication/Services ● Tooling ● IDE ● repository, management ● Auditing ● 59
  • 61. Rules and processes generic ? Decision Services SCOPE Process specific Rules tightly coupled COUPLING loosely coupled 61
  • 63. Example 63
  • 65. RuleFlowGroup Rule Flow Group 65
  • 67. Constraints Java code constraint 67
  • 68. Constraints Rules can control my workflow? LHS “when” Rule Constraint 68
  • 69. Example  Business decisions are externalized using a decision service rule rule Decision1 when Decision1 rule Decision1 // conditions when when then // conditions // // actions then end conditions // actions end then // actions end 69
  • 70. Example  What if there is a lot of business logic like this? rule Decision1 rule Decision1 rule when Decision1 rule when Decision1 rule rule rule rule Decision1 // conditions // conditionsrule Decision1 rule Decision1 when Decision1 when Decision1 rule rule when Decision1 rule rule Decision1 then // conditions rule rule conditions Decision1 when Decision1 rule Decision1 Decision1 then // when Decision1 rule rule Decision1 // conditionswhen when rule Decision1 when // conditions // conditions when when then // conditionswhen Decision1 when when Decision1 // actions rule actions // Decision1 then // conditions when when then // conditions// conditions end // conditionsthen // conditionsthen // conditions // end when when // actions then // actions then when when // actions then then // conditions then // conditions// actions then // // // actions then end end conditions// actions // // actions end // // actions conditions conditions // actions then // actions end then // actions end // actions end then end end actions end end actions end conditions // conditions // then end then // end then end then // // actions // // actions actions end actions actions end end end end 70
  • 71. Flow of Control Process Engine Rules Engine 71
  • 72. Inversion of Control Process Engine Agenda Rules Engine 72
  • 73. Self monitoring and adaptive declare ProcessStartedEvent @role( event ) end rule "Number of process instances above threshold" when Number( nbProcesses : intValue > 1000 ) from accumulate( e: ProcessStartedEvent( processInstance.processId == "com.sample.order.OrderProcess" ) over window:size(1h), count(e) ) then System.err.println( "WARNING: Nb of order processes in the last hour > 1000: " + nbProcesses ); 73
  • 77. Unified API Definitions Runtime Language
  • 78. Definitions jBPM File file = new File (“.....”); // file to XML process definition ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( IoUtils.FileToString( file ) ); ProcessInstance processInstance = new ProcessInstance(processDefinition); Jess Rete engine = new Rete(); FileReader file = new FileReader("myfile.clp"); Jesp parser = new Jesp(file, engine); parser.parse(false); Esper EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider(); EPStatement countStmt = admin.createEPL( "...." ); countStmt.start(); 78
  • 79. Definitions Drools Flow KnowledegBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBulider(); kbuilder.addResource( ResourceFactory.newClassPathResource( “myflow.drf”, ResourceType.DRF ); If ( kbuilder.hasErrors() ) { log.error( kbuilder.hasErrors().toString() ); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages( kbase.getKnowledgePackages() ); 79
  • 80. Definitions 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() ); 80
  • 81. Drools Integration Deployment Descriptors <change-set> <add> <resource source='classpath:myapp/data/myflow.drf' type='DRF' /> <resource source='http:myapp/data/myrules.drl' type='DRL' /> <resource source='classpath:data/IntegrationExampleTest.xls' type="DTABLE"> <decisiontable-conf input-type="XLS" worksheet-name="Tables_2" /> </resource> <add> </change-set> KnowledegBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBulider(); kbuilder.addResource( ResourceFactory.newFileResource( “changeset.xml”, ResourceType.ChangeSet ); 81
  • 83.
  • 87. Coming in 5.1  BPMN2 (80% of Workflow)  Integration ● OSGi ready ● Spring ● Camel  Seamless Remoting  Simulation/Testing  New Rete Algorithm “true modify” 87
  • 89. Questions? • Dave Bowman: All right, HAL; I'll go in through the emergency airlock. • HAL: Without your space helmet, Dave, you're going to find that rather difficult. • Dave Bowman: HAL, I won't argue with you anymore! Open the doors! • 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? 89