SlideShare ist ein Scribd-Unternehmen logo
1 von 61
如何建立企業級應用的
商業規則引擎
李日貴 Jini Gary Lee
王文農 Steven Wang
為何要使用規則引擎
Java Multi-tiers
• Struts
• JSF
• SpringMVC
• Tapestry
• Wicket
MVC
Front Tier
DAO
Persistence Tier
Buisiness Logic
Middle Tier
• Hibernate
• MyBatis
• JDO
• JPA
RuleEngine 的好處
• 宣告式的開發
• 區隔商業邏輯與資料處理的程式
• 效能與擴充性
• 集中控管商業邏輯
• 簡易的工具
• 可閱讀的規則
Rule ?
When
(Conditions)
THEN
(Actions)
Rule Engine
Working
Memory
Production
Memory
Match Rules
Resolve
Conflicts
(Agenda)
Fire RulesFact Rules
Forward Chaining
Rule
Base
Working
Memory
Determine possible
rules to fire
Select
Rules
to Fire
Conflict
Resolution
Strtegy
Exit
Fire Rule
Conflict Set
Rule Found
No Rule Found
Exit if specified by rule
Rete
• Dr. Charles L. Forgy , 1974
• Data struture
– List of elements
– Tree-Strutured Sorting Network
• Algorithm
– Rule Compilation
– Runtime Execution
http://en.wikipedia.org/wiki/File:Rete.svg
JSR-94
• Java Rule Engine API
• JSR94 provides
– Rule Administration
– Rule Runtime APIs
– Rule Language (RuleML)
JSR94 APIs
• Register and unregister rules
• Parse Rules
• Inspect rule metadata
• Execute Rules
• Retrieve Results
• Filter Results
Rule Engines
• Commercial
– Oracle Business Rules
– IBM iLOG
– Pega Rules
– FICO Blaze Advisor
– JESS ( JSR94 RI )
• Opensources
– JBOSS Drools
– OpenRules
JESS
JESS
• A Rule Engine
• A scripting environment in Java
JESS  Java
• Rete algorithm
• LISP-like syntax
• Can be licensed for commercial use, no
cost for academic use
JESS language
• *.clp ( in JessDE )
Basic Syntax
• (a b c) – List of tokens
• (1 2 3) – List of Integers
• (+ 1 2) – Expression
• (“Hello world”) – String
• (foo ?x ?y) – Function
Define Functions
(deffunction max(?a ?b)
(if(> ?a ?b) then
(return ?a)
else
(return ?b)))
(printout t (max 3 5))
Define Advices
(defadvice before + (bind $?argv ( create$
$?argv 1 )))
(printout t (+ 2 3) crlf)
(undefadvice +)
(printout t (+2 3) crlf)
Define Template
(deftemplate automobile
"A specific car."
(slot make)
(slot model)
(slot year (type INTEGER))
(slot color (default white)))
(assert (automobile (model CAMERY) (make TOYOTA) (year 2008)))
(assert (automobile (model 520i) (make BMW) (year 2013)))
(facts)
Define class
(import domain.Account)
(deftemplate Account (declare (from-class Account)))
(bind ?a (new Account))
(add ?a)
(facts)
(modify 0 (id 1) (name jini))
(facts)
(bind ?a (new Account))
(add ?a)
(?a setId 2) (?a setName steven)
(printout t (?a getId) "-" (?a getName) "." crlf)
(facts)
(update ?a)
(facts)
Define rule
(deftemplate person (slot name) (slot age))
(defrule vote "Can you vote"
(person {age < 18})
=>
(printout t "No, you can't vote" crlf)
)
(assert (person (age 17)))
(run)
Use Java
(bind ?map (new java.util.HashMap))
(call ?map put "A" "Apple")
(call ?map put "B" "Banana")
(call ?map put "C" "Cherry")
(printout t (call ?map get "B"))
JessML
<?xml version=‘1.0’ encoding=‘UTF-8’?>
<rulebase xmlns=‘http://www.jessrules.com/JessML/1.0’>
<template>
<name>person</name><slot>name</slot>
<value type=‘SYMBOL’>nil</value>
</template>
<facts>
<name>course</name>
<fact>
<name>id</name><value type=‘INTEGER’>1</value>
</fact>
</facts>
<rule>
<lhs>..</lhs>
<rhs>..</rhs>
</rule>
</rulebase>
JSR 94
public class JessRule {
private static final String RULE_SERVICE_PROVIDER
=“org.jcp.jsr94.jess”;
public void run(){
Class.forName(“org.jcp.jsr94.jess.RuleServiceProviderImpl”);
RuleServiceProvider serviceProvider =
RuleServiceProviderManager
.getRuleRuleServiceProvider(RULE_SERVICE_PROVIDER );
}
}
Drools
Setup RuleIDE
Start Drools Project
simple Rule
package javatwo.license
rule “Check age < 18”
when
$a : Applicant(age < 18)
then
$a.setValid(false);
end
Execute DRL
KnowledgeBuilder kbuilder =
KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("javatwo/
license/licenseApplication.drl"), ResourceType.DRL );
KnowledgeBase kbase =
KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackage
s());
StatelessKnowledgeSession ksession =
kbase.newStatelessKnowledgeSession();
Applicant applicant = new Applicant(1, "Kevin", 15);
ksession.execute(applicant);
Nature Language
kbuilder.add(ResourceFactory.newClassPathResource("nature.dsl"),
ResourceType.DSL );
kbuilder.add(ResourceFactory.newClassPathResource("nature.dslr"),
ResourceType.DSLR );
nature.dsl
[condition][]Person is {name}=$person : Person(name=='{name}')
[consequence][]SayHello=System.out.println("Hello "+$person.getName());
nature.dslr
expander nature.dsl
rule "Nature language"
when
Person is gary
then
SayHello
end
Chinese ?!
cnature.dsl
[condition][]姓名是 {name}=$person : Person(name=='{name}')
[consequence][]打招呼=System.out.println("Hello
"+$person.getName());
cnature.dslr
expander cnature.dsl
rule "Nature language"
when
姓名是 gary
then
打招呼
end
JSR 94
public class DroolsRule {
private static final String RULE_SERVICE_PROVIDER
=“http://drools.org/”;
public void run(){
Class.forName(“org.drools.jsr94.rules.RuleServiceProviderImpl
”);
RuleServiceProvider serviceProvider =
RuleServiceProviderManager
.getRuleRuleServiceProvider(RULE_SERVICE_PROVIDER );
}
}
Script
JSR-223 support
• JSR-223
– javax.script
• The scripting API consists of interfaces and
classes that define Java Scripting Engines and
provides a framework for their use in Java
applications.
– since Java 1.6
• Before JSR-223
– Use BeanShell or etc..
– API not standard
JSR-223 support
Scripting API component
relationships
Eval Script
// create a script engine manager
ScriptEngineManager factory = new ScriptEngineManager();
// create a Javascript engine
ScriptEngine engine = factory.getEngineByName(“JavaScript”);
// evaluate Javascript code from String
engine.eval(“print(‘Hello world’)”);
Eval File
// create a script engine manager
ScriptEngineManager factory = new ScriptEngineManager();
// create a Javascript engine
ScriptEngine engine = factory.getEngineByName(“JavaScript”);
// evaluate Javascript code from given file – specified by first argument
engine.eval( new java.io.FileReader(args[0]));
Eval Variable
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName(“JavaScript”);
File f = new File(“test.txt”);
// expose File object as variable to script
engine.put(“file”,f);
// evaluate a script string. The script accesses “file” variable and calls
method on it
engine.eval(“print(file.getAbsolutePath())”);
Eval Script Function
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName(“JavaScript”);
// Javascript code in a String
String script = “function hello(name) { print(‘Hello’+name); }”;
engine.eval(script);
// javax.script.Invocable is an optional interface. Check whether your
script engine implements or not! Note that the Javascript engine
implements Invocable interface.
Invocable inv = (Invocable) engine;
inv.invokeFunction(“hello”, “Scripting!!”);
Drools
JESS
But their language/spec…
We want..
We are..
Case 1保費計算
• 不同險種會有不同的保費計算方式,公式
和因子也可能會不相同
• 複雜計算方式需要特殊的方式,最好能夠
在不須知道太多的情況下,Plug-In進來
條件 公式 因子
因
子
公
式
畫
面
D
B
其
他
公式:A+B/C-D
因子 A:畫面
B:Database
C:另一個公式X+Y
D:其他系統
X:常數
Y:Database
PlugIn
保費公式設定
模擬保費公式設定
Case 2核保檢核
• 報價轉保單時,有許多企業邏輯需要被檢
核
• 這些邏輯,我們不希望hardcode在程式內
條件
規則 結果
規則 結果
規則 結果
.
.
.
1.單一結果或多組結果
2.根據結果進行後續處理
- DataBase操作
-Java操作
-畫面相關操作
PlugIn
Java
Script
SQL
.
.
.
核保檢核設定
模擬核保檢核設定
測試案例:保單內容
Rule & Engine
Find Match Rules
計算保費處理
核保檢核處理
Execute
缺點
1. 不是使用宣告的方法,而是定義處理過程
2. 複雜的業務邏輯,可能會需要巢狀條件結
構,這會使得Rule難以閱讀且容易出錯
3. 可能需要定義代碼處理決定表,或建立更
好的Rule Engine
4. Multiple Script Language將會難以維護
優點
1. 對開發者來說較直接
2. 物件可由Java或Script內產生並共用
3. Rule可以更加的動態

Weitere ähnliche Inhalte

Ähnlich wie 如何建立企業級應用的商業規則引擎

Playframework + Twitter Bootstrap
Playframework + Twitter BootstrapPlayframework + Twitter Bootstrap
Playframework + Twitter BootstrapKevingo Tsai
 
Scripting Oracle Develop 2007
Scripting Oracle Develop 2007Scripting Oracle Develop 2007
Scripting Oracle Develop 2007Tugdual Grall
 
Data driven testing using Integrant & Spec
Data driven testing using Integrant & SpecData driven testing using Integrant & Spec
Data driven testing using Integrant & SpecLeon Mergen
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務Mu Chun Wang
 
WebSphere App Server vs JBoss vs WebLogic vs Tomcat
WebSphere App Server vs JBoss vs WebLogic vs TomcatWebSphere App Server vs JBoss vs WebLogic vs Tomcat
WebSphere App Server vs JBoss vs WebLogic vs TomcatWASdev Community
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJSYoann Gotthilf
 
Everything as a Code / Александр Тарасов (Одноклассники)
Everything as a Code / Александр Тарасов (Одноклассники)Everything as a Code / Александр Тарасов (Одноклассники)
Everything as a Code / Александр Тарасов (Одноклассники)Ontico
 
Test First, Refresh Second: Web App TDD in Grails
Test First, Refresh Second: Web App TDD in GrailsTest First, Refresh Second: Web App TDD in Grails
Test First, Refresh Second: Web App TDD in GrailsTim Berglund
 
Test First Refresh Second: Test-Driven Development in Grails
Test First Refresh Second: Test-Driven Development in GrailsTest First Refresh Second: Test-Driven Development in Grails
Test First Refresh Second: Test-Driven Development in GrailsTim Berglund
 
Engitec - Minicurso de Django
Engitec - Minicurso de DjangoEngitec - Minicurso de Django
Engitec - Minicurso de DjangoGilson Filho
 
The Role of Python in SPAs (Single-Page Applications)
The Role of Python in SPAs (Single-Page Applications)The Role of Python in SPAs (Single-Page Applications)
The Role of Python in SPAs (Single-Page Applications)David Gibbons
 
JahiaOne - Jahia7: Query and Search API under the Hood
JahiaOne - Jahia7: Query and Search API under the HoodJahiaOne - Jahia7: Query and Search API under the Hood
JahiaOne - Jahia7: Query and Search API under the HoodJahia Solutions Group
 
Groovy on Grails by Ziya Askerov
Groovy on Grails by Ziya AskerovGroovy on Grails by Ziya Askerov
Groovy on Grails by Ziya AskerovVuqar Suleymanov
 

Ähnlich wie 如何建立企業級應用的商業規則引擎 (20)

Playframework + Twitter Bootstrap
Playframework + Twitter BootstrapPlayframework + Twitter Bootstrap
Playframework + Twitter Bootstrap
 
Grails 101
Grails 101Grails 101
Grails 101
 
Scripting Oracle Develop 2007
Scripting Oracle Develop 2007Scripting Oracle Develop 2007
Scripting Oracle Develop 2007
 
Story ofcorespring infodeck
Story ofcorespring infodeckStory ofcorespring infodeck
Story ofcorespring infodeck
 
Data driven testing using Integrant & Spec
Data driven testing using Integrant & SpecData driven testing using Integrant & Spec
Data driven testing using Integrant & Spec
 
Wt unit 2 ppts client sied technology
Wt unit 2 ppts client sied technologyWt unit 2 ppts client sied technology
Wt unit 2 ppts client sied technology
 
Wt unit 2 ppts client side technology
Wt unit 2 ppts client side technologyWt unit 2 ppts client side technology
Wt unit 2 ppts client side technology
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務
 
WebSphere App Server vs JBoss vs WebLogic vs Tomcat
WebSphere App Server vs JBoss vs WebLogic vs TomcatWebSphere App Server vs JBoss vs WebLogic vs Tomcat
WebSphere App Server vs JBoss vs WebLogic vs Tomcat
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
struts
strutsstruts
struts
 
Everything as a Code / Александр Тарасов (Одноклассники)
Everything as a Code / Александр Тарасов (Одноклассники)Everything as a Code / Александр Тарасов (Одноклассники)
Everything as a Code / Александр Тарасов (Одноклассники)
 
Everything as a code
Everything as a codeEverything as a code
Everything as a code
 
Test First, Refresh Second: Web App TDD in Grails
Test First, Refresh Second: Web App TDD in GrailsTest First, Refresh Second: Web App TDD in Grails
Test First, Refresh Second: Web App TDD in Grails
 
Test First Refresh Second: Test-Driven Development in Grails
Test First Refresh Second: Test-Driven Development in GrailsTest First Refresh Second: Test-Driven Development in Grails
Test First Refresh Second: Test-Driven Development in Grails
 
Engitec - Minicurso de Django
Engitec - Minicurso de DjangoEngitec - Minicurso de Django
Engitec - Minicurso de Django
 
The Role of Python in SPAs (Single-Page Applications)
The Role of Python in SPAs (Single-Page Applications)The Role of Python in SPAs (Single-Page Applications)
The Role of Python in SPAs (Single-Page Applications)
 
JahiaOne - Jahia7: Query and Search API under the Hood
JahiaOne - Jahia7: Query and Search API under the HoodJahiaOne - Jahia7: Query and Search API under the Hood
JahiaOne - Jahia7: Query and Search API under the Hood
 
Groovy on Grails by Ziya Askerov
Groovy on Grails by Ziya AskerovGroovy on Grails by Ziya Askerov
Groovy on Grails by Ziya Askerov
 
Grails
GrailsGrails
Grails
 

Kürzlich hochgeladen

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 

Kürzlich hochgeladen (20)

2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 

如何建立企業級應用的商業規則引擎