SlideShare une entreprise Scribd logo
1  sur  104
Saturday, 29 June 13
Who am I?
• Drools co-founder
• JBoss (2005)
• Red Hat (2006)
• Polymita Acquisition 2012
• Red Hat Platform Architect
Saturday, 29 June 13
Saturday, 29 June 13
Saturday, 29 June 13
Codehaus Parties - Amsterdam
2003
Saturday, 29 June 13
Saturday, 29 June 13
Saturday, 29 June 13
Saturday, 29 June 13
Saturday, 29 June 13
What’s a Rule
Saturday, 29 June 13
This is a Rule
Saturday, 29 June 13
This is another Rule
function checkemail(email){
var filter=
/^([w-]+(?:.[w-]+)*)@((?:[w-]+
.)*w[w-]{0,66}).([a-z]{2,6}(?:.
[a-z]{2})?)$/i
if ( filter.test(email) ) {
return true
} else{
return false
}
}
Saturday, 29 June 13
This is a Rule Enginevar validator = new
FormValidator('example_form', [{
name: 'req',
display: 'required',
rules: 'required'
}, {
name: 'alphanumeric',
rules: 'alpha_numeric'
}, {
name: 'password',
rules: 'required'
}, {
name: 'password_confirm',
display: 'password confirmation',
rules: 'required|matches[password]'
},
Saturday, 29 June 13
These are Rules too
Saturday, 29 June 13
What is a Rule
rule <rule_name>
<attribute><value>
when
<conditions>
then
<actions>
end
Saturday, 29 June 13
Pattern Matching
Person(age >= 18)
field name restriction
constraintobject type
pattern
Saturday, 29 June 13
Pattern Matching ?
case class Grade( letter : String, passed : Boolean )
def check( grade : Grade ) = {
grade match {
case Grade(letter,true) =>
printf( "You have passed with grade: %s",
letter )
case Grade(letter,false) =>
printf( "You have failed with grade: %s",
letter )
}
}
Saturday, 29 June 13
Hybrid Reasoning
Saturday, 29 June 13
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
rule “increase balance for AccountPeriod Credits”
when
ap : AccountPeriod()
acc : Account()
cf : CashFlow( type == CREDIT,
accountNo == acc.accountNo,
date >= ap.start && <= ap.end )
then
acc.balance += cf.amount;
end
19
acc.balance += cf.amount
CashFlow Rule
Saturday, 29 June 13
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
rule “increase balance for AccountPeriod Credits”
when
ap : AccountPeriod()
acc : Account()
cf : CashFlow( type == CREDIT,
accountNo == acc.accountNo,
date >= ap.start && <= ap.end )
then
acc.balance += cf.amount;
end
20
acc.balance += cf.amount
CashFlow Rule
Saturday, 29 June 13
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
rule “increase balance for AccountPeriod Credits”
when
ap : AccountPeriod()
acc : Account()
cf : CashFlow( type == CREDIT,
accountNo == acc.accountNo,
date >= ap.start && <= ap.end )
then
acc.balance += cf.amount;
end
21
acc.balance += cf.amount
CashFlow Rule
Saturday, 29 June 13
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
rule “increase balance for AccountPeriod Credits”
when
ap : AccountPeriod()
acc : Account()
cf : CashFlow( type == CREDIT,
accountNo == acc.accountNo,
date >= ap.start && <= ap.end )
then
acc.balance += cf.amount;
end
22
acc.balance += cf.amount
CashFlow Rule
Saturday, 29 June 13
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
rule “increase balance for AccountPeriod Credits”
when
ap : AccountPeriod()
acc : Account()
cf : CashFlow( type == CREDIT,
accountNo == acc.accountNo,
date >= ap.start && <= ap.end )
then
acc.balance += cf.amount;
end
23
acc.balance += cf.amount
CashFlow Rule
Saturday, 29 June 13
24
Classes
AccountAccount
long accountNo
int balance
CashFlowCashFlow
Date date
int amount
AccountPeriodAccountPeriod
Date start
Date end
CashFlow Example
Saturday, 29 June 13
25
rule "Increase balance for AccountPeriod Credits"
when
ap : AccountPeriod( )
acc : Account( )
cf : CashFlow( type == CashFlowType.CREDIT,
accountNo == acc.accountNo,
date >= ap.start && <= ap.end )
then
acc.balance = acc.balance + cf.amount;
end
rule "Decrease balance for AccountPeriod Debits"
when
ap : AccountPeriod( )
acc : Account( )
cf : CashFlow( type == CashFlowType.DEBIT,
accountNo == acc.accountNo,
date >= ap.start && <= ap.end )
then
acc.balance = acc.balance - cf.amount;
end
CashFlowCashFlowCashFlowCashFlow
date amount type accountNo
12-Jan-12 100 CREDIT 1
2-Feb-12 200 DEBIT 1
18-May-12 50 CREDIT 1
9-May-12 75 CREDIT 1
AccountingPeriodAccountingPeriod
start end
01-JAN-2012 31-MAR-2012
AccountAccount
accountNo balance
1 0
CashFlowCashFlowCashFlowCashFlow
date amount type accountNo
12-Jan-12 100 CREDIT 1
9-May-12 75 CREDIT 1
CashFlowCashFlowCashFlowCashFlow
date amount type accountNo
2-Feb-12 200 DEBIT 1
AccountAccount
accountNo balance
1 -25
CashFlow Example
Saturday, 29 June 13
26
rule "Print blance for AccountPeriod" salience -50
when
ap : AccountPeriod()
acc : Account( )
then
System.out.println( "Account Number " + acc.accountNo + " balance " + acc.balance );
end
AgendaAgendaAgenda
1 increase balance
arbitrary2 decrease balance arbitrary
3 increase balance
arbitrary
4 print balance
CashFlow Example
Saturday, 29 June 13
Timers
Saturday, 29 June 13
Timers
Saturday, 29 June 13
CEP
Saturday, 29 June 13
BRMS 5.x UI
Saturday, 29 June 13
Saturday, 29 June 13
Guided Editor
Saturday, 29 June 13
Decision Table
Saturday, 29 June 13
•Merging
Decision Table
Saturday, 29 June 13
•Merging
•Grouping
Decision Table
Saturday, 29 June 13
Decision Table Wizards
Saturday, 29 June 13
Rule Templates
Saturday, 29 June 13
Rule Templates
Saturday, 29 June 13
Saturday, 29 June 13
BRMS 6.0
Simplified Utilization
Saturday, 29 June 13
BRMS 5.0 Programmatic API
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.batch().add( newClassPathResource( "Model.drl", getClass() ), DRL )
.add( newClassPathResource( "Queries.drl", getClass() ), DRL )
.add( newClassPathResource( "General.drl", getClass() ), DRL )
.add( newClassPathResource( "Response.drl", getClass() ), DRL )
.add( newClassPathResource( "Events.drl", getClass() ), DRL )
.add( newClassPathResource( "UiView.drl", getClass() ), DRL )
.add( newClassPathResource( "Commands.drl", getClass() ), DRL ).build();
if ( kbuilder.hasErrors() ) {
System.out.println( kbuilder.getErrors().toString() );
System.exit( 1 );
}
KieBaseConfiguration kbaseConf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
kbaseConf.setOption( EqualityBehaviorOption.EQUALITY );
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase( kbaseConf );
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
Counter c = new Counter();
ksession = kbase.newStatefulKnowledgeSession();
Saturday, 29 June 13
KieModules
<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://jboss.org/kie/6.0.0/kmodule">
</kmodule>
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession();
kSession.setGlobal("out", out);
kSession.insert(new Message("Dave", "Hello, HAL. Do you read me, HAL?"));
kSession.fireAllRules();
Saturday, 29 June 13
KieModules• Package location can over-ride kbase name defaults
<kbase name="WumpusMainKB" packages="org.drools.games.wumpus.server,
org.drools.games.wumpus.server.view">
<ksession name="WumpusMainKS" />
</kbase>
<kbase name="WumpusClientKB" packages="org.drools.games.wumpus.client">
<ksession name="WumpusClientKS"/>
</kbase>
KieContainer kc = KieServices.Factory.get().getKieClasspathContainer();
final KieSession serverKsession = kc.newKieSession( "WumpusMainKS");
final KieSession clientKsession = kc.newKieSession("WumpusClientKS");
Saturday, 29 June 13
kmodule.xml Editor
Saturday, 29 June 13
Dynamic KieModules
• kie-ci use embedded maven for remote
discovery
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-ci</artifactId>
</dependency>
KieServices ks = KieServices.Factory.get();
// Install example1 in the local maven repo before to do this
KieContainer kContainer = ks.newKieContainer(
ks.newReleaseId("org.drools",
"named-kiesession",
"6.0.0-SNAPSHOT"));
KieSession kSession = kContainer.newKieSession("ksession1");
kSession.setGlobal("out", out);
Object msg1 = createMessage(kContainer,
"Dave", "Hello, HAL. Do you read me, HAL?");
kSession.insert(msg1);
kSession.fireAllRules();
Saturday, 29 June 13
BRMS 6.0
CDI
Saturday, 29 June 13
CDI Context and Dependency
• CDI injects named entities from the
kmodule.xml
• Injectable types
• KieServices
• KieContainer
• KieBase
• KieSession
• StatelessKieSession
Saturday, 29 June 13
KBase
@Inject
@KBase(value="jar1.KBase1", name="kb2")
@KReleaseId( groupId = "jar1",
artifactId = "art1",
version = "1.0")
private KieBase jar1KBase1kb2;
@Inject
@KBase(value="jar1.KBase1", name="kb2")
@KReleaseId( groupId = "jar1",
artifactId = "art1",
version = "1.0")
private KieBase jar1KBase1kb22;
@Inject
private KieBase defaultClassPathKBase;
@Inject
@KReleaseId( groupId = "jar1",
artifactId = "art1",
version = "1.0")
private KieBase defaultDynamicKBase;
@Inject
@KBase("jar1.KBase1")
@KReleaseId( groupId = "jar1",
artifactId = "art1",
version = "1.0")
private KieBase jar1KBase1v10;
@Inject
@KBase("jar1.KBase1")
@KReleaseId(groupId = "jar1",
artifactId = "art1",
version = "1.1")
private KieBase jar1KBase1v11;
@Inject
@KBase(value="jar1.KBase1", name="kb1")
@KReleaseId( groupId = "jar1",
artifactId = "art1",
version = "1.0")
private KieBase jar1KBase1kb1;
Saturday, 29 June 13
KSession
@Inject
@KSession("jar1.KSession2")
@KReleaseId( groupId = "jar1",
artifactId = "art1",
version = "1.0" )
private KieSession kbase1ksession2v10;
@Inject
@KSession("jar1.KSession2")
@KReleaseId( groupId = "jar1",
artifactId = "art1",
version = "1.1" )
private KieSession kbase1ksession2v11;
@Inject
@KSession(value="jar1.KSession2", name="ks1")
@KReleaseId( groupId = "jar1",
artifactId = "art1",
version = "1.0" )
private KieSession kbase1ksession2ks1;
@Inject
@KSession(value="jar1.KSession2", name="ks2")
@KReleaseId( groupId = "jar1",
artifactId = "art1",
version = "1.0" )
private KieSession kbase1ksession2ks2 ;
@Inject
@KSession(value="jar1.KSession2", name="ks2")
@KReleaseId( groupId = "jar1",
artifactId = "art1",
version = "1.0" )
private KieSession kbase1ksession2ks22;
Saturday, 29 June 13
BRMS 6.0
Spring and Camel
Saturday, 29 June 13
Spring and Camel
Saturday, 29 June 13
Spring and Camel
Saturday, 29 June 13
Spring and Camel
Saturday, 29 June 13
Spring and Camel
Saturday, 29 June 13
BRMS 6.0
Score Cards
Saturday, 29 June 13
Score Cards• a) Setup Parameters
• b) Characteristic Section
Saturday, 29 June 13
Score Cards• UI Generates PMML
• DRL Generated from PMML
• DRL results in
• Calculated Score
• Ranked Reason Codes
• Can import PMML 4.1
• but not exposed yet
• Calculated Scores
• Currently Summations
• Weight coming
• Not in PMML standard
•
Saturday, 29 June 13
6.0 JTMS
Saturday, 29 June 13
Justification-based Truth
• Drools 5.x
• Simple logical insertion TMS, like Clips, Jess and
others.
• Drools 6.0
• Contradiction handling with JTMS
• Clean separation of exception logic
• TMS now has pluggable Belief System
• Simple TMS support
• JTMS now possible.
• Defeasible Logic soon
• See drools-compiler
• JTMSTest for lots of example tests
Saturday, 29 June 13
60
JTMS
Couples the logic
What happens when the Child
stops being 16?
rule "Issue Child Bus Pass"
when
$p : Person( age < 16 )
then
insert(new ChildBusPass( $p ) );
end
rule "Issue Adult Bus Pass"
when
$p : Person( age >= 16 )
then
insert(new AdultBusPass( $p ) );
end
Saturday, 29 June 13
JTMS
• Bad
• Monolithic
• Leaky
• Brittle integrity - manual maintenance
Saturday, 29 June 13
62
JTMS
de-couples the logic
Maintains the truth by
automatically retracting
•A rule “logically” inserts an object
•When the rule is no longer true, the object is retracted.
rule "IsChild"
when
$p : Person( age < 16 )
then
logicalInsert( new IsChild( $p ) )
end
rule "IsAdult"
when
$p : Person( age >= 16 )
then
logicalInsert( new IsAdult( $p ) )
end
Saturday, 29 June 13
63
JTMS
The truth maintenance cascades
rule "Issue Child Bus Pass"
when
$p : Person( )
IsChild( person =$p )
then
logicalInsert(new ChildBusPass( $p ) );
end
rule "Issue Adult Bus Pass"
when
$p : Person()
IsAdult( person =$p )
then
logicalInsert(new AdultBusPass( $p ) );
end
Saturday, 29 June 13
64
JTMS
rule "Issue Child Bus Pass"
when
$p : Person( )
not( ChildBusPass( person == $p ) )
then
requestChildBusPass( $p );
end The truth maintenance cascades
Saturday, 29 June 13
65
JTMS
• Good
• De-couple knowledge responsibilities
• Encapsulate knowledge
• Provide semantic abstractions for those encapsulation
• Integrity robustness – truth maintenance
Saturday, 29 June 13
JTMS
IsChild
ChildBusPas
Rule : isChildRule
Rule : IssueBusPas
+
+
Saturday, 29 June 13
JTMS
rule "Do not issue to banned people"
when
$p : Person( )
Banned( person =$p )
then
logicalInsert(new ChildBusPass( $p ) , “neg” );
end
Saturday, 29 June 13
JTMS
IsChild
ChildBusPas
Rule : isChildRule
Rule : IssueBusPas
+
+
Rule : Do Not Issue
to Banned People
-
Saturday, 29 June 13
BRMS 6.0
R.I.P Rete
Saturday, 29 June 13
R.I.P RETE
inspirations:
• Leaps, Collection Oriented Match, L/R Unlinking
New Innovations
• Full Rule, and Rule Segment Unlinking
• Lazy Evaluation, with Rule scoping
• Set propagations
Previous Innovations
• Modify In Place
• Property Reactive
• Tree Based Graphs
• Subnetwork support
Saturday, 29 June 13
BRMS 6.0
UI - OpenShift Ready
Saturday, 29 June 13
5.x Critique
Saturday, 29 June 13
5.x Critique
UI
• GWT
• but not easily extended
• fixed layouts
• no perspectives
Saturday, 29 June 13
5.x Critique
UI
• GWT
• but not easily extended
• fixed layouts
• no perspectives
JCR
• Performance Issues
• Everything stored as blob
• No tagging, branching etc.
• Webdav
• Limited team providers
Saturday, 29 June 13
5.x Critique
UI
• GWT
• but not easily extended
• fixed layouts
• no perspectives
JCR
• Performance Issues
• Everything stored as blob
• No tagging, branching etc.
• Webdav
• Limited team providers
Deployment
• Binary blobs, on url
Saturday, 29 June 13
UF UberFire
Saturday, 29 June 13
Requirements
• GWT + Errai
• Modular design
• Plugins
• Common Life cycles
• Compile time composition of plugins, via maven
• Flexible layouts
• Perspectives
• GIT Backend
• High Availability
• Maven integration for “projects”
Saturday, 29 June 13
UberFire Architecture Overview
Saturday, 29 June 13
Saturday, 29 June 13
•Modular
•Extensible
•Dynamic and Flexible layouts
•Perspectives
Saturday, 29 June 13
Simple POM Editor
Saturday, 29 June 13
Build and Deploy
Saturday, 29 June 13
Local Maven Repository and
Manager
Saturday, 29 June 13
Create or Clone Git Repos
Saturday, 29 June 13
KIE - Knowledge Is Everything
Saturday, 29 June 13
KIE - Knowledge Is Everything
Saturday, 29 June 13
KIE - Knowledge Is Everything
Saturday, 29 June 13
Community Beta3
Demo
Saturday, 29 June 13
Saturday, 29 June 13
UI Improvments
Saturday, 29 June 13
UberFire new Navigation System
Saturday, 29 June 13
UberFire new Navigation System
Saturday, 29 June 13
UberFire new Navigation System
Saturday, 29 June 13
UberFire new Navigation System
Saturday, 29 June 13
BPM Integration
Saturday, 29 June 13
BPMS 6.0
Saturday, 29 June 13
Work - Task Lists
Saturday, 29 June 13
Work - Task Lists
Saturday, 29 June 13
Work - Task Lists
Saturday, 29 June 13
Work - Task Lists
Saturday, 29 June 13
Work - Task Lists
Saturday, 29 June 13
Work - Task Lists
Saturday, 29 June 13
BPMN Designer (JS)
Saturday, 29 June 13
Serious Bits :)
http://www.youtube.com/watch?v=Omj4PR3v-nI
http://www.youtube.com/watch?v=4CvjKqUOEzM
Saturday, 29 June 13

Contenu connexe

Tendances

A (very) opinionated guide to MSBuild and Project Files
A (very) opinionated guide to MSBuild and Project FilesA (very) opinionated guide to MSBuild and Project Files
A (very) opinionated guide to MSBuild and Project FilesDavid Wengier
 
Universal JavaScript
Universal JavaScriptUniversal JavaScript
Universal JavaScript名辰 洪
 
Migrating from Flux to Redux. Why and how.
Migrating from Flux to Redux. Why and how.Migrating from Flux to Redux. Why and how.
Migrating from Flux to Redux. Why and how.Astrails
 
iOS UI Debugging
iOS UI DebuggingiOS UI Debugging
iOS UI Debuggingdavidolesch
 
Mutation Testing - Voxxed Days Bucharest 10.03.2017
Mutation Testing - Voxxed Days Bucharest 10.03.2017Mutation Testing - Voxxed Days Bucharest 10.03.2017
Mutation Testing - Voxxed Days Bucharest 10.03.2017Rafał Leszko
 
Introduction to Service Workers | Matteo Manchi
Introduction to Service Workers | Matteo ManchiIntroduction to Service Workers | Matteo Manchi
Introduction to Service Workers | Matteo ManchiCodemotion
 
如何「畫圖」寫測試 - RxJS Marble Test
如何「畫圖」寫測試 - RxJS Marble Test如何「畫圖」寫測試 - RxJS Marble Test
如何「畫圖」寫測試 - RxJS Marble Test名辰 洪
 
ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜
ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜
ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜Fukaya Akifumi
 
Lille2010markp
Lille2010markpLille2010markp
Lille2010markpCh'ti JUG
 
Tweaking the interactive grid
Tweaking the interactive gridTweaking the interactive grid
Tweaking the interactive gridRoel Hartman
 
Blending Culture in Twitter Client
Blending Culture in Twitter ClientBlending Culture in Twitter Client
Blending Culture in Twitter ClientKenji Tanaka
 
描画とビジネスをクリーンに分ける(公開用)
描画とビジネスをクリーンに分ける(公開用)描画とビジネスをクリーンに分ける(公開用)
描画とビジネスをクリーンに分ける(公開用)Kenji Tanaka
 
Higher-Order Components — Ilya Gelman
Higher-Order Components — Ilya GelmanHigher-Order Components — Ilya Gelman
Higher-Order Components — Ilya Gelman500Tech
 

Tendances (19)

A (very) opinionated guide to MSBuild and Project Files
A (very) opinionated guide to MSBuild and Project FilesA (very) opinionated guide to MSBuild and Project Files
A (very) opinionated guide to MSBuild and Project Files
 
Universal JavaScript
Universal JavaScriptUniversal JavaScript
Universal JavaScript
 
Migrating from Flux to Redux. Why and how.
Migrating from Flux to Redux. Why and how.Migrating from Flux to Redux. Why and how.
Migrating from Flux to Redux. Why and how.
 
Backbone Basics with Examples
Backbone Basics with ExamplesBackbone Basics with Examples
Backbone Basics with Examples
 
iOS UI Debugging
iOS UI DebuggingiOS UI Debugging
iOS UI Debugging
 
Mutation Testing - Voxxed Days Bucharest 10.03.2017
Mutation Testing - Voxxed Days Bucharest 10.03.2017Mutation Testing - Voxxed Days Bucharest 10.03.2017
Mutation Testing - Voxxed Days Bucharest 10.03.2017
 
F[4]
F[4]F[4]
F[4]
 
jQuery Presentasion
jQuery PresentasionjQuery Presentasion
jQuery Presentasion
 
Introduction to Service Workers | Matteo Manchi
Introduction to Service Workers | Matteo ManchiIntroduction to Service Workers | Matteo Manchi
Introduction to Service Workers | Matteo Manchi
 
Prototype UI
Prototype UIPrototype UI
Prototype UI
 
如何「畫圖」寫測試 - RxJS Marble Test
如何「畫圖」寫測試 - RxJS Marble Test如何「畫圖」寫測試 - RxJS Marble Test
如何「畫圖」寫測試 - RxJS Marble Test
 
ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜
ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜
ヘルスケアサービスを実現する最新技術
〜HealthKit・GCP+Go〜
 
Lille2010markp
Lille2010markpLille2010markp
Lille2010markp
 
Tweaking the interactive grid
Tweaking the interactive gridTweaking the interactive grid
Tweaking the interactive grid
 
Blending Culture in Twitter Client
Blending Culture in Twitter ClientBlending Culture in Twitter Client
Blending Culture in Twitter Client
 
描画とビジネスをクリーンに分ける(公開用)
描画とビジネスをクリーンに分ける(公開用)描画とビジネスをクリーンに分ける(公開用)
描画とビジネスをクリーンに分ける(公開用)
 
Higher-Order Components — Ilya Gelman
Higher-Order Components — Ilya GelmanHigher-Order Components — Ilya Gelman
Higher-Order Components — Ilya Gelman
 
Clojure functions examples
Clojure functions examplesClojure functions examples
Clojure functions examples
 
Software Testing
Software TestingSoftware Testing
Software Testing
 

Similaire à Drools 6.0 (CamelOne 2013)

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 2012Mark 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
 
Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)Geoffrey De Smet
 
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
 
Desenvolvimento web com Ruby on Rails (extras)
Desenvolvimento web com Ruby on Rails (extras)Desenvolvimento web com Ruby on Rails (extras)
Desenvolvimento web com Ruby on Rails (extras)Joao Lucas Santana
 
(PHPers Wrocław #5) How to write valuable unit test?
(PHPers Wrocław #5) How to write valuable unit test?(PHPers Wrocław #5) How to write valuable unit test?
(PHPers Wrocław #5) How to write valuable unit test?RST Software Masters
 
PHPUnit elevato alla Symfony2
PHPUnit elevato alla Symfony2PHPUnit elevato alla Symfony2
PHPUnit elevato alla Symfony2eugenio pombi
 
Compose Async with RxJS
Compose Async with RxJSCompose Async with RxJS
Compose Async with RxJSKyung Yeol Kim
 
AngularJS vs. Ember.js vs. Backbone.js
AngularJS vs. Ember.js vs. Backbone.jsAngularJS vs. Ember.js vs. Backbone.js
AngularJS vs. Ember.js vs. Backbone.jsMark
 
Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)
Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)
Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)Sirar Salih
 
Bag Of Tricks From Iusethis
Bag Of Tricks From IusethisBag Of Tricks From Iusethis
Bag Of Tricks From IusethisMarcus Ramberg
 
Week 8
Week 8Week 8
Week 8A VD
 
Buenos Aires Drools Expert Presentation
Buenos Aires Drools Expert PresentationBuenos Aires Drools Expert Presentation
Buenos Aires Drools Expert PresentationMark Proctor
 
Dynamically Evolving Systems: Cluster Analysis Using Time
Dynamically Evolving Systems: Cluster Analysis Using TimeDynamically Evolving Systems: Cluster Analysis Using Time
Dynamically Evolving Systems: Cluster Analysis Using TimeMagnify Analytic Solutions
 
Performance measurement and tuning
Performance measurement and tuningPerformance measurement and tuning
Performance measurement and tuningAOE
 
Agile data presentation 3 - cambridge
Agile data   presentation 3 - cambridgeAgile data   presentation 3 - cambridge
Agile data presentation 3 - cambridgeRomans Malinovskis
 
Managing Oracle Streams Using Enterprise Manager Grid Control
Managing Oracle Streams Using Enterprise Manager Grid ControlManaging Oracle Streams Using Enterprise Manager Grid Control
Managing Oracle Streams Using Enterprise Manager Grid Controlscottb411
 

Similaire à Drools 6.0 (CamelOne 2013) (20)

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
 
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)
 
Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)Hybrid rule engines (rulesfest 2010)
Hybrid rule engines (rulesfest 2010)
 
Drools 6.0 (Red Hat Summit)
Drools 6.0 (Red Hat Summit)Drools 6.0 (Red Hat Summit)
Drools 6.0 (Red Hat Summit)
 
Desenvolvimento web com Ruby on Rails (extras)
Desenvolvimento web com Ruby on Rails (extras)Desenvolvimento web com Ruby on Rails (extras)
Desenvolvimento web com Ruby on Rails (extras)
 
JBoss World 2011 - Drools
JBoss World 2011 - DroolsJBoss World 2011 - Drools
JBoss World 2011 - Drools
 
SQL Server 2008 Portfolio
SQL Server 2008 PortfolioSQL Server 2008 Portfolio
SQL Server 2008 Portfolio
 
(PHPers Wrocław #5) How to write valuable unit test?
(PHPers Wrocław #5) How to write valuable unit test?(PHPers Wrocław #5) How to write valuable unit test?
(PHPers Wrocław #5) How to write valuable unit test?
 
PHPUnit elevato alla Symfony2
PHPUnit elevato alla Symfony2PHPUnit elevato alla Symfony2
PHPUnit elevato alla Symfony2
 
Compose Async with RxJS
Compose Async with RxJSCompose Async with RxJS
Compose Async with RxJS
 
AngularJS vs. Ember.js vs. Backbone.js
AngularJS vs. Ember.js vs. Backbone.jsAngularJS vs. Ember.js vs. Backbone.js
AngularJS vs. Ember.js vs. Backbone.js
 
Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)
Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)
Azure Table Storage: The Good, the Bad, the Ugly (15 min. lightning talk)
 
Bag Of Tricks From Iusethis
Bag Of Tricks From IusethisBag Of Tricks From Iusethis
Bag Of Tricks From Iusethis
 
Week 8
Week 8Week 8
Week 8
 
Buenos Aires Drools Expert Presentation
Buenos Aires Drools Expert PresentationBuenos Aires Drools Expert Presentation
Buenos Aires Drools Expert Presentation
 
Dynamically Evolving Systems: Cluster Analysis Using Time
Dynamically Evolving Systems: Cluster Analysis Using TimeDynamically Evolving Systems: Cluster Analysis Using Time
Dynamically Evolving Systems: Cluster Analysis Using Time
 
Reduxing like a pro
Reduxing like a proReduxing like a pro
Reduxing like a pro
 
Performance measurement and tuning
Performance measurement and tuningPerformance measurement and tuning
Performance measurement and tuning
 
Agile data presentation 3 - cambridge
Agile data   presentation 3 - cambridgeAgile data   presentation 3 - cambridge
Agile data presentation 3 - cambridge
 
Managing Oracle Streams Using Enterprise Manager Grid Control
Managing Oracle Streams Using Enterprise Manager Grid ControlManaging Oracle Streams Using Enterprise Manager Grid Control
Managing Oracle Streams Using Enterprise Manager Grid Control
 

Plus de 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
 
Drools Happenings 7.0 - Devnation 2016
Drools Happenings 7.0 - Devnation 2016Drools Happenings 7.0 - Devnation 2016
Drools Happenings 7.0 - Devnation 2016Mark 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 and jBPM 6 Overview
Drools and jBPM 6 OverviewDrools and jBPM 6 Overview
Drools and jBPM 6 OverviewMark 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
 
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
 
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
 
Drools & jBPM future roadmap talk
Drools & jBPM future roadmap talkDrools & jBPM future roadmap talk
Drools & jBPM future roadmap talkMark Proctor
 
Drools @ IntelliFest 2012
Drools @ IntelliFest 2012Drools @ IntelliFest 2012
Drools @ IntelliFest 2012Mark Proctor
 
JUDCon India 2012 Drools Fusion
JUDCon  India 2012 Drools FusionJUDCon  India 2012 Drools Fusion
JUDCon India 2012 Drools FusionMark Proctor
 

Plus de 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)
 
Drools Happenings 7.0 - Devnation 2016
Drools Happenings 7.0 - Devnation 2016Drools Happenings 7.0 - Devnation 2016
Drools Happenings 7.0 - Devnation 2016
 
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 and jBPM 6 Overview
Drools and jBPM 6 OverviewDrools and jBPM 6 Overview
Drools and jBPM 6 Overview
 
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)
 
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)
 
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
 
Drools & jBPM future roadmap talk
Drools & jBPM future roadmap talkDrools & jBPM future roadmap talk
Drools & jBPM future roadmap talk
 
Drools @ IntelliFest 2012
Drools @ IntelliFest 2012Drools @ IntelliFest 2012
Drools @ IntelliFest 2012
 
JUDCon India 2012 Drools Fusion
JUDCon  India 2012 Drools FusionJUDCon  India 2012 Drools Fusion
JUDCon India 2012 Drools Fusion
 

Dernier

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 

Dernier (20)

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 

Drools 6.0 (CamelOne 2013)

  • 2. Who am I? • Drools co-founder • JBoss (2005) • Red Hat (2006) • Polymita Acquisition 2012 • Red Hat Platform Architect Saturday, 29 June 13
  • 5. Codehaus Parties - Amsterdam 2003 Saturday, 29 June 13
  • 11. This is a Rule Saturday, 29 June 13
  • 12. This is another Rule function checkemail(email){ var filter= /^([w-]+(?:.[w-]+)*)@((?:[w-]+ .)*w[w-]{0,66}).([a-z]{2,6}(?:. [a-z]{2})?)$/i if ( filter.test(email) ) { return true } else{ return false } } Saturday, 29 June 13
  • 13. This is a Rule Enginevar validator = new FormValidator('example_form', [{ name: 'req', display: 'required', rules: 'required' }, { name: 'alphanumeric', rules: 'alpha_numeric' }, { name: 'password', rules: 'required' }, { name: 'password_confirm', display: 'password confirmation', rules: 'required|matches[password]' }, Saturday, 29 June 13
  • 14. These are Rules too Saturday, 29 June 13
  • 15. What is a Rule rule <rule_name> <attribute><value> when <conditions> then <actions> end Saturday, 29 June 13
  • 16. Pattern Matching Person(age >= 18) field name restriction constraintobject type pattern Saturday, 29 June 13
  • 17. Pattern Matching ? case class Grade( letter : String, passed : Boolean ) def check( grade : Grade ) = { grade match { case Grade(letter,true) => printf( "You have passed with grade: %s", letter ) case Grade(letter,false) => printf( "You have failed with grade: %s", letter ) } } Saturday, 29 June 13
  • 19. 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 rule “increase balance for AccountPeriod Credits” when ap : AccountPeriod() acc : Account() cf : CashFlow( type == CREDIT, accountNo == acc.accountNo, date >= ap.start && <= ap.end ) then acc.balance += cf.amount; end 19 acc.balance += cf.amount CashFlow Rule Saturday, 29 June 13
  • 20. 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 rule “increase balance for AccountPeriod Credits” when ap : AccountPeriod() acc : Account() cf : CashFlow( type == CREDIT, accountNo == acc.accountNo, date >= ap.start && <= ap.end ) then acc.balance += cf.amount; end 20 acc.balance += cf.amount CashFlow Rule Saturday, 29 June 13
  • 21. 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 rule “increase balance for AccountPeriod Credits” when ap : AccountPeriod() acc : Account() cf : CashFlow( type == CREDIT, accountNo == acc.accountNo, date >= ap.start && <= ap.end ) then acc.balance += cf.amount; end 21 acc.balance += cf.amount CashFlow Rule Saturday, 29 June 13
  • 22. 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 rule “increase balance for AccountPeriod Credits” when ap : AccountPeriod() acc : Account() cf : CashFlow( type == CREDIT, accountNo == acc.accountNo, date >= ap.start && <= ap.end ) then acc.balance += cf.amount; end 22 acc.balance += cf.amount CashFlow Rule Saturday, 29 June 13
  • 23. 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 rule “increase balance for AccountPeriod Credits” when ap : AccountPeriod() acc : Account() cf : CashFlow( type == CREDIT, accountNo == acc.accountNo, date >= ap.start && <= ap.end ) then acc.balance += cf.amount; end 23 acc.balance += cf.amount CashFlow Rule Saturday, 29 June 13
  • 24. 24 Classes AccountAccount long accountNo int balance CashFlowCashFlow Date date int amount AccountPeriodAccountPeriod Date start Date end CashFlow Example Saturday, 29 June 13
  • 25. 25 rule "Increase balance for AccountPeriod Credits" when ap : AccountPeriod( ) acc : Account( ) cf : CashFlow( type == CashFlowType.CREDIT, accountNo == acc.accountNo, date >= ap.start && <= ap.end ) then acc.balance = acc.balance + cf.amount; end rule "Decrease balance for AccountPeriod Debits" when ap : AccountPeriod( ) acc : Account( ) cf : CashFlow( type == CashFlowType.DEBIT, accountNo == acc.accountNo, date >= ap.start && <= ap.end ) then acc.balance = acc.balance - cf.amount; end CashFlowCashFlowCashFlowCashFlow date amount type accountNo 12-Jan-12 100 CREDIT 1 2-Feb-12 200 DEBIT 1 18-May-12 50 CREDIT 1 9-May-12 75 CREDIT 1 AccountingPeriodAccountingPeriod start end 01-JAN-2012 31-MAR-2012 AccountAccount accountNo balance 1 0 CashFlowCashFlowCashFlowCashFlow date amount type accountNo 12-Jan-12 100 CREDIT 1 9-May-12 75 CREDIT 1 CashFlowCashFlowCashFlowCashFlow date amount type accountNo 2-Feb-12 200 DEBIT 1 AccountAccount accountNo balance 1 -25 CashFlow Example Saturday, 29 June 13
  • 26. 26 rule "Print blance for AccountPeriod" salience -50 when ap : AccountPeriod() acc : Account( ) then System.out.println( "Account Number " + acc.accountNo + " balance " + acc.balance ); end AgendaAgendaAgenda 1 increase balance arbitrary2 decrease balance arbitrary 3 increase balance arbitrary 4 print balance CashFlow Example Saturday, 29 June 13
  • 30. BRMS 5.x UI Saturday, 29 June 13
  • 41. BRMS 5.0 Programmatic API KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.batch().add( newClassPathResource( "Model.drl", getClass() ), DRL ) .add( newClassPathResource( "Queries.drl", getClass() ), DRL ) .add( newClassPathResource( "General.drl", getClass() ), DRL ) .add( newClassPathResource( "Response.drl", getClass() ), DRL ) .add( newClassPathResource( "Events.drl", getClass() ), DRL ) .add( newClassPathResource( "UiView.drl", getClass() ), DRL ) .add( newClassPathResource( "Commands.drl", getClass() ), DRL ).build(); if ( kbuilder.hasErrors() ) { System.out.println( kbuilder.getErrors().toString() ); System.exit( 1 ); } KieBaseConfiguration kbaseConf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); kbaseConf.setOption( EqualityBehaviorOption.EQUALITY ); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase( kbaseConf ); kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() ); Counter c = new Counter(); ksession = kbase.newStatefulKnowledgeSession(); Saturday, 29 June 13
  • 42. KieModules <kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://jboss.org/kie/6.0.0/kmodule"> </kmodule> KieServices ks = KieServices.Factory.get(); KieContainer kContainer = ks.getKieClasspathContainer(); KieSession kSession = kContainer.newKieSession(); kSession.setGlobal("out", out); kSession.insert(new Message("Dave", "Hello, HAL. Do you read me, HAL?")); kSession.fireAllRules(); Saturday, 29 June 13
  • 43. KieModules• Package location can over-ride kbase name defaults <kbase name="WumpusMainKB" packages="org.drools.games.wumpus.server, org.drools.games.wumpus.server.view"> <ksession name="WumpusMainKS" /> </kbase> <kbase name="WumpusClientKB" packages="org.drools.games.wumpus.client"> <ksession name="WumpusClientKS"/> </kbase> KieContainer kc = KieServices.Factory.get().getKieClasspathContainer(); final KieSession serverKsession = kc.newKieSession( "WumpusMainKS"); final KieSession clientKsession = kc.newKieSession("WumpusClientKS"); Saturday, 29 June 13
  • 45. Dynamic KieModules • kie-ci use embedded maven for remote discovery <dependency> <groupId>org.kie</groupId> <artifactId>kie-ci</artifactId> </dependency> KieServices ks = KieServices.Factory.get(); // Install example1 in the local maven repo before to do this KieContainer kContainer = ks.newKieContainer( ks.newReleaseId("org.drools", "named-kiesession", "6.0.0-SNAPSHOT")); KieSession kSession = kContainer.newKieSession("ksession1"); kSession.setGlobal("out", out); Object msg1 = createMessage(kContainer, "Dave", "Hello, HAL. Do you read me, HAL?"); kSession.insert(msg1); kSession.fireAllRules(); Saturday, 29 June 13
  • 47. CDI Context and Dependency • CDI injects named entities from the kmodule.xml • Injectable types • KieServices • KieContainer • KieBase • KieSession • StatelessKieSession Saturday, 29 June 13
  • 48. KBase @Inject @KBase(value="jar1.KBase1", name="kb2") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0") private KieBase jar1KBase1kb2; @Inject @KBase(value="jar1.KBase1", name="kb2") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0") private KieBase jar1KBase1kb22; @Inject private KieBase defaultClassPathKBase; @Inject @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0") private KieBase defaultDynamicKBase; @Inject @KBase("jar1.KBase1") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0") private KieBase jar1KBase1v10; @Inject @KBase("jar1.KBase1") @KReleaseId(groupId = "jar1", artifactId = "art1", version = "1.1") private KieBase jar1KBase1v11; @Inject @KBase(value="jar1.KBase1", name="kb1") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0") private KieBase jar1KBase1kb1; Saturday, 29 June 13
  • 49. KSession @Inject @KSession("jar1.KSession2") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0" ) private KieSession kbase1ksession2v10; @Inject @KSession("jar1.KSession2") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.1" ) private KieSession kbase1ksession2v11; @Inject @KSession(value="jar1.KSession2", name="ks1") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0" ) private KieSession kbase1ksession2ks1; @Inject @KSession(value="jar1.KSession2", name="ks2") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0" ) private KieSession kbase1ksession2ks2 ; @Inject @KSession(value="jar1.KSession2", name="ks2") @KReleaseId( groupId = "jar1", artifactId = "art1", version = "1.0" ) private KieSession kbase1ksession2ks22; Saturday, 29 June 13
  • 50. BRMS 6.0 Spring and Camel Saturday, 29 June 13
  • 56. Score Cards• a) Setup Parameters • b) Characteristic Section Saturday, 29 June 13
  • 57. Score Cards• UI Generates PMML • DRL Generated from PMML • DRL results in • Calculated Score • Ranked Reason Codes • Can import PMML 4.1 • but not exposed yet • Calculated Scores • Currently Summations • Weight coming • Not in PMML standard • Saturday, 29 June 13
  • 59. Justification-based Truth • Drools 5.x • Simple logical insertion TMS, like Clips, Jess and others. • Drools 6.0 • Contradiction handling with JTMS • Clean separation of exception logic • TMS now has pluggable Belief System • Simple TMS support • JTMS now possible. • Defeasible Logic soon • See drools-compiler • JTMSTest for lots of example tests Saturday, 29 June 13
  • 60. 60 JTMS Couples the logic What happens when the Child stops being 16? rule "Issue Child Bus Pass" when $p : Person( age < 16 ) then insert(new ChildBusPass( $p ) ); end rule "Issue Adult Bus Pass" when $p : Person( age >= 16 ) then insert(new AdultBusPass( $p ) ); end Saturday, 29 June 13
  • 61. JTMS • Bad • Monolithic • Leaky • Brittle integrity - manual maintenance Saturday, 29 June 13
  • 62. 62 JTMS de-couples the logic Maintains the truth by automatically retracting •A rule “logically” inserts an object •When the rule is no longer true, the object is retracted. rule "IsChild" when $p : Person( age < 16 ) then logicalInsert( new IsChild( $p ) ) end rule "IsAdult" when $p : Person( age >= 16 ) then logicalInsert( new IsAdult( $p ) ) end Saturday, 29 June 13
  • 63. 63 JTMS The truth maintenance cascades rule "Issue Child Bus Pass" when $p : Person( ) IsChild( person =$p ) then logicalInsert(new ChildBusPass( $p ) ); end rule "Issue Adult Bus Pass" when $p : Person() IsAdult( person =$p ) then logicalInsert(new AdultBusPass( $p ) ); end Saturday, 29 June 13
  • 64. 64 JTMS rule "Issue Child Bus Pass" when $p : Person( ) not( ChildBusPass( person == $p ) ) then requestChildBusPass( $p ); end The truth maintenance cascades Saturday, 29 June 13
  • 65. 65 JTMS • Good • De-couple knowledge responsibilities • Encapsulate knowledge • Provide semantic abstractions for those encapsulation • Integrity robustness – truth maintenance Saturday, 29 June 13
  • 66. JTMS IsChild ChildBusPas Rule : isChildRule Rule : IssueBusPas + + Saturday, 29 June 13
  • 67. JTMS rule "Do not issue to banned people" when $p : Person( ) Banned( person =$p ) then logicalInsert(new ChildBusPass( $p ) , “neg” ); end Saturday, 29 June 13
  • 68. JTMS IsChild ChildBusPas Rule : isChildRule Rule : IssueBusPas + + Rule : Do Not Issue to Banned People - Saturday, 29 June 13
  • 70. R.I.P RETE inspirations: • Leaps, Collection Oriented Match, L/R Unlinking New Innovations • Full Rule, and Rule Segment Unlinking • Lazy Evaluation, with Rule scoping • Set propagations Previous Innovations • Modify In Place • Property Reactive • Tree Based Graphs • Subnetwork support Saturday, 29 June 13
  • 71. BRMS 6.0 UI - OpenShift Ready Saturday, 29 June 13
  • 73. 5.x Critique UI • GWT • but not easily extended • fixed layouts • no perspectives Saturday, 29 June 13
  • 74. 5.x Critique UI • GWT • but not easily extended • fixed layouts • no perspectives JCR • Performance Issues • Everything stored as blob • No tagging, branching etc. • Webdav • Limited team providers Saturday, 29 June 13
  • 75. 5.x Critique UI • GWT • but not easily extended • fixed layouts • no perspectives JCR • Performance Issues • Everything stored as blob • No tagging, branching etc. • Webdav • Limited team providers Deployment • Binary blobs, on url Saturday, 29 June 13
  • 77. Requirements • GWT + Errai • Modular design • Plugins • Common Life cycles • Compile time composition of plugins, via maven • Flexible layouts • Perspectives • GIT Backend • High Availability • Maven integration for “projects” Saturday, 29 June 13
  • 80. •Modular •Extensible •Dynamic and Flexible layouts •Perspectives Saturday, 29 June 13
  • 83. Local Maven Repository and Manager Saturday, 29 June 13
  • 84. Create or Clone Git Repos Saturday, 29 June 13
  • 85. KIE - Knowledge Is Everything Saturday, 29 June 13
  • 86. KIE - Knowledge Is Everything Saturday, 29 June 13
  • 87. KIE - Knowledge Is Everything Saturday, 29 June 13
  • 91. UberFire new Navigation System Saturday, 29 June 13
  • 92. UberFire new Navigation System Saturday, 29 June 13
  • 93. UberFire new Navigation System Saturday, 29 June 13
  • 94. UberFire new Navigation System Saturday, 29 June 13
  • 97. Work - Task Lists Saturday, 29 June 13
  • 98. Work - Task Lists Saturday, 29 June 13
  • 99. Work - Task Lists Saturday, 29 June 13
  • 100. Work - Task Lists Saturday, 29 June 13
  • 101. Work - Task Lists Saturday, 29 June 13
  • 102. Work - Task Lists Saturday, 29 June 13