<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.athico.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-5869426</atom:id><lastBuildDate>Tue, 14 Feb 2012 07:43:50 +0000</lastBuildDate><category>Performance</category><category>compilers</category><category>Conflict Resolution</category><category>Probability</category><category>use case</category><category>competition</category><category>drools webinar</category><category>cookbook</category><category>uncertainty</category><category>aires</category><category>service repository</category><category>Simulation and Testing</category><category>Job</category><category>Testing</category><category>medical</category><category>Time-Sensitive</category><category>GSoC</category><category>AI</category><category>javapolis</category><category>video</category><category>Ad-Hoc</category><category>Expert Systems</category><category>RuleML</category><category>variables</category><category>Business Rules</category><category>Domain Specific Languages</category><category>workshop</category><category>java</category><category>infoQ</category><category>JBoss Rules</category><category>example</category><category>Mind Map</category><category>Rules Engine</category><category>BAM</category><category>DotNet</category><category>Rules</category><category>Business Rules Forum</category><category>Fuzzy</category><category>decision tables</category><category>Boot Camp</category><category>Drools Boot Camp</category><category>interview</category><category>Eclipse</category><category>MicroContainer</category><category>Stream</category><category>designer</category><category>Brazilian</category><category>upgrade tool</category><category>milestone</category><category>BOF</category><category>Seam</category><category>quote</category><category>JDT</category><category>shadow facts</category><category>event</category><category>ORF 2008</category><category>SOA</category><category>Smooks</category><category>GUI</category><category>grammar</category><category>Drools Expert</category><category>sequential</category><category>announcement</category><category>Drools</category><category>buenos</category><category>ESP</category><category>Natural Language</category><category>Camel</category><category>SSL</category><category>jBPM5</category><category>JSON</category><category>Drools Flow</category><category>RuleML 2008</category><category>Rete</category><category>Production Rules Systems</category><category>DRL</category><category>remote</category><category>brms insurance demo standalone</category><category>FactTemplate</category><category>traveling tournament</category><category>BRMS</category><category>MVEL</category><category>Rule Flow</category><category>Open Source</category><category>argentina</category><category>IKVM</category><category>BPMN</category><category>source code</category><category>standards</category><category>machine learning</category><category>image processing</category><category>Backward Chaining.</category><category>Monitoring</category><category>modify block</category><category>GIS</category><category>accumulate</category><category>Drools Fusion</category><category>Codehaus</category><category>JUG</category><category>Rule Authoring</category><category>Negation</category><category>Business Rules Governance</category><category>DynaBeans</category><category>junit</category><category>JFDI</category><category>Rule Engines</category><category>KAMS</category><category>dynamically generated classes</category><category>ORF</category><category>Form Builder</category><category>syntax</category><category>shadow proxies</category><category>BRMS Guvnor Drools</category><category>ANTLR</category><category>Service Manager</category><category>FedEx</category><category>DSL</category><category>Clips</category><category>planner</category><category>traits</category><category>examination</category><category>search space</category><category>Janino</category><category>MySQL</category><category>Web Services</category><category>semantic web</category><category>jBPM</category><category>constraint programming</category><category>generated classes</category><category>Research Network</category><category>algorithm</category><category>cloud</category><category>Life Cycle</category><category>MISMO</category><category>BPEL</category><category>LDAP</category><category>jBPM5 webinar</category><category>Templates</category><category>case management</category><category>android</category><category>persistence</category><category>RIF</category><category>Logic Operators</category><category>relational programming</category><category>Debug</category><category>Jess</category><category>release</category><category>extensibility</category><category>Atom</category><category>Analytics</category><category>Portuguese</category><category>Meetups</category><category>Synasc</category><category>drools puzzle</category><category>Computer Games</category><category>Progress</category><category>JavaOne</category><category>accumulate function</category><category>Programming</category><category>Healthcare</category><category>October Rules Fest</category><category>Guvnor</category><category>SwitchYard</category><category>WordNet</category><category>SBVR</category><category>devoxx</category><category>one</category><category>Drools Chance</category><category>plug tree</category><category>Presentation</category><category>Spring</category><category>Guice</category><category>salaboy</category><category>solver</category><category>Savvion</category><category>OSGi</category><category>http://www.blogger.com/img/blank.gif</category><category>REST</category><category>DSL regexp antlr</category><category>project proposals</category><category>Forward  Chaining</category><category>declarative programming</category><category>videos</category><category>CEP</category><category>book</category><category>API</category><category>brms ajax web</category><category>combinatorial optimization</category><category>tests</category><category>computer vision</category><category>functional programming</category><category>Time</category><category>parser</category><category>droos ide update-site downloads</category><category>expressiveness</category><title>Drools &amp; jBPM</title><description>All things Artificial Intelligence related: Rules, Processes, Events, Agents, Planning, Ontologies and more :)</description><link>http://blog.athico.com/</link><managingEditor>noreply@blogger.com (Mark Proctor)</managingEditor><generator>Blogger</generator><openSearch:totalResults>698</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.athico.com/DroolsRSS" /><feedburner:info uri="droolsrss" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>DroolsRSS</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-1468437191194874530</guid><pubDate>Wed, 08 Feb 2012 09:12:00 +0000</pubDate><atom:updated>2012-02-08T09:12:11.847Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">event</category><category domain="http://www.blogger.com/atom/ns#">BRMS Guvnor Drools</category><category domain="http://www.blogger.com/atom/ns#">planner</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>DeveloperConference 2012 in Brno, Czech Republic 17 - 18 February 2012</title><description>Next week, on Friday 17 February, I 'll be presenting a introduction to Drools, Guvnor and Planner at &lt;a href="http://fedoraproject.org/wiki/DeveloperConference2012"&gt;the DeveloperConference 2012&lt;/a&gt; in Brno, Czech Republic.
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://fedoraproject.org/wiki/DeveloperConference2012" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="862" src="http://fedoraproject.org/w/uploads/3/38/Rdc-2012.png" width="615" /&gt;&lt;/a&gt;&lt;/div&gt;
There are plenty of other interesting JBoss talks, about topics such as CDI, Arquillian Drone, Errai, Infinispan, Hibernate OGM, ... The entrance is free, so join us if you're in the neighborhood.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-1468437191194874530?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=HDjzWgkvofM:TIUVPWtt01g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=HDjzWgkvofM:TIUVPWtt01g:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=HDjzWgkvofM:TIUVPWtt01g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=HDjzWgkvofM:TIUVPWtt01g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=HDjzWgkvofM:TIUVPWtt01g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=HDjzWgkvofM:TIUVPWtt01g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=HDjzWgkvofM:TIUVPWtt01g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=HDjzWgkvofM:TIUVPWtt01g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=HDjzWgkvofM:TIUVPWtt01g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=HDjzWgkvofM:TIUVPWtt01g:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/HDjzWgkvofM" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/HDjzWgkvofM/developerconference-2012-in-brno-czech.html</link><author>noreply@blogger.com (Geoffrey De Smet)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.athico.com/2012/02/developerconference-2012-in-brno-czech.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-6749828155721035131</guid><pubDate>Tue, 07 Feb 2012 18:55:00 +0000</pubDate><atom:updated>2012-02-08T21:57:48.642Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">Presentation</category><category domain="http://www.blogger.com/atom/ns#">jBPM</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Drools &amp; jBPM Info Sheet</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
We've made an Info Sheet that provides an overview of Drools, jBPM and Guvnor. Feel free to download it and hand it out in your public presentations. There are 13 pages in total. You'll need to sign in to slideshare to download. Big text and lots of pretty pictures and very sexy, but not to be used for "extra" curriculum activities ;)&lt;br /&gt;
&lt;a href="http://www.slideshare.net/MarkProctor/drools-jbpm-info-sheet"&gt;http://www.slideshare.net/MarkProctor/drools-jbpm-info-sheet&lt;/a&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-XsvNmjYCW9Y/TzFy-ZQB8fI/AAAAAAAAAqQ/1mo0L91Sbco/s1600/infosheet1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-XsvNmjYCW9Y/TzFy-ZQB8fI/AAAAAAAAAqQ/1mo0L91Sbco/s320/infosheet1.png" width="229" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-6749828155721035131?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=KKcayPhHOIE:KnJfcXCSu0o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=KKcayPhHOIE:KnJfcXCSu0o:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=KKcayPhHOIE:KnJfcXCSu0o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=KKcayPhHOIE:KnJfcXCSu0o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=KKcayPhHOIE:KnJfcXCSu0o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=KKcayPhHOIE:KnJfcXCSu0o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=KKcayPhHOIE:KnJfcXCSu0o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=KKcayPhHOIE:KnJfcXCSu0o:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=KKcayPhHOIE:KnJfcXCSu0o:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=KKcayPhHOIE:KnJfcXCSu0o:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/KKcayPhHOIE" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/KKcayPhHOIE/drools-jbpm-info-sheet.html</link><author>noreply@blogger.com (Mark Proctor)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-XsvNmjYCW9Y/TzFy-ZQB8fI/AAAAAAAAAqQ/1mo0L91Sbco/s72-c/infosheet1.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.athico.com/2012/02/drools-jbpm-info-sheet.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-2400606646731573753</guid><pubDate>Tue, 07 Feb 2012 14:43:00 +0000</pubDate><atom:updated>2012-02-07T14:43:19.210Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">jBPM</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Welcome Alexandre Porcelli</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Alexandre Porcelli has joined the Drools&amp;amp;jBPM team today. Alexandre is an &lt;a href="http://www.antlr.org/"&gt;Antlr &lt;/a&gt;guru and also leads the Open Spotlight project, &lt;a href="http://porcelli.github.com/OpenSpotLight/"&gt;http://porcelli.github.com/OpenSpotLight/&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Alexendre will initially be helping out on the Guvnor work for jBPM, then in a few months time we hope that he'll lead our work around distributed computing.&lt;br /&gt;
&lt;br /&gt;
Alexendre lives in sunny Brazil, you can read more about him &lt;a href="http://www.blogger.com/here,http://porcelli.com.br/"&gt;here,http://porcelli.com.br/&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://a2.twimg.com/profile_images/1130589863/avatar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="314" src="http://a2.twimg.com/profile_images/1130589863/avatar.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-2400606646731573753?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=j5XYzC1uCBk:vD6_peEH1bM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=j5XYzC1uCBk:vD6_peEH1bM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=j5XYzC1uCBk:vD6_peEH1bM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=j5XYzC1uCBk:vD6_peEH1bM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=j5XYzC1uCBk:vD6_peEH1bM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=j5XYzC1uCBk:vD6_peEH1bM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=j5XYzC1uCBk:vD6_peEH1bM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=j5XYzC1uCBk:vD6_peEH1bM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=j5XYzC1uCBk:vD6_peEH1bM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=j5XYzC1uCBk:vD6_peEH1bM:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/j5XYzC1uCBk" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/j5XYzC1uCBk/welcome-alexandre-porcelli.html</link><author>noreply@blogger.com (Mark Proctor)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.athico.com/2012/02/welcome-alexandre-porcelli.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-679027687867670225</guid><pubDate>Tue, 07 Feb 2012 03:16:00 +0000</pubDate><atom:updated>2012-02-07T03:16:38.758Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">Drools Expert</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Wumpus World Lives!!!</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Wumpus world continues to improve and is now fully playable. The UI has a lot more polish now and nearly all of the code has been moved to DRL now, including the swing graphics rendering for the cave and the sensor panels. You'll need to use master head to try it. Java is just used to build the kbase from the drl files and to create the swing panels, buttons and forms. WindowBuilder was used to graphical layout things.&lt;br /&gt;
&lt;br /&gt;
The final thing I have to do is allow for client integration, so that people can write rules to automate the hero. &lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://github.com/droolsjbpm/drools/blob/master/drools-examples/src/main/resources/org/drools/examples/wumpus/init.drl"&gt;https://github.com/droolsjbpm/drools/blob/master/drools-examples/src/main/resources/org/drools/examples/wumpus/init.drl&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://github.com/droolsjbpm/drools/blob/master/drools-examples/src/main/resources/org/drools/examples/wumpus/commands.drl"&gt;https://github.com/droolsjbpm/drools/blob/master/drools-examples/src/main/resources/org/drools/examples/wumpus/commands.drl&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://github.com/droolsjbpm/drools/blob/master/drools-examples/src/main/resources/org/drools/examples/wumpus/collision.drl%20"&gt;https://github.com/droolsjbpm/drools/blob/master/drools-examples/src/main/resources/org/drools/examples/wumpus/collision.drl &lt;/a&gt;&lt;br /&gt;
&lt;a href="https://github.com/droolsjbpm/drools/blob/master/drools-examples/src/main/resources/org/drools/examples/wumpus/score.drl"&gt;https://github.com/droolsjbpm/drools/blob/master/drools-examples/src/main/resources/org/drools/examples/wumpus/score.drl&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://github.com/droolsjbpm/drools/blob/master/drools-examples/src/main/resources/org/drools/examples/wumpus/view/ui.drl"&gt;https://github.com/droolsjbpm/drools/blob/master/drools-examples/src/main/resources/org/drools/examples/wumpus/view/ui.drl&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://github.com/droolsjbpm/drools/blob/master/drools-examples/src/main/resources/org/drools/examples/wumpus/view/paintCave.drl"&gt;https://github.com/droolsjbpm/drools/blob/master/drools-examples/src/main/resources/org/drools/examples/wumpus/view/paintCave.drl&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://github.com/droolsjbpm/drools/blob/master/drools-examples/src/main/resources/org/drools/examples/wumpus/view/paintSensor.drl"&gt;https://github.com/droolsjbpm/drools/blob/master/drools-examples/src/main/resources/org/drools/examples/wumpus/view/paintSensor.drl&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Cave is hidden, playing the game purely with Sensors.
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://2.bp.blogspot.com/-hgzThfa_sik/TzCS2dNOfgI/AAAAAAAAAqA/cfw6t3trQis/s1600/wumpus1.png" imageanchor="1"&gt;&lt;img border="0" height="361" src="http://2.bp.blogspot.com/-hgzThfa_sik/TzCS2dNOfgI/AAAAAAAAAqA/cfw6t3trQis/s400/wumpus1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Cave is now shown, but unvisited rooms are greyed out.
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://1.bp.blogspot.com/-CHNlj_6AaPg/TzCS0ej9pGI/AAAAAAAAApo/JunZB503d2U/s1600/wumpus3.png" imageanchor="1"&gt;&lt;img border="0" height="350" src="http://1.bp.blogspot.com/-CHNlj_6AaPg/TzCS0ej9pGI/AAAAAAAAApo/JunZB503d2U/s400/wumpus3.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Cheating reveals all, I have shot the Wumpus Dead
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://2.bp.blogspot.com/-ai80aKpHv3A/TzCS06FwQtI/AAAAAAAAAp4/TrHgcRlasw0/s1600/wumpus2.png" imageanchor="1"&gt;&lt;img border="0" height="365" src="http://2.bp.blogspot.com/-ai80aKpHv3A/TzCS06FwQtI/AAAAAAAAAp4/TrHgcRlasw0/s400/wumpus2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Window Builder with MigLayout was used to create the panels, buttons and forms&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://4.bp.blogspot.com/-_lYJ5U6s5J8/TzCW-v19CUI/AAAAAAAAAqI/Goy1kWNNtI4/s1600/wumpus_window_builder.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="177" src="http://4.bp.blogspot.com/-_lYJ5U6s5J8/TzCW-v19CUI/AAAAAAAAAqI/Goy1kWNNtI4/s320/wumpus_window_builder.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is the code to incrementally render the cave rooms:
&lt;br /&gt;
&lt;pre class="brush.drl"&gt;function void paintCaveCell(String image, Cell cell, GameView gv, GameUI gui) {
     int rowIndent = 20;
     int colIndent = 5;
     int rowPad = cell.getRow() * gv.getCellPadding();
     int colPad = cell.getCol() * gv.getCellPadding();
     int y = (4 - cell.getRow()) * 50 - rowPad + rowIndent;
     int x = cell.getCol() * 50 + colPad + colIndent;
     
     Graphics caveG = gui.getCavePanel().getCaveG();
     caveG.setColor( Color.WHITE ); // background
     caveG.fillRect( x, y,  gv.getCellWidth(), gv.getCellHeight() );
     caveG.drawImage( ImageIO.read( GameView.class.getResource( image ) ), x, y, gv.getCellHeight(), gv.getCellWidth(), gui.getCavePanel() );
}

rule "Init CaveDirty" when
    not CaveDirty()
then
    insert( new CaveDirty() );
end

rule "Create CompositeImage" when
    $c : Cell()
    not CompositeImageName( cell == $c )
then
    CompositeImageName cin = new CompositeImageName($c, "", "", "", "");
    insert( cin );
end  

rule "Reset CompositeImage" when
    $cin : CompositeImageName()
    not Cell( row == $cin.cell.row, col == $cin.cell.col)
then
    retract( $cin );
end    

rule "Base Paint" when
    $c : Cell()
    $cin : CompositeImageName( cell == $c );
then
end    

rule "Paint Gold" extends "Base Paint" when
    Gold(row == $c.row, col == $c.col)  
then
   modify( $cin ) { gold = "gold" };
end

rule "Paint Empty Gold" extends "Base Paint" when
    not Gold(row == $c.row, col == $c.col)  
then
   modify( $cin ) { gold = "" };
end

rule "Paint Pit" extends "Base Paint" when
    Pit(row == $c.row, col == $c.col)  
then
   modify( $cin ) { pit = "pit" };
end

rule "Paint Empty Pit" extends "Base Paint" when
    not Pit(row == $c.row, col == $c.col)  
then
   modify( $cin ) { pit = "" };
end

rule "Paint Wumpus Alive" extends "Base Paint" when
    Wumpus(alive == true, row == $c.row, col == $c.col)  
then
   modify( $cin ) { wumpus = "wumpus_alive" };
end

rule "Paint Wumpus Dead" extends "Base Paint" when
    Wumpus(alive == false, row == $c.row, col == $c.col)  
then
   modify( $cin ) { wumpus = "wumpus_dead" }
end

rule "Paint Empty Wumpus" extends "Base Paint" when
    not Wumpus(row == $c.row, col == $c.col)  
then
   modify( $cin ) { wumpus = "" }
end


rule "Paint Hero Direction Up" extends "Base Paint" when 
    $h : Hero( direction == Direction.UP, row == $c.row, col == $c.col )
then
     modify( $cin ) { hero = "hero_up" };
end    

rule "Paint Hero Direction Down" extends "Base Paint"  when
    $h : Hero( direction == Direction.DOWN, row == $c.row, col == $c.col  )
then
    modify( $cin ) { hero = "hero_down" };
end   

rule "Paint Hero Direction Left" extends "Base Paint"  when
    $h : Hero( direction == Direction.LEFT, row == $c.row, col == $c.col  )
then
    modify( $cin ) { hero = "hero_left" };
end    

rule "Paint Hero Direction Right" extends "Base Paint" when
    $h : Hero( direction == Direction.RIGHT, row == $c.row, col == $c.col  )
then
    modify( $cin ) { hero = "hero_right" };
end 

rule "Paint Empty Hero" extends "Base Paint" when
    not Hero( row == $c.row, col == $c.col  )
then
    modify( $cin ) { hero = "" };
end   

rule "Paint Hidden Room" when 
    $gui : GameUI( cavePanel != null &amp;amp;&amp;amp; cavePanel.caveG != null  )
    $cd : CaveDirty() @watch(!*)
    $gv : GameView(showAllCells == false)
    $c : Cell(hidden == true) 
then
   paintCaveCell( "hidden_room.png", $c, $gv, $gui);
   modify( $cd ) { dirty = true };
end


rule "Paint Empty Room" when 
   $gui : GameUI( cavePanel != null &amp;amp;&amp;amp; cavePanel.caveG != null )
    $cd : CaveDirty() @watch(!*)   
   ($gv : GameView(showAllCells == true) and $c : Cell() ) or
   ($gv : GameView(showAllCells == false) and $c : Cell(hidden == false) )      
   CompositeImageName( cell == $c, pit == "", wumpus == "", gold == "", hero == "" ) @watch(*)
then
   paintCaveCell( "empty_room.png", $c, $gv, $gui );
   modify( $cd ) { dirty = true };
end 

rule "Paint Non Empty Room" when
   $gui : GameUI( cavePanel != null &amp;amp;&amp;amp; cavePanel.caveG != null )
   $cd : CaveDirty() @watch(!*)   
   ($gv : GameView(showAllCells == true) and $c : Cell() ) or
   ($gv : GameView(showAllCells == false) and $c : Cell(hidden == false) )    
   $cin : CompositeImageName( cell == $c, ( !(hero != "" &amp;amp;&amp;amp; pit != "")  &amp;amp;&amp;amp;  // don't draw a hero on the same square as a pit or an alive wumpus, as the game is over
                                            !(hero != "" &amp;amp;&amp;amp; wumpus == "wumpus_alive") &amp;amp;&amp;amp; 
                                            !(pit == "" &amp;amp;&amp;amp; wumpus == "" &amp;amp;&amp;amp; gold == "" &amp;amp;&amp;amp; hero == "") ) ) @watch(*)
then
    paintCaveCell( $cin.pit + $cin.wumpus + $cin.gold +  $cin.hero + ".png", $cin.cell, $gv, $gui );
    modify( $cd ) { dirty = true };
end

rule "Redraw Cave" no-loop salience -500 when
   $gui : GameUI() 
   $cd : CaveDirty( dirty == true )
then
   $gui.updateCave();
   modify( $cd ) { dirty = false };
end
&lt;/pre&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-679027687867670225?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=drxqfzAX9sA:7pcZDDwAGd4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=drxqfzAX9sA:7pcZDDwAGd4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=drxqfzAX9sA:7pcZDDwAGd4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=drxqfzAX9sA:7pcZDDwAGd4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=drxqfzAX9sA:7pcZDDwAGd4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=drxqfzAX9sA:7pcZDDwAGd4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=drxqfzAX9sA:7pcZDDwAGd4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=drxqfzAX9sA:7pcZDDwAGd4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=drxqfzAX9sA:7pcZDDwAGd4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=drxqfzAX9sA:7pcZDDwAGd4:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/drxqfzAX9sA" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/drxqfzAX9sA/wumpus-world-lives.html</link><author>noreply@blogger.com (Mark Proctor)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-hgzThfa_sik/TzCS2dNOfgI/AAAAAAAAAqA/cfw6t3trQis/s72-c/wumpus1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.athico.com/2012/02/wumpus-world-lives.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-8686174714467479905</guid><pubDate>Fri, 03 Feb 2012 16:30:00 +0000</pubDate><atom:updated>2012-02-03T16:24:06.169Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">cookbook</category><category domain="http://www.blogger.com/atom/ns#">BRMS Guvnor Drools</category><category domain="http://www.blogger.com/atom/ns#">book</category><title>Drools Developer's Cookbook review</title><description>&lt;a href="http://3.bp.blogspot.com/-PgSME24VCXk/TywJ633hQHI/AAAAAAAAAKc/My00jPs-R-Q/s1600/Drools%2BDevelopers%2BCookbook.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 125px; height: 151px;" src="http://3.bp.blogspot.com/-PgSME24VCXk/TywJ633hQHI/AAAAAAAAAKc/My00jPs-R-Q/s320/Drools%2BDevelopers%2BCookbook.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5704945735005454450" /&gt;&lt;/a&gt;&lt;br /&gt;A few weeks ago &lt;b&gt;Packt Publishing&lt;/b&gt; released the &lt;a href="http://link.packtpub.com/wdmKYU"&gt;&lt;b&gt;Drools Developer's Cookbook&lt;/b&gt;&lt;/a&gt;, written by &lt;i&gt;Lucas Amador&lt;/i&gt;. I had the opportunity to review an early draft of the book last year and when I received my copy of the released book I was eager to read it and check out how was it. I am glad to say I am pleasantly surprised.&lt;br /&gt;&lt;br /&gt;Packt is known for publishing many high quality books on open source projects and it has already published 2 other books on Drools, but managed to publish this 3rd book with a completely different perspective and as so, allows readers to choose which ones they would benefit more from.&lt;br /&gt;&lt;br /&gt;While &lt;a href="http://www.packtpub.com/jboss-drools-business-rules/book"&gt;&lt;b&gt;JBoss Drools Business Rules&lt;/b&gt;&lt;/a&gt;, by &lt;i&gt;Paul Browne&lt;/i&gt;, focus its content on higher level rule authoring and an earlier version of Guvnor, &lt;a href="http://www.packtpub.com/drools-jboss-rules-50-developers-guide/book"&gt;&lt;b&gt;Drools JBoss Rules 5.0 Developer's Guide&lt;/b&gt;&lt;/a&gt;, by &lt;i&gt;Michal Bali&lt;/i&gt;, is a deeper tutorial-style reading that builds on the examples from chapter to chapter, detailing how every piece of the puzzle fits together.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://link.packtpub.com/wdmKYU"&gt;&lt;b&gt;Drools Developer's Cookbook&lt;/b&gt;&lt;/a&gt; on the other hand, as the name implies, contains recipes on how to leverage Drools' features to effectively build business solutions. This is an &lt;i&gt;excellent format for those with some knowledge of the platform&lt;/i&gt; and that want a detailed reference on how to use specific features. While the Developer's Guide is more suited for a throughout reading, the cookbook is a good reference material that can be read on a chapter basis in any order the reader wishes.&lt;br /&gt;&lt;br /&gt;Each recipe is divided in usually 3 sections:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;"Getting ready"&lt;/b&gt; details which setup steps are necessary to use the feature/complete the task in that recipe, like for instance, additional jar dependencies or configuration options are required.&lt;/li&gt;&lt;li&gt;&lt;b&gt;"How to do it..."&lt;/b&gt; is a step by step explanation of how to use the feature/complete the task.&lt;/li&gt;&lt;li&gt;&lt;b&gt;"How it works..."&lt;/b&gt; is my favorite section and explains how and why things work the way they do. This is important knowledge that can be leveraged to achieve different goals.&lt;/li&gt;&lt;/ul&gt;Some recipes also have references for additional documentation or information.&lt;br /&gt;&lt;br /&gt;The book covers&lt;a href="http://www.packtpub.com/drools-developers-using-jboss-cookbook/book?utm_source=edsont.com&amp;amp;utm_medium=bookrev&amp;amp;utm_content=blog&amp;amp;utm_campaign=mdb_009715#chapter_0"&gt; an extensive set of components and features&lt;/a&gt;, as can be seen in the table of contents: from the core Drools Expert, to Guvnor, Fusion, Planner, Camel/Spring/JPA integration and even a bit of jBPM. I think the book will be really helpful to a large percentage of the Drools user base.&lt;br /&gt;&lt;br /&gt;Unfortunately, the book is not perfect. There are some minor issues, like some typos in some of the printed examples. The good news is that this is totally offset by the great &lt;a href="http://www.packtpub.com/support"&gt;support Packt&lt;/a&gt; provides to all their published books. The (fixed) &lt;a href="http://www.packtpub.com/support"&gt;source code&lt;/a&gt; is available for download, and I imagine the errata should be soon available as well.&lt;br /&gt;&lt;br /&gt;The over 40 recipes in this book are an excellent resource, and I am sure it will left the readers looking forward for more!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Happy Drooling&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-8686174714467479905?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=0nSxriPK_SY:wE7UtiiDK38:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=0nSxriPK_SY:wE7UtiiDK38:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=0nSxriPK_SY:wE7UtiiDK38:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=0nSxriPK_SY:wE7UtiiDK38:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=0nSxriPK_SY:wE7UtiiDK38:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=0nSxriPK_SY:wE7UtiiDK38:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=0nSxriPK_SY:wE7UtiiDK38:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=0nSxriPK_SY:wE7UtiiDK38:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=0nSxriPK_SY:wE7UtiiDK38:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=0nSxriPK_SY:wE7UtiiDK38:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/0nSxriPK_SY" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/0nSxriPK_SY/drools-developers-cookbook-review.html</link><author>noreply@blogger.com (Edson Tirelli)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-PgSME24VCXk/TywJ633hQHI/AAAAAAAAAKc/My00jPs-R-Q/s72-c/Drools%2BDevelopers%2BCookbook.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.athico.com/2012/02/drools-developers-cookbook-review.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-3304008513685888393</guid><pubDate>Fri, 03 Feb 2012 16:12:00 +0000</pubDate><atom:updated>2012-02-04T08:02:13.677Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">planner</category><title>Traveling Salesman Problem demo with Drools Planner</title><description>Implementing TSP or vehicle routing in &lt;a href="http://www.jboss.org/drools/drools-planner"&gt;Drools Planner&lt;/a&gt; 5.4.0.Beta2 and earlier was difficult. But starting from 5.4.0.CR1, such use cases are easy and far less code to implement. And they are compatible with real-time planning.&lt;br /&gt;
&lt;br /&gt;
Just take a look at the Traveling Salesman Problem (TSP) demo. It shows adding cities in real-time and demonstrates how easy it is to change the constraints:&lt;br /&gt;
&lt;br /&gt;
&lt;iframe width="640" height="480" src="http://www.youtube.com/embed/T5D3hTjZlRc" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;br /&gt;
&lt;br /&gt;
Coming soon: a vehicle routing example and even better scalability.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-3304008513685888393?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=mBaWzwLoyBo:H_fxn6CuqRs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=mBaWzwLoyBo:H_fxn6CuqRs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=mBaWzwLoyBo:H_fxn6CuqRs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=mBaWzwLoyBo:H_fxn6CuqRs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=mBaWzwLoyBo:H_fxn6CuqRs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=mBaWzwLoyBo:H_fxn6CuqRs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=mBaWzwLoyBo:H_fxn6CuqRs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=mBaWzwLoyBo:H_fxn6CuqRs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=mBaWzwLoyBo:H_fxn6CuqRs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=mBaWzwLoyBo:H_fxn6CuqRs:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/mBaWzwLoyBo" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/mBaWzwLoyBo/traveling-salesman-problem-demo-with.html</link><author>noreply@blogger.com (Geoffrey De Smet)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/T5D3hTjZlRc/default.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://blog.athico.com/2012/02/traveling-salesman-problem-demo-with.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-6527926437329810587</guid><pubDate>Thu, 02 Feb 2012 09:56:00 +0000</pubDate><atom:updated>2012-02-02T12:07:23.006Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Drools Cookbook</title><description>&lt;a href="http://link.packtpub.com/ivHAPZ"&gt;http://link.packtpub.com/ivHAPZ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.packtpub.com/sites/default/files/1964OS_Drools%20Developer%E2%80%99s%20Cookbook.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 500px; height: 617px;" src="http://www.packtpub.com/sites/default/files/1964OS_Drools%20Developer%E2%80%99s%20Cookbook.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-6527926437329810587?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=Tz_vd-U8zYI:seYVAdNYM54:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=Tz_vd-U8zYI:seYVAdNYM54:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=Tz_vd-U8zYI:seYVAdNYM54:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=Tz_vd-U8zYI:seYVAdNYM54:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=Tz_vd-U8zYI:seYVAdNYM54:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=Tz_vd-U8zYI:seYVAdNYM54:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=Tz_vd-U8zYI:seYVAdNYM54:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=Tz_vd-U8zYI:seYVAdNYM54:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=Tz_vd-U8zYI:seYVAdNYM54:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=Tz_vd-U8zYI:seYVAdNYM54:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/Tz_vd-U8zYI" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/Tz_vd-U8zYI/drools-cookbook.html</link><author>noreply@blogger.com (Mark Proctor)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.athico.com/2012/02/drools-cookbook.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-7335632684347818078</guid><pubDate>Tue, 31 Jan 2012 13:49:00 +0000</pubDate><atom:updated>2012-01-31T19:05:18.845Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">release</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Drools 5.4.0.Beta 2 released</title><description>We're happy to announce the release of Drools (Expert, Fusion, Planner, Guvnor) &lt;b&gt;5.4.0.Beta2&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Documentation, Release Notes and Downloads are detailed below:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Download the zips from the bottom of &lt;a href="http://www.jboss.org/drools/downloads"&gt;the drools download page&lt;/a&gt;.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;To try out the examples, just unzip one and run a &lt;font style="Courier New&amp;quot;,Courier,monospace;"&gt;runExamples.sh/.bat&lt;/font&gt; script.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;See the JBoss Maven repository for &lt;a href="https://repository.jboss.org/nexus/index.html#nexus-search;gav%7Eorg.drools*%7E%7E5.4.0.Beta2%7E%7E"&gt;a list of all released artifacts&lt;/a&gt;.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;It will be synced to &lt;a href="http://search.maven.org/#search%7Cga%7Beta1%7Corg.drools"&gt;Maven Central&lt;/a&gt; automatically in a couple of hours.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://docs.jboss.org/drools/release/5.4.0.Beta2/droolsjbpm-introduction-docs/html/releaseNotesBeta2.html"&gt;Read the new and noteworthy changes here.&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;Try it out and give us some feed-back (&lt;a href="http://www.jboss.org/drools/lists"&gt;user list&lt;/a&gt;, &lt;a href="https://issues.jboss.org/browse/JBRULES"&gt;issue tracker&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-7335632684347818078?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=hcdggkOrfbA:xWL8JncHxOA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=hcdggkOrfbA:xWL8JncHxOA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=hcdggkOrfbA:xWL8JncHxOA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=hcdggkOrfbA:xWL8JncHxOA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=hcdggkOrfbA:xWL8JncHxOA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=hcdggkOrfbA:xWL8JncHxOA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=hcdggkOrfbA:xWL8JncHxOA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=hcdggkOrfbA:xWL8JncHxOA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=hcdggkOrfbA:xWL8JncHxOA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=hcdggkOrfbA:xWL8JncHxOA:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/hcdggkOrfbA" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/hcdggkOrfbA/drools-540beta-2-released.html</link><author>noreply@blogger.com (Toni Rikkola)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.athico.com/2012/01/drools-540beta-2-released.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-7558107747966527771</guid><pubDate>Thu, 26 Jan 2012 22:15:00 +0000</pubDate><atom:updated>2012-01-26T22:21:07.777Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">Drools Expert</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Wumpus World Update</title><description>I made further progress with Wumpus World today, as previously blogged &lt;a href="http://blog.athico.com/2012/01/wumpus-world.html"&gt;here&lt;/a&gt;. The project is checked into drools-examples, execute "WumpusWorldServer" to run.&lt;br /&gt;-larger sensor icons&lt;br /&gt;-bump and scream sensors added&lt;br /&gt;-left, right buttons now rotate left and rotate right.&lt;br /&gt;-hero faces direction based on rotation&lt;br /&gt;-can now shoot arrows&lt;br /&gt;-wumpus can die&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-87YyR6fjgGo/TyHRPEYSCAI/AAAAAAAAApU/yRPFb5p1r98/s1600/wumpus.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 287px;" src="http://2.bp.blogspot.com/-87YyR6fjgGo/TyHRPEYSCAI/AAAAAAAAApU/yRPFb5p1r98/s400/wumpus.png" alt="" id="BLOGGER_PHOTO_ID_5702068660031588354" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-7558107747966527771?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=m2OqFzqcJE4:v5rokA9yOLg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=m2OqFzqcJE4:v5rokA9yOLg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=m2OqFzqcJE4:v5rokA9yOLg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=m2OqFzqcJE4:v5rokA9yOLg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=m2OqFzqcJE4:v5rokA9yOLg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=m2OqFzqcJE4:v5rokA9yOLg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=m2OqFzqcJE4:v5rokA9yOLg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=m2OqFzqcJE4:v5rokA9yOLg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=m2OqFzqcJE4:v5rokA9yOLg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=m2OqFzqcJE4:v5rokA9yOLg:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/m2OqFzqcJE4" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/m2OqFzqcJE4/wumpus-world-update.html</link><author>noreply@blogger.com (Mark Proctor)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-87YyR6fjgGo/TyHRPEYSCAI/AAAAAAAAApU/yRPFb5p1r98/s72-c/wumpus.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.athico.com/2012/01/wumpus-world-update.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-4428690291256233560</guid><pubDate>Wed, 25 Jan 2012 08:28:00 +0000</pubDate><atom:updated>2012-01-25T09:18:13.384Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">Drools Expert</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Wumpus World</title><description>I've just committed a working version of Wumpus World, an AI example covered in in the book "Artificial Intelligence : A Modern Approach". It's not complete yet, as I still need to add the ability to shoot arrows and to clumb out of the cave. But the rest of it is there and working.&lt;br /&gt;&lt;br /&gt;When the game first starst all the cells are greyed out. As you walk around they become visible. The cave has pitts, a wumpus and gold. When you are next to a pittt you will feel a breeze, when you are next to the wumpus you will smell a stench and see glitter when next to gold. The sensor icons are shown above the move buttons. If you walk into a pitt or the wumpus, you die.&lt;br /&gt;&lt;br /&gt;Here are the slides that I used in my presentation for Wumpus World, along with a demo, at Judcon India 2012. The code will be part of 5.4 beta 2 going out today/tomorrow.&lt;br /&gt;&lt;br /&gt;A more detailed overview of Wumpus World can be found &lt;a href="http://www.cis.temple.edu/%7Eingargio/cis587/readings/wumpus.shtml"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-39kCnbM0UTk/Tx-_AFR-4kI/AAAAAAAAAoY/F2amwOz40ts/s1600/wumpus1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/-39kCnbM0UTk/Tx-_AFR-4kI/AAAAAAAAAoY/F2amwOz40ts/s400/wumpus1.png" alt="" id="BLOGGER_PHOTO_ID_5701485661412844098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-pu7bI4e0zFo/Tx-_AX1uFOI/AAAAAAAAAoo/zKiBHn53gwY/s1600/wumpus2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 303px;" src="http://1.bp.blogspot.com/-pu7bI4e0zFo/Tx-_AX1uFOI/AAAAAAAAAoo/zKiBHn53gwY/s400/wumpus2.png" alt="" id="BLOGGER_PHOTO_ID_5701485666394576098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-XNJSAWqIeLw/Tx-_A281lkI/AAAAAAAAAow/URA0UlMozf0/s1600/wumpus3.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 223px;" src="http://2.bp.blogspot.com/-XNJSAWqIeLw/Tx-_A281lkI/AAAAAAAAAow/URA0UlMozf0/s400/wumpus3.png" alt="" id="BLOGGER_PHOTO_ID_5701485674745927234" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-rNyfv1C79m0/Tx-_BG4XYRI/AAAAAAAAAo8/ODfeev1nV2k/s1600/wumpus4.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 209px;" src="http://1.bp.blogspot.com/-rNyfv1C79m0/Tx-_BG4XYRI/AAAAAAAAAo8/ODfeev1nV2k/s400/wumpus4.png" alt="" id="BLOGGER_PHOTO_ID_5701485679022137618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-1fxPWA4K_yM/Tx-_BbyeFQI/AAAAAAAAApE/sqxYR_1bVAk/s1600/wumpus5.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 276px;" src="http://1.bp.blogspot.com/-1fxPWA4K_yM/Tx-_BbyeFQI/AAAAAAAAApE/sqxYR_1bVAk/s400/wumpus5.png" alt="" id="BLOGGER_PHOTO_ID_5701485684634555650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;asdf&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-4428690291256233560?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=FNUS7ZgSmmo:oMUxeGKzYk8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=FNUS7ZgSmmo:oMUxeGKzYk8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=FNUS7ZgSmmo:oMUxeGKzYk8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=FNUS7ZgSmmo:oMUxeGKzYk8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=FNUS7ZgSmmo:oMUxeGKzYk8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=FNUS7ZgSmmo:oMUxeGKzYk8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=FNUS7ZgSmmo:oMUxeGKzYk8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=FNUS7ZgSmmo:oMUxeGKzYk8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=FNUS7ZgSmmo:oMUxeGKzYk8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=FNUS7ZgSmmo:oMUxeGKzYk8:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/FNUS7ZgSmmo" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/FNUS7ZgSmmo/wumpus-world.html</link><author>noreply@blogger.com (Mark Proctor)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-39kCnbM0UTk/Tx-_AFR-4kI/AAAAAAAAAoY/F2amwOz40ts/s72-c/wumpus1.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.athico.com/2012/01/wumpus-world.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-7917265391200746341</guid><pubDate>Mon, 23 Jan 2012 10:04:00 +0000</pubDate><atom:updated>2012-01-23T11:50:34.990Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">decision tables</category><category domain="http://www.blogger.com/atom/ns#">Guvnor</category><title>Guided Decision Tables - An update</title><description>The guided decision table editor in Guvnor has come a long way since it was first added to Guvnor in 2008 so I thought it worth while consolidating the efforts we've made into a short summary so those unfamiliar with recent developments can re-consider what a powerful tool Guvnor now posses.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;The editor in 2008&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-BxM1PUuCzo8/Tx00R6Ta8FI/AAAAAAAAAf0/BNB3DoyCBZs/s1600/WebDT.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 167px;" src="http://1.bp.blogspot.com/-BxM1PUuCzo8/Tx00R6Ta8FI/AAAAAAAAAf0/BNB3DoyCBZs/s400/WebDT.png" alt="" id="BLOGGER_PHOTO_ID_5700770185634050130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Complete re-write&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When Guvnor moved from GWT-EXT to vanilla GWT we took the opportunity to re-write the entire editor. GWT's table widgets did not offer the flexibility we wanted to provide users in their authoring environment: We wanted users to be able to quickly and easily build tables enabling them to concentrate on their rules rather than data-entry. Thus the new editor was born offering keyboard or mouse navigation, in-cell editing together with merging and grouping of cells.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;The editor as it is today&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-Sx0Sdb3vum8/Tx04faYRVdI/AAAAAAAAAgA/O_5I6KEf-S4/s1600/dtable-extended-entry.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 119px;" src="http://2.bp.blogspot.com/-Sx0Sdb3vum8/Tx04faYRVdI/AAAAAAAAAgA/O_5I6KEf-S4/s400/dtable-extended-entry.png" alt="" id="BLOGGER_PHOTO_ID_5700774815629137362" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Guided construction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To make the initial definition process as pain-free as possible we added a Wizard to walk users through creation. The Wizard also offers users the ability to generate an expanded form table.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;The wizard&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-kncuDbqQ-Pk/Tx08l1QU-EI/AAAAAAAAAgw/wC7kN1AFsZk/s1600/dtable-wizard-defining.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 228px;" src="http://3.bp.blogspot.com/-kncuDbqQ-Pk/Tx08l1QU-EI/AAAAAAAAAgw/wC7kN1AFsZk/s400/dtable-wizard-defining.png" alt="" id="BLOGGER_PHOTO_ID_5700779323969304642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Merging&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Merging of cells combines cells with identical values into one; thus providing a quick way to change the value of multiple cells in a single operation (of course, you could equally select multiple-cells with either a mouse-drag operation or keyboard but we felt merging minimized the process). Merging was also the precursor to grouping of cells, a powerful facility to collapse sections of the table whilst authoring.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Merged cells&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-sG0Fl4tT1Mc/Tx05orknLnI/AAAAAAAAAgM/ApL6mRmR_-U/s1600/dtable-merged.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 117px;" src="http://1.bp.blogspot.com/-sG0Fl4tT1Mc/Tx05orknLnI/AAAAAAAAAgM/ApL6mRmR_-U/s400/dtable-merged.png" alt="" id="BLOGGER_PHOTO_ID_5700776074374753906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Grouping&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Merged cells can be collapsed into one. All editing operations continue to work as normal: copying-pasting rows and editing cell values etc. The only difference being that you can effectively hide sections of the table. Copying and pasting a grouped row also offers a convenient way to duplicate sections of the table (before editing as appropriate).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Grouped cells&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-ZlVd0B-X7Lo/Tx06l7gxq4I/AAAAAAAAAgY/pKCUvwe1bqE/s1600/dtable-grouped.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 105px;" src="http://4.bp.blogspot.com/-ZlVd0B-X7Lo/Tx06l7gxq4I/AAAAAAAAAgY/pKCUvwe1bqE/s400/dtable-grouped.png" alt="" id="BLOGGER_PHOTO_ID_5700777126625651586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Extended and Limited Entry&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What type of decision table editor would we have without offering both Extended Entry and Limited Entry? Extended entry allows constraint and action values to be defined in the table body; whereas Limited entry moves the entire definition to the column itself with the body simply allowing the user to define which constraints and/or actions apply.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Limited Entry&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-hmFjfH3hKs0/Tx07ty866bI/AAAAAAAAAgk/xvZiXTbF86I/s1600/dtable-limited-entry.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 94px;" src="http://1.bp.blogspot.com/-hmFjfH3hKs0/Tx07ty866bI/AAAAAAAAAgk/xvZiXTbF86I/s400/dtable-limited-entry.png" alt="" id="BLOGGER_PHOTO_ID_5700778361278359986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;Analysis&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Support has been added to detect mistakes in your decision table. Currently we detect 2 types of problem and want to add many more.&lt;ul&gt;&lt;li&gt;Impossible matches&lt;/li&gt;&lt;li&gt;Conflict detection&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Conflict detection&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-pT3Xb9GmO4M/Tx1AbAomUtI/AAAAAAAAAhI/B7ZApFB1dzo/s1600/conflictingMatch2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 94px;" src="http://2.bp.blogspot.com/-pT3Xb9GmO4M/Tx1AbAomUtI/AAAAAAAAAhI/B7ZApFB1dzo/s400/conflictingMatch2.png" alt="" id="BLOGGER_PHOTO_ID_5700783536091845330" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Integration of jBPM work items&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Rules are frequently used from within jBPM to drive dynamic processes. What better then than providing a means for jBPM Work Items to be used in your rules' consequences? Work Item input parameters can be bound to Facts or their properties and likewise output parameters used to populate Facts.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Use of BRL fragments&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Column definitions have historically only been able to offer a thin veil of abstraction. With the introduction of BRL fragments, columns can be defined using the full range of Guvnor's guided rule authoring capabilities (including DSL) which, coupled with Limited Entry, allows a higher level of abstraction to be realized.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;A BRL fragment column&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-FPa-ozBEU60/Tx1DTWBjmgI/AAAAAAAAAhU/B_EkB8ZXbHA/s1600/dtable-brl-condition.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 187px;" src="http://4.bp.blogspot.com/-FPa-ozBEU60/Tx1DTWBjmgI/AAAAAAAAAhU/B_EkB8ZXbHA/s400/dtable-brl-condition.png" alt="" id="BLOGGER_PHOTO_ID_5700786702929598978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;Roadmap&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Whilst, you might agree, significant progress has been made made there is still a long way to go. There still is a tremendous amount of work we want to complete before feeling our decision table offering is as complete as we'd like.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Round-trip between Excel and Guvnor&lt;/li&gt;&lt;li&gt;Improved integration of V&amp;amp;V to provide visual feedback&lt;/li&gt;&lt;li&gt;Further V&amp;amp;V to check conflict, completeness, ambiguity, subsumption etc&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Expansion and contraction&lt;/li&gt;&lt;li&gt;Enforcement of multi-hit and single-hit variants&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Typed input of default values and lists of permitted values for Conditions&lt;/li&gt;&lt;li&gt;Pluggable editors for domain types&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Column and row drag and drop&lt;/li&gt;&lt;li&gt;Horizontal decision table&lt;/li&gt;&lt;li&gt;Integration of WorkingSets&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-7917265391200746341?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=M_2IW1LSf4o:70C8lNykb5Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=M_2IW1LSf4o:70C8lNykb5Q:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=M_2IW1LSf4o:70C8lNykb5Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=M_2IW1LSf4o:70C8lNykb5Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=M_2IW1LSf4o:70C8lNykb5Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=M_2IW1LSf4o:70C8lNykb5Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=M_2IW1LSf4o:70C8lNykb5Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=M_2IW1LSf4o:70C8lNykb5Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=M_2IW1LSf4o:70C8lNykb5Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=M_2IW1LSf4o:70C8lNykb5Q:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/M_2IW1LSf4o" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/M_2IW1LSf4o/guided-decision-tables-update.html</link><author>noreply@blogger.com (Michael Anstis)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-BxM1PUuCzo8/Tx00R6Ta8FI/AAAAAAAAAf0/BNB3DoyCBZs/s72-c/WebDT.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://blog.athico.com/2012/01/guided-decision-tables-update.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-5372317788359262465</guid><pubDate>Fri, 20 Jan 2012 14:31:00 +0000</pubDate><atom:updated>2012-01-20T14:31:32.099Z</atom:updated><title>jBPM Form Builder roadmap</title><description>Greetings from Argentina. This post will try to cover a general view of where the &lt;a href="https://github.com/marianbuenosayres/jbpm/tree/master/jbpm-gwt/jbpm-gwt-form-builder"&gt;form builder&lt;/a&gt; is right now and where it is going to be in the near future. You can get a current status view from the video below:&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="480" mozallowfullscreen="" src="http://player.vimeo.com/video/35336264?title=0&amp;amp;byline=0&amp;amp;portrait=0" webkitallowfullscreen="" width="640"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
On this video you can see a great deal of how the form builder works today. It doesn't cover the jBPM console integration part or the automatic form generation option, but it allows you to see how users will experience working with the form builder. To download the project, you can find it in the following locations&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Nightly builds&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/marianbuenosayres/jbpm"&gt;https://github.com/marianbuenosayres/jbpm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/marianbuenosayres/guvnor"&gt;https://github.com/marianbuenosayres/guvnor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
In the next few days, I'll start keeping a&lt;b&gt; stable release&lt;/b&gt; on this other address as well:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/marianbuenosayres2/jbpm"&gt;https://github.com/marianbuenosayres2/jbpm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/marianbuenosayres2/guvnor"&gt;https://github.com/marianbuenosayres2/guvnor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Feel free to download, comment or join. That pretty much covers where the form builder is right now. As to where it is heading, here's an initial roadmap&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;jBPM Form Builder Roadmap&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Adding HTML5 templates:&lt;/b&gt; Current items work with pure GWT and HTML4 for Freemarker. The idea is to build a new renderer that will allow users to export to Freemarker as well, but allowing them to export using HTML5 instead of HTML4 to create the forms. The idea as well is to create as many menu options to properly cover HTML5 capabilities, such as audio and video tags, menus, fieldsets and so on.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Adding new validations:&lt;/b&gt; Current validations cover basic concepts, like number or email validation. The idea is to expand and improve validation definitions, in order to allow both client side and server side validation to any level of complexity. Among new validations that are thought to be added, there will be regular expression validation, multi-field validations (applied directly to the form), and rules-based validation (in order to define a ruleflow-group specially to validate the correctness of input data)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Adding script helpers to add dynamic ui components on client side:&lt;/b&gt; Script helpers are shown in the video above. They allow a user with very little knowledge of javascript to create scripting solutions for UI component's event handling. The idea is to create a new script helper to allow javascript to add a new visual component on a particular layout and layout position when an event happens.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Cleaning up effects and form items library:&lt;/b&gt; Current implementations of form items (the UI components you drop on your form) and form effects (the actions available when you right click on a form item) are done in a way that could be made configurable with a proper refactor. The whole idea is to make it more easily extensible, minimizing the amount of code to be added to create a right click action for UI components, or a UI component itself.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Adding tests for effects and form items library:&lt;/b&gt; Along with the previous item, some refactoring will be made to allow a better separation of display logic from actions logic, in order to create better test prepareness on the code side. Along with that, proper tests will be implemented for the form items and effects library.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Adding server validation to the generated form's API:&lt;/b&gt; Extension of the form utility API used from jBPM console, to handle validations on server side.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Adding server interpretation of complex objects to the generated form's API:&lt;/b&gt; Currently, all form submit responses are treated like a map of simple data. The idea is to create complex object associations to particular paths in the form definition, in order to create the proper objects on submit time. This will benefit both user task definitions and rule-based form validations.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Adding template management for complex objects for the generated form's inputs:&lt;/b&gt; The previous item covers submit to server rendering of request data, from simple data types to complex data types. This item covers the other way around, for when a user task is given a complex type and needs to decompose it to make it available for form input data. It will allow the user to define paths within an object when defining form inputs.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Improvement of properties edition panel to add better coverage of properties for form items:&lt;/b&gt; This comes in hand with item 4. Once a proper management of form item properties is done, there will be a need for a better way of editing such properties.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Improvement on tree and edition panel visualization: &lt;/b&gt;Bug fixing and visual highlighting in the current form are two of the main things to be tackled by this bullet.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Allow switching layouts once they're filled without losing content:&lt;/b&gt; Currently, once you define a layout and start adding content to it, the only way to change layouts is to create a new one and move all the content manually. This item is thought to be able to do that automatically.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Adding script helpers to allow onEvent simple validations on client side:&lt;/b&gt; Along with validation library expansion and server validation API, this item is thought to allow some validations to happen on the client side, to be handled on particular events (i.e. like on the change of value of an input field)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Pagination items:&lt;/b&gt; Create UI components that would allow to create very large forms within several pages, all part of the same form.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Definition of a standard page layout for a given user or role:&lt;/b&gt; Most companies have a template structure for most of their forms (wether it has a logo on a particular place, a standard stylesheet, etc). The idea is to allow designers to define such page layout and force its use to either some people or a group of people within the company.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Definition of standard UI visualization strategies for particular types of data: &lt;/b&gt;This is to aid the automatic form generation. The idea is to allow users to define, for example, the standard way to create visual content for Strings, Integers, Booleans and so on. It should cover complex data types as well.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;New translators and renderers for JSF, XUL, Android, IPhone and Swing:&lt;/b&gt; Among other technologies, this would be a nice subset to cover. The order of the technologies and the omission of any don't express any priority whatsoever.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Adding effects to allow loading contents from an ajax script or from an array variable:&lt;/b&gt; This way, content from a form could be loaded from an external source from the client side.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Importing of inputs from other external sources: &lt;/b&gt;Right now the only way to import inputs on the IO Data tab is to have them defined inside a BPMN2 process. The idea is to be able to take them from a server invocation, a user file, or any other way. This will also allow to define forms for other platforms different than the BPM engine.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
Cheers,&lt;br /&gt;
Mariano&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-5372317788359262465?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=wIYQ0wpad-k:Nm6oihLtJOE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=wIYQ0wpad-k:Nm6oihLtJOE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=wIYQ0wpad-k:Nm6oihLtJOE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=wIYQ0wpad-k:Nm6oihLtJOE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=wIYQ0wpad-k:Nm6oihLtJOE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=wIYQ0wpad-k:Nm6oihLtJOE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=wIYQ0wpad-k:Nm6oihLtJOE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=wIYQ0wpad-k:Nm6oihLtJOE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=wIYQ0wpad-k:Nm6oihLtJOE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=wIYQ0wpad-k:Nm6oihLtJOE:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/wIYQ0wpad-k" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/wIYQ0wpad-k/jbpm-form-builder-roadmap.html</link><author>noreply@blogger.com (Marian Buenosayres)</author><thr:total>33</thr:total><feedburner:origLink>http://blog.athico.com/2012/01/jbpm-form-builder-roadmap.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-3088334808662799702</guid><pubDate>Thu, 19 Jan 2012 16:26:00 +0000</pubDate><atom:updated>2012-01-19T16:56:25.531Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">decision tables</category><category domain="http://www.blogger.com/atom/ns#">Guvnor</category><title>Guided Decision Table - Copying\pasting rows</title><description>Before starting the next big feature, I relaxed a bit (Mark will kill me ;-) ) and added  the ability to copy and paste rows in the guided Decision Table editor  in Guvnor.&lt;br /&gt;&lt;br /&gt;This feature comes to the Template Data grid for  free.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-1QLI4fWkSps/TxhGXdoYP1I/AAAAAAAAAfY/q0ZSNksteCM/s1600/Screenshot.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 388px; height: 188px;" src="http://4.bp.blogspot.com/-1QLI4fWkSps/TxhGXdoYP1I/AAAAAAAAAfY/q0ZSNksteCM/s400/Screenshot.png" alt="" id="BLOGGER_PHOTO_ID_5699382697342287698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Video &lt;a href="http://vimeo.com/35323602"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-3088334808662799702?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=TTC8Qqeazc4:wGSGLuz2D4s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=TTC8Qqeazc4:wGSGLuz2D4s:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=TTC8Qqeazc4:wGSGLuz2D4s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=TTC8Qqeazc4:wGSGLuz2D4s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=TTC8Qqeazc4:wGSGLuz2D4s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=TTC8Qqeazc4:wGSGLuz2D4s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=TTC8Qqeazc4:wGSGLuz2D4s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=TTC8Qqeazc4:wGSGLuz2D4s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=TTC8Qqeazc4:wGSGLuz2D4s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=TTC8Qqeazc4:wGSGLuz2D4s:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/TTC8Qqeazc4" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/TTC8Qqeazc4/guided-decision-table-copyingpasting.html</link><author>noreply@blogger.com (Michael Anstis)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-1QLI4fWkSps/TxhGXdoYP1I/AAAAAAAAAfY/q0ZSNksteCM/s72-c/Screenshot.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.athico.com/2012/01/guided-decision-table-copyingpasting.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-1001767331887469253</guid><pubDate>Thu, 19 Jan 2012 03:38:00 +0000</pubDate><atom:updated>2012-01-19T03:45:11.187Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">Drools Expert</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Project Idea: Debug Helper</title><description>Have a great project for any intrepid rule exlorers. The project itself  is not too difficult and will make it really easy for people to get an  idea for what is going on inside of the engine. The below is an early  concept idea sketched out, don't take it as a spec to be rigidly  followed :) You know where to find us if you want mentoring on this task:&lt;br /&gt;&lt;a href="http://www.jboss.org/drools/irc"&gt;http://www.jboss.org/drools/irc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;While the rule itself is named, patterns are not. By allowing patterns  themselves to take on ids, we can specify capture points. This is  already possible for rule terminal nodes via listeners for rule  activation, but users would still need to write their own handlers. The  proposal here is to write a utility that will capture propagations  during a given start/stop period that users can later inspect for both  activations and join attempts. This will allow users to know exactly  what is happening underneath.&lt;br /&gt;&lt;br /&gt;Blow shows a rule with 3 potential capture points:&lt;br /&gt;&lt;pre&gt;package pkg1&lt;br /&gt;&lt;br /&gt;rule r1 when then&lt;br /&gt;   Person( name == "xxx" ) @id(p1)&lt;br /&gt;   Location( name == "xxx" ) @id(l1)&lt;br /&gt;then&lt;br /&gt;end&lt;/pre&gt;1) The terminal node, via the rule name.&lt;br /&gt;2) p1&lt;br /&gt;2) l1&lt;br /&gt;&lt;br /&gt;The idea is to be able to turn on monitor, that has a start(), stop()  and clear() methods. When started it will capture the insert, update,  retract propagations. Further it should be possible to write assertion  utility to assert on the state of the captured information.&lt;br /&gt;&lt;br /&gt;When capture is turned on for a given capture point it will record a  List of instances. As different nodes have different data, there is a  base node and a child node. Every time a propagation happens an instance  is created and added to the montior representing the current state.&lt;pre&gt;BaseCapture&lt;br /&gt;   NodeType nodeType       // enum for join, exists, not etc to allow  for casting to correct node&lt;br /&gt;   String nodeName           // enum for join, exists, not etc&lt;br /&gt;   Collection&lt;br /&gt;&lt;rule&gt; rules   // Rules is a collection, as the node  might be shared&lt;br /&gt;   Activation activation      // Activation at the root of the WM  operation (may be null, if the acion came from outside of the wm).&lt;br /&gt;   FactHandle[] f                // fact at the root of the working  memory operation&lt;br /&gt;   FactHandle[] fh              // fact[] that entered the node&lt;br /&gt;&lt;br /&gt;JoinCaptire extends BaseCapture&lt;br /&gt;   Direction direction              // Left/Right enum&lt;br /&gt;   FactHandle[] successJoins // the opposite fact handles that were  successfully joined with, during this montioring session&lt;br /&gt;   FactHandle[] failedJoins    // the opposite fact handles that were  unsuccessfully joined with, during this monitoring session.&lt;br /&gt;                                                //Note if the  propagation was from the left the join arrays will all be an length of 1.&lt;br /&gt;RulePropagation extends BasePropagation&lt;br /&gt;   RuleStatus status        // Matched, UnMatched, Fired&lt;/pre&gt;For example lets say I want to monitor the propagations on l1 and r1,  that happens during two working memory actions. I can do the following:&lt;pre&gt;ksession.insert( new Person("darth"));&lt;br /&gt;fh = ksession.insert( new Location("death star));&lt;br /&gt;NodeMonitor l1monitor = ksession.getMonitor("pkg1/r1/l1")&lt;br /&gt;NodeMonitor r1monitor = ksession.getMonitor("pkg1/r1")&lt;br /&gt;l1monitor.start();&lt;br /&gt;r1monitor.start();&lt;br /&gt;ksession.insert( new Person("yoda));&lt;br /&gt;ksession.retract( fh );&lt;br /&gt;l2monitor.start();&lt;br /&gt;r2monitor.start();&lt;br /&gt;&lt;br /&gt;List&lt;joincapture&gt; props = l1monitor.getResults(JoinCapture.class);&lt;br /&gt;List&lt;rulecapture&gt; props = r1monitor.getResults(RuleCapture.class);&lt;/rulecapture&gt;&lt;/joincapture&gt;&lt;/pre&gt;l1monitor will show left propagation for yoda and a successful join for  death star&lt;br /&gt;r1 will have two entries. It will show a match (activation creation) but  it will also show an unmatch, due to the retract.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-1001767331887469253?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=ZJkXbgG1mcI:O_nVk491ohE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=ZJkXbgG1mcI:O_nVk491ohE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=ZJkXbgG1mcI:O_nVk491ohE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=ZJkXbgG1mcI:O_nVk491ohE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=ZJkXbgG1mcI:O_nVk491ohE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=ZJkXbgG1mcI:O_nVk491ohE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=ZJkXbgG1mcI:O_nVk491ohE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=ZJkXbgG1mcI:O_nVk491ohE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=ZJkXbgG1mcI:O_nVk491ohE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=ZJkXbgG1mcI:O_nVk491ohE:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/ZJkXbgG1mcI" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/ZJkXbgG1mcI/project-idea-debug-helper.html</link><author>noreply@blogger.com (Mark Proctor)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.athico.com/2012/01/project-idea-debug-helper.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-5198419454324301656</guid><pubDate>Wed, 18 Jan 2012 00:27:00 +0000</pubDate><atom:updated>2012-01-18T00:30:51.204Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">Drools Expert</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Fine Grained Property Change Listeners (Slot Specific)  (Mario Fusco)</title><description>&lt;div class="moz-text-html" lang="x-unicode"&gt;Just a quick  recap of what I did until now to check if we are all on the same page  and also agree with the naming convention I used.&lt;br /&gt;&lt;br /&gt;The property  specific feature is off by default in order to make the behavior of the  rule engine backward compatible with the former releases. If you want to  activate it on a specific bean you have to annotate it with  @propSpecific. This annotation works both on drl type declarations:&lt;br /&gt;&lt;br /&gt;declare Person&lt;br /&gt;   @propSpecific&lt;br /&gt;   firstName : String&lt;br /&gt;   lastName : String&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;and on Java classes:&lt;br /&gt;&lt;br /&gt;@PropSpecific&lt;br /&gt;public static class Person {&lt;br /&gt;   private String firstName;&lt;br /&gt;   private String lastName;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Moreover on Java classes you can also annotate any method to  say that its invocation actually modifies other properties. For instance  in the former Person class you could have a method like:&lt;br /&gt;&lt;br /&gt;@Modifies( "firstName, lastName" )&lt;br /&gt;public void setName(String name) {&lt;br /&gt;   String[] names = name.split("\\s");&lt;br /&gt;   this.firstName = names[0];&lt;br /&gt;   this.lastName = names[1];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;That means that if a rule has a RHS like the following:&lt;br /&gt;&lt;br /&gt;modify($person) { setName("Mario Fusco") }&lt;br /&gt;&lt;br /&gt;it  will correctly recognize that both the firstName and lastName have been  modified and act accordingly. Of course the @Modifies annotation on a  method has no effect if the declaring class isn't  annotated with  @PropSpecific.&lt;br /&gt;&lt;br /&gt;The third annotation I have introduced is on patterns and allows you  to modify the inferred set of properties "listened" by it. So, for  example, you can annotate a pattern in the LHS of a rule like:&lt;br /&gt;&lt;br /&gt;Person(  firstName == $expectedFirstName ) @watch( lastName ) // --&amp;gt; listens  for changes on both firstName (inferred) and lastName&lt;br /&gt;Person( firstName == $expectedFirstName ) @watch( * ) // --&amp;gt;  listens for all the properties of the Person bean&lt;br /&gt;Person( firstName  == $expectedFirstName ) @watch( lastName, !firstName ) // --&amp;gt; listens  for changes on lastName and explicitly exclude firstName&lt;br /&gt;Person( firstName == $expectedFirstName ) @watch( *, !age )  // --&amp;gt; listens for changes on all the properties except the age one&lt;br /&gt;&lt;br /&gt;Once again this annotation has no effect if the corresponding pattern's type hasn't been annotated with @PropSpecific.&lt;br /&gt;&lt;br /&gt;I've  almost finished with the development of this feature (at the moment I  am missing the compile-time check of the properties named in the @watch  annotation together with some more exhaustive tests), so if you think  that I misunderstood something or there is room for any improvement (or  you just don't like the annotation's names I chose) please let me know  as soon as possible.&lt;br /&gt;&lt;br /&gt;Mario&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-5198419454324301656?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=Tyamil8D-8E:GMTtYoImDRo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=Tyamil8D-8E:GMTtYoImDRo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=Tyamil8D-8E:GMTtYoImDRo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=Tyamil8D-8E:GMTtYoImDRo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=Tyamil8D-8E:GMTtYoImDRo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=Tyamil8D-8E:GMTtYoImDRo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=Tyamil8D-8E:GMTtYoImDRo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=Tyamil8D-8E:GMTtYoImDRo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=Tyamil8D-8E:GMTtYoImDRo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=Tyamil8D-8E:GMTtYoImDRo:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/Tyamil8D-8E" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/Tyamil8D-8E/fine-grained-property-change-listeners_18.html</link><author>noreply@blogger.com (Mark Proctor)</author><thr:total>2</thr:total><feedburner:origLink>http://blog.athico.com/2012/01/fine-grained-property-change-listeners_18.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-5536022280336396167</guid><pubDate>Fri, 13 Jan 2012 22:30:00 +0000</pubDate><atom:updated>2012-01-13T22:32:37.237Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">Drools Expert</category><category domain="http://www.blogger.com/atom/ns#">Rule Engines</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Fine Grained Property Change Listeners (Slot Specific)</title><description>Mario just got a first cut working for fine grained property change listeners. Previously when you call update() it will trigger revaluation of all Patterns of the matching object type in the knowledeg base.&lt;br /&gt;&lt;br /&gt;As some have found this can be a problem, forcing you to split up your objects into smaller 1 to 1 objects, to avoid unwanted evaluation of objects - i.e. recursion or excessive evaluation problems.&lt;br /&gt;&lt;br /&gt;The new approach now means the pattern's will only react to fields constrained or bound inside of the pattern. This will help with performance and recursion and avoid artificial object splitting.  We previously discussed this here:&lt;br /&gt;&lt;a href="http://blog.athico.com/2010/07/slot-specific-and-refraction.html"&gt;http://blog.athico.com/2010/07/slot-specific-and-refraction.html&lt;/a&gt;&lt;br /&gt;You can see the unit test here:&lt;br /&gt;&lt;a href="https://github.com/droolsjbpm/drools/blob/ca55c78429cbc0f14167c604c413cdc3faaf6988/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java"&gt;https://github.com/droolsjbpm/drools/blob/ca55c78429cbc0f14167c604c413cdc3faaf6988/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The implementation is bit mask based, so very efficient. When the engine executes a modify statement it uses a bit mask of fields being changed, the pattern will only respond if it has an overlapping bit mask. This does not work for update(), and is one of the reason why we promote modify() as it encapsulates the field changes within the statement. You can follow Mario's chain of work on this at his github activity feed:&lt;br /&gt;&lt;a href="https://github.com/mariofusco.atom"&gt;https://github.com/mariofusco.atom&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The adventerous amoung you can pick this up from hudson, or from maven, and start playing now. My hope is that this will make drools much easier to use:&lt;br /&gt;&lt;a href="https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/drools-distribution/target/"&gt;https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/drools-distribution/target/&lt;/a&gt;&lt;br /&gt;Btw we are after a name. Drools is not a frame based system, so "slot specific" doesn't seem appropropriate. Property Specific seems a bit of a mouth full. I'm quite liking High Fidelity Change Listeners :) any other suggestions?&lt;br /&gt;&lt;br /&gt;slot-specific is the name used by Jess for this feature, . It's also the standard way that Clips COOL works, which is the Clips OO module. Although that's partly a side effect of the triple representation of properties used in COOL, and the modifications are triple based. I don't know what mechanism Jess is using to enable this.&lt;br /&gt;&lt;br /&gt;Mark&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-5536022280336396167?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=zI3Fydv9hDo:971jKee_vZg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=zI3Fydv9hDo:971jKee_vZg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=zI3Fydv9hDo:971jKee_vZg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=zI3Fydv9hDo:971jKee_vZg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=zI3Fydv9hDo:971jKee_vZg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=zI3Fydv9hDo:971jKee_vZg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=zI3Fydv9hDo:971jKee_vZg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=zI3Fydv9hDo:971jKee_vZg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=zI3Fydv9hDo:971jKee_vZg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=zI3Fydv9hDo:971jKee_vZg:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/zI3Fydv9hDo" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/zI3Fydv9hDo/fine-grained-property-change-listeners.html</link><author>noreply@blogger.com (Mark Proctor)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.athico.com/2012/01/fine-grained-property-change-listeners.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-1592104008029465402</guid><pubDate>Tue, 10 Jan 2012 13:55:00 +0000</pubDate><atom:updated>2012-01-20T04:42:16.363Z</atom:updated><title>jBPM Form Builder follow-up</title><description>Greetings! Among the things developed over the last two weeks for the &lt;a href="https://github.com/marianbuenosayres/jbpm/tree/master/jbpm-gwt/jbpm-gwt-form-builder"&gt;jBPM Form Builder&lt;/a&gt;, here are the ones worth mentioning: &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Script helper refactor:&lt;/strong&gt;&amp;nbsp;Some of the classes had issues when being stored on the server side, due to dependencies with GWT client-side classes. A small refactor was made to make them GWT independent, and utilize the GWT API from a particular view object to render on screen.&lt;br /&gt;
&lt;strong&gt;User roles implemented: &lt;/strong&gt;JAAS implementations for JBoss and Jetty are available now as stated in my &lt;a href="http://blog.athico.com/2011/12/jbpm-form-builder-follow-up.html"&gt;last post&lt;/a&gt;. The &lt;a href="https://github.com/marianbuenosayres/jbpm/tree/master/jbpm-installer"&gt;jBPM Installer&lt;/a&gt; inside my fork has the necessary implementations for JBoss, and the Jetty implementations are available to start up the project from the Debug mode in the Eclipse Plugin. Profiles are created as described previously: web designer and functional analyst. Web designer has all the functions available (can define forms, custom menu items and use any item available), while functional analyst can only define forms using the menu items authorized by the web designer.&lt;br /&gt;
&lt;br /&gt;
The whole idea behind these components will be to facilitate web designers to administrate component standarization from inside the form builder.&lt;br /&gt;
And here's some of the next items on the to do list:&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;HTML5 templates:&lt;/strong&gt;&amp;nbsp;Current form generation templates for Freemarker work with HTML4. There will be a new set of them that will use HTML5, which will probably lead to new menu items to fully cover HTML5 components.&lt;br /&gt;
&lt;strong&gt;More script helpers:&lt;/strong&gt;&amp;nbsp;Current script helpers allow to make an easy implementation of an ajax service call, a combobox population ajax call, and to toggle visualization of &amp;nbsp;a particular component (selected by id). There will be more script helpers, focused on creating new visual components on runtime and live validation of fields. And that's where the next one falls in&lt;br /&gt;
&lt;strong&gt;More validations:&amp;nbsp;&lt;/strong&gt;We had a few simple validations to start checking where to store them and what to do with them. Now that they seem to reach a plateau where no major refactor is needed, it is a good moment to start adding a lot more validations to the ones that are already there.&lt;br /&gt;
&lt;br /&gt;
That will be all for now. Cheers!&lt;br /&gt;
&lt;br /&gt;
Mariano&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-1592104008029465402?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6iiG-mdjVqY:8fJQf3c50Xw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6iiG-mdjVqY:8fJQf3c50Xw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6iiG-mdjVqY:8fJQf3c50Xw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=6iiG-mdjVqY:8fJQf3c50Xw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6iiG-mdjVqY:8fJQf3c50Xw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=6iiG-mdjVqY:8fJQf3c50Xw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6iiG-mdjVqY:8fJQf3c50Xw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6iiG-mdjVqY:8fJQf3c50Xw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=6iiG-mdjVqY:8fJQf3c50Xw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6iiG-mdjVqY:8fJQf3c50Xw:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/6iiG-mdjVqY" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/6iiG-mdjVqY/jbpm-form-builder-follow-up.html</link><author>noreply@blogger.com (Marian Buenosayres)</author><thr:total>2</thr:total><feedburner:origLink>http://blog.athico.com/2012/01/jbpm-form-builder-follow-up.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-8304835329402719800</guid><pubDate>Tue, 10 Jan 2012 13:49:00 +0000</pubDate><atom:updated>2012-01-10T19:14:42.619Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">decision tables</category><category domain="http://www.blogger.com/atom/ns#">Guvnor</category><title>Guided Decision Table supports BRL columns</title><description>Work has been completed to allow BRL fragments to be used as both (or either) Condition and Action columns in the Guided Decision Table within Guvnor.&lt;br /&gt;&lt;br /&gt;You can see the feature in action &lt;a href="http://vimeo.com/34842725"&gt;here&lt;/a&gt; and read more about it below.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;font-size:85%;" &gt;Adding a BRL column&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-vrqKuxyL2kU/TwyN5U4PLzI/AAAAAAAAAfA/KnT5quUcX9c/s1600/dtable-advanced-columns.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 189px;" src="http://3.bp.blogspot.com/-vrqKuxyL2kU/TwyN5U4PLzI/AAAAAAAAAfA/KnT5quUcX9c/s400/dtable-advanced-columns.png" alt="" id="BLOGGER_PHOTO_ID_5696083644713479986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A BRL fragment is a section of a rule created using Guvnor's (BRL) Guided Rule Editor: Condition columns permit the definition of "WHEN" sections and Action columns the definition of "THEN" sections. Fields defined therein as "Template Keys" become columns in the decision table.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;font-size:85%;" &gt;A Condition BRL fragment&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-QWjuLzpYiUc/TwyNcTk7YjI/AAAAAAAAAeo/aU3tXatA4FI/s1600/dtable-brl-condition.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 187px;" src="http://3.bp.blogspot.com/-QWjuLzpYiUc/TwyNcTk7YjI/AAAAAAAAAeo/aU3tXatA4FI/s400/dtable-brl-condition.png" alt="" id="BLOGGER_PHOTO_ID_5696083146147848754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;font-size:85%;" &gt;An Action BRL fragment&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-2EPf4u-QF1A/TwyNo-bw9aI/AAAAAAAAAe0/KHcWh7kucAA/s1600/dtable-brl-action.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 130px;" src="http://2.bp.blogspot.com/-2EPf4u-QF1A/TwyNo-bw9aI/AAAAAAAAAe0/KHcWh7kucAA/s400/dtable-brl-action.png" alt="" id="BLOGGER_PHOTO_ID_5696083363810571682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Consequently &lt;span style="font-weight: bold;"&gt;any&lt;/span&gt; rule that could be defined with the (BRL) Guided Rule Editor can now be defined with a decision table; including free-format DRL and DSL Sentences.&lt;br /&gt;&lt;br /&gt;BRL fragments are fully integrated with other columns in the decision table, so that a Pattern or field defined in a regular column can be referenced in the BRL fragments and vice-versa.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;font-size:85%;" &gt;A decision table with BRL fragments and regular columns&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-nQWun61E70g/TwxNvqVV4iI/AAAAAAAAAeQ/8WCH9394sOs/s1600/dtable-brl-columns.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 337px;" src="http://2.bp.blogspot.com/-nQWun61E70g/TwxNvqVV4iI/AAAAAAAAAeQ/8WCH9394sOs/s400/dtable-brl-columns.png" alt="" id="BLOGGER_PHOTO_ID_5696013109929828898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;font-size:85%;" &gt;Source from BRL fragments&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-S3GYrPfWKwY/TwxN_ggQRBI/AAAAAAAAAec/KWK69juiPGE/s1600/dtable-brl-source.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 242px;" src="http://1.bp.blogspot.com/-S3GYrPfWKwY/TwxN_ggQRBI/AAAAAAAAAec/KWK69juiPGE/s400/dtable-brl-source.png" alt="" id="BLOGGER_PHOTO_ID_5696013382169150482" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-8304835329402719800?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=a3lYCPcn_jU:bdZ8Il_389s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=a3lYCPcn_jU:bdZ8Il_389s:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=a3lYCPcn_jU:bdZ8Il_389s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=a3lYCPcn_jU:bdZ8Il_389s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=a3lYCPcn_jU:bdZ8Il_389s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=a3lYCPcn_jU:bdZ8Il_389s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=a3lYCPcn_jU:bdZ8Il_389s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=a3lYCPcn_jU:bdZ8Il_389s:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=a3lYCPcn_jU:bdZ8Il_389s:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=a3lYCPcn_jU:bdZ8Il_389s:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/a3lYCPcn_jU" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/a3lYCPcn_jU/guided-decision-table-supports-brl.html</link><author>noreply@blogger.com (Michael Anstis)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-vrqKuxyL2kU/TwyN5U4PLzI/AAAAAAAAAfA/KnT5quUcX9c/s72-c/dtable-advanced-columns.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.athico.com/2012/01/guided-decision-table-supports-brl.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-8513707393547069596</guid><pubDate>Tue, 10 Jan 2012 10:01:00 +0000</pubDate><atom:updated>2012-01-16T08:32:43.687Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">event</category><category domain="http://www.blogger.com/atom/ns#">BRMS Guvnor Drools</category><category domain="http://www.blogger.com/atom/ns#">planner</category><category domain="http://www.blogger.com/atom/ns#">jBPM</category><title>Fosdem Brussels 4 February 2012: Planner, Guvnor and jBPM designer</title><description>&lt;a href="http://fosdem.org/2012/"&gt;Fosdem&lt;/a&gt; is a free conference on Open Source in Brussels in the first weekend of&amp;nbsp;February. It's a fun conference and getting quite big, filled with Open Source engineers and&amp;nbsp;enthusiasts: long beards, red hats and Mozilla T-shirts are not uncommon :)&lt;br /&gt;
&lt;br /&gt;
Marco Rietveld and I will be presenting in &lt;a href="http://fosdem.org/2012/schedule/track/jbossorg_devroom"&gt;the JBoss.org dev room&lt;/a&gt;&amp;nbsp;on Saturday:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://fosdem.org/2012/schedule/event/drools_planner_planning_optimization_by_example"&gt;12:00 - 12:55: Drools Planner: Planning optimization by example&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fosdem.org/2012/schedule/event/managing_workflows_and_business_rules_with_guvnor_and_the_jbpm_designer"&gt;18:00 - 18:55:&amp;nbsp;Guvnor/JBPM : Managing workflows and business rules with Guvnor and the jBPM designer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
There are a lot of &lt;a href="http://fosdem.org/2012/schedule/days"&gt;other interesting&amp;nbsp;talks&lt;/a&gt; too, such as Infinispan, Openshift, Forge, ... so if you're in the&amp;nbsp;neighborhood, join us. Did I mention the entrance is free?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-8513707393547069596?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=cLdauXr3eMg:bNrAtZCP094:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=cLdauXr3eMg:bNrAtZCP094:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=cLdauXr3eMg:bNrAtZCP094:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=cLdauXr3eMg:bNrAtZCP094:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=cLdauXr3eMg:bNrAtZCP094:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=cLdauXr3eMg:bNrAtZCP094:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=cLdauXr3eMg:bNrAtZCP094:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=cLdauXr3eMg:bNrAtZCP094:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=cLdauXr3eMg:bNrAtZCP094:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=cLdauXr3eMg:bNrAtZCP094:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/cLdauXr3eMg" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/cLdauXr3eMg/fosdem-brussels-4-february-2012-planner.html</link><author>noreply@blogger.com (Geoffrey De Smet)</author><thr:total>0</thr:total><feedburner:origLink>http://blog.athico.com/2012/01/fosdem-brussels-4-february-2012-planner.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-54879757685892680</guid><pubDate>Fri, 06 Jan 2012 16:17:00 +0000</pubDate><atom:updated>2012-01-06T16:18:57.990Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">jBPM</category><category domain="http://www.blogger.com/atom/ns#">Boot Camp</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Last Chance - Drools &amp; jBPM at ICAART (Portugal) 4th International Conference on Agents and Artificial Intelligence</title><description>The event is just one week away from being cancelled if we don't get more attendance. So if you are thinking of going, better sign up now, before it's too late.&lt;br /&gt;&lt;br /&gt;Mark&lt;br /&gt;&lt;br /&gt;---------------&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-_b77C8kLxEk/TuDUJkn_TlI/AAAAAAAAAnY/_QPFAuMEdOo/s1600/icaart.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 76px;" src="http://4.bp.blogspot.com/-_b77C8kLxEk/TuDUJkn_TlI/AAAAAAAAAnY/_QPFAuMEdOo/s400/icaart.png" alt="" id="BLOGGER_PHOTO_ID_5683775990656880210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Droosl  &amp;amp; jBPM @ ICAART 2012 is now confirmed, and myself (Mark Proctor)  and Dr Davide Sottara will be there. If you have any interesting  research on or with Drools &amp;amp; jBPM that you would like to present on  the day, let us konw.&lt;br /&gt;6-8 Febuary 2012&lt;br /&gt;Vilamoura, Algarve, Portugal&lt;br /&gt;&lt;a href="http://www.icaart.org/tutorials.asp"&gt;http://www.icaart.org/tutorials.asp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The  day is a tutorial day aimed at all levels. It will start with general  introductions to the technology but will slant off to more of our  research based projects such as Drools Semantics and Chance, as it's  part of an academic conference. We would also like to give an  opportunity for the people to present their own research, slots can be  anything from 20minutes to 60 - contact me if you are interested  mproctor at codehaus d0t org.&lt;br /&gt;&lt;br /&gt;There will also be plenty of time for discussions and help with your own projects.&lt;br /&gt;&lt;p&gt; &lt;strong&gt;Abstract&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Drools  is the leading open source, industry focused, rule engine. While   Drools started life as a Rete based forward chaining engine, it has   since transcended. It's ongoing mission is to explore declarative   paradigms from a practical and industrial perspective, to boldly go   where no engine has gone before.&lt;br /&gt;&lt;br /&gt;The tutorial will start with a  gentle introduction, suitable for all  level of expertise, covering the  core language and functionality slowly  expanding into more complex  areas. The topics covered include, but are  not limited to:&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration:underline;"&gt;Basic Concepts:&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Patterns, Constraints and Unification&lt;/li&gt;&lt;li&gt;Data Driven and Goal Oriented Inference using Forward Chaining and (Opportunistic) Backward Chaining&lt;/li&gt;&lt;li&gt;Truth Maintenance&lt;/li&gt;&lt;li&gt;Temporal Reasoning and Complex Event Processing&lt;/li&gt;&lt;li&gt;Functional Programming&lt;/li&gt;&lt;li&gt;Traits and Declarative Models&lt;/li&gt;&lt;/ul&gt; &lt;span style="text-decoration:underline;"&gt;Advanced Topics:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Decision Tables&lt;/li&gt;&lt;li&gt;Rule and Workflow Integration&lt;/li&gt;&lt;li&gt;Hybrid Rule-Based Systems&lt;/li&gt;&lt;li&gt;Agents and Services&lt;/li&gt;&lt;li&gt;Unified Testing&lt;/li&gt;&lt;/ul&gt;     &lt;p&gt;&lt;strong&gt;Brief biography of Mark Proctor&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Mark  Proctor received his B.Eng in Engineer Science and Technology and  then  his M.Sc. in Business and Information Systems; both from Brunel   University, West London. His M.Sc. thesis was in the field of Genetic   Algorithms; which is where he discovered his interest for anything AI   related.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Mark became involved in the Drools expert system  project at an early  stage and soon became its project lead. Mark then  joined JBoss (later  acquired by Red Hat) as an employee when the Drools  project was federated into the JBoss middleware stack.&lt;br /&gt;Mark now  leads the effort at Red Hat for a unified platform for  declarative  technologies; with a focus on rules, event processing,  workflow,  semantics, distributed agents and governance.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Brief biography of Davide Sottara&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Davide  Sottara received his Ms. Degree in Computer Science(2006) and his  Ph.D  (2010) in Computer Science, Electronics and Telecommunications  from  the University of Bologna.&lt;br /&gt;His research and development interests  include Artificial Intelligence  in general and Decision Support Systems  in particular, focusing on  hybrid systems combining predictive models  and rule-based systems.&lt;/p&gt;&lt;p&gt; Since 2006, he has been working on the  development of intelligent DSSs  in the environmental and medical field.  He is a member of the Drools  open source Community, leading a  sub-project on the extension of  production rule engines to support  hybrid and uncertain reasoning, and  he's also involved in the RuleML  rule language standardization  initiative. He is currently working on  remote health-care systems  enhanced with AI-based predictive,  diagnostic and planning features.&lt;br /&gt;&lt;/p&gt;   &lt;strong&gt;Contacts&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;e-mail: &lt;a href="mailto:icaart.secretariat@insticc.org"&gt;icaart.secretariat@insticc.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-54879757685892680?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=d-eAJPstsgo:PmVzX3a90RI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=d-eAJPstsgo:PmVzX3a90RI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=d-eAJPstsgo:PmVzX3a90RI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=d-eAJPstsgo:PmVzX3a90RI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=d-eAJPstsgo:PmVzX3a90RI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=d-eAJPstsgo:PmVzX3a90RI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=d-eAJPstsgo:PmVzX3a90RI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=d-eAJPstsgo:PmVzX3a90RI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=d-eAJPstsgo:PmVzX3a90RI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=d-eAJPstsgo:PmVzX3a90RI:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/d-eAJPstsgo" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/d-eAJPstsgo/last-chance-drools-jbpm-at-icaart.html</link><author>noreply@blogger.com (Mark Proctor)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-_b77C8kLxEk/TuDUJkn_TlI/AAAAAAAAAnY/_QPFAuMEdOo/s72-c/icaart.png" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://blog.athico.com/2012/01/last-chance-drools-jbpm-at-icaart.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-836586153195058163</guid><pubDate>Wed, 04 Jan 2012 20:35:00 +0000</pubDate><atom:updated>2012-01-12T01:48:55.390Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">standards</category><category domain="http://www.blogger.com/atom/ns#">decision tables</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>The Decision Model IP Trap - Part Drei</title><description>&lt;a href="http://blog.athico.com/2011/11/decision-model-ip-trap.html"&gt;part 1&lt;/a&gt;   &lt;a href="http://blog.athico.com/2011/12/decision-model-ip-trap-part-deux.html"&gt;part 2&lt;/a&gt;   &lt;a href="http://blog.athico.com/2012/01/decision-model-ip-trap-part-drei.html"&gt;part 3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Recently Mr Suleiman Shehu wrote a &lt;a href="http://www.azintablog.com/2011/12/24/the-decision-model-ip-trap-rebuttal/"&gt;misleading rebuttal&lt;/a&gt; on my blog posts &lt;a href="http://blog.athico.com/2011/11/decision-model-ip-trap.html"&gt;"The Decision Model IP Trap"&lt;/a&gt; and  &lt;a href="http://blog.athico.com/2011/12/decision-model-ip-trap-part-deux.html"&gt;"The Decision Model IP Trap - Part Deux "&lt;/a&gt;. He took great pains to declare that his article was balanced and impartial.&lt;br /&gt;&lt;br /&gt;On a side note, interesting &lt;a href="http://games.slashdot.org/comments.pl?sid=151312&amp;amp;cid=12701745"&gt;post &lt;/a&gt;by the famous John Carmack from ID Software on patents - "Yes, it is a legal tool that may help you against your competitors, but I'll have no part of it.  Its basically mugging someone." [Carmack]&lt;br /&gt;&lt;br /&gt;Mr Suleiman Shehu attempts to argue that patents and open source do mix, and mix regularly, in an effort to highlight my unreasonableness for not considering TDM within Drools. He cites patents owned by Oracle for Java and the recent Oracle and Google court case of those patents as the basis for those arguments. Further he tries to explain that the KPI usage policy is perfectly acceptable for any Open Source project.&lt;br /&gt;&lt;br /&gt;Each and every fact he uses to form the basis of his argument is provably incorrect and shows he has no understanding of licensing within Open Source, or the different factions in Open Source, which admittedly is not a simple topic, but that is no excuse. You cannot bundle all of Open Source under a single umbrella argument, each license has different restrictions and guarantees. Having built his rebuttal on misguided, misunderstood and false assumption (points 1 to 4) he then slides to conjecture on my beliefs and motives for which he has no evidence (points 5 to 7). This completely nullifies any claims he has for impartiality, balance or integrity.&lt;br /&gt;&lt;br /&gt;I have kept an original copy of his article &lt;a href="http://www.athico.com/TDM/tdm-rebuttal.html"&gt;here&lt;/a&gt;. For brevity purposes I have abridged his points, in a way I feel encapsulates his intent. In the original copy I created two columns, where the first column shows the section numbers that correspond with the points in the main document, which is in the second column. This is to show the source for the abridged version in this article.&lt;br /&gt;&lt;br /&gt;It was not so long ago that Open Source Systems (OSS) came with a lot of uncertainty. Providing certainty was a large part that allowed mass OSS adoption of both developers and users. Patents create legal uncertainties.&lt;br /&gt;&lt;br /&gt;Licenses like (but not limited to) the GPL and Apache License bring certainty, over the years they have built up strong brand recognition that creates instantly known commodities for social charters and usage restrictions of a project. These are catalysts allowing for OSS communities of developers and users to thrive. The licenses do what they say on the tin, you don't need expensive lawyers to hunt down potential additional restrictions. As a leader of an OSS project I value the certainty these bring. I won't stand quietly by, while others seek to dilute those certainties and to muddy the water of respected OSS brands that many have worked hard to establish.&lt;br /&gt;&lt;br /&gt;Bearing this in mind, here are the main points:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1) There is no reasonable reason why Drools cannot embrace TDM – &lt;span style="color: rgb(255, 0, 0);"&gt;WRONG&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1.1) Legally this cannot happen. The Apache license forbids contributions which are covered by patents not made available under the terms guaranteed by the Apache license. The license is crystal clear on this. The same is true for the GPL.&lt;br /&gt;&lt;br /&gt;1.2) This actually rebuts his entire article, and is probably the end of the discussion. But for completeness I will falsify each and every fact that Mr Suleiman Shehu uses.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2) Drools is written in Java. Java is patented, your world is already using patents, so what's your problem – &lt;span style="color: rgb(255, 0, 0);"&gt;WRONG&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2.1) There are no patents for the Java language specification. The term Java is trademarked and you must pass certification to use it. Java can be used to refer to the platform, which is the language specification + libraries + virtual machine. Oracle has patents for its virtual machine, the JVM.&lt;br /&gt;&lt;br /&gt;2.2) The Java language specification has no patents. It is possible to implement a VM that can execute Java which does not infringe upon Oracle's patents; see Kaffe: &lt;a href="http://www.kaffe.org/"&gt;http://www.kaffe.org/&lt;/a&gt;. The Java specification provides a safe buffer from possible infringement of patents, from the perspective of developers targeting the Java language.&lt;br /&gt;&lt;br /&gt;2.3) This is why patenting of methodologies, specifications and business practices is actually far more dangerous that patents for implementations, where alternative implementation techniques can nearly always be found. If the Java language specification was patented, it would be impossible to do an implementation that does not infringe – in such a situation Java would not have taken off in OSS.&lt;br /&gt;&lt;br /&gt;2.4) Illustrating this argument further, Drools DRL is derivative of Ilog's IRL, while IBM may hold patents for the execution of IRL, that has no bearing on our derivative implementation for the IRL language. If however IRL was patented, that would be much more chilling. So it is important to understand the difference in patenting of a specification, which is absolute, and implementationswhich can be worked around.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3) Oracle granted OpenJDK exceptions for those patents, as long as you obey its specification. Why is that different to KPI granting OSS exceptions. If its good enough for them (OpenJDK), why isn't it for you – &lt;span style="color: rgb(255, 0, 0);"&gt;WRONG&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3.1) When Sun placed its JVM implementation under the GPL license all its patents were also made available under terms of the GPL license. While the Apache license explicitly gives universal and perpetual usage of patented contributions, the GPL has similar implicit terminology. The patent licensing under certification is something completely different and is considered an additional guarantee.&lt;br /&gt;&lt;a href="http://en.swpat.org/wiki/Java_and_patents"&gt;http://en.swpat.org/wiki/Java_and_patents&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"OpenJDK is has been distributed by Oracle under GPLv2.[1] GPLv2 includes two implicit patent licences, so users of OpenJDK should be safe, and modified versions of OpenJDK should also be safe (even if they're heavily modified).&lt;br /&gt;&lt;br /&gt;“The protections in the GPL are unconditional. The software doesn't have to comply with any specifications in order to benefit from these protections."&lt;br /&gt;&lt;br /&gt;3.2) KPI could better clarify its OSS exception. The use of the term “Open Source” creates ambiguity as each license brings different issues that need to be tackled. For this they need a better understanding of OSS licensing – GPL/MIT/BSD/ASL. As stated above for either Apache or GPL, you either provide universal and perpetual access to those patents or you don't. A project cannot be under the terms of GPL if it contains additional restrictions. If there are restrictions on usage, then it's not GPL. Also be aware that providing access to patents for GPL projects does not make them available to Apache licensed projects – see 4.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4) Java is patented, you are safe if you certify - see 3. Which is why Oracle is suing Google. So if those people can work with patents, why can't you – &lt;span style="color: rgb(255, 0, 0);"&gt;WRONG&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;4.1) As stated in point 3, OpenJDK is not "licensing" patents under restrictive terms based on certification. Those grants are universal and perpetual within the GPL eco-system. So using 4's for the "if it's good enough for them, why isn't it for you" is broken. This is further falsified by point 2 where Drools targets a language specification that is not patent encumbered. Oracle is not suing Google for making something that executes Java like code, the Java language specification is not patented. It believes the Google VM infringes its patents. As stated in point 2 it is possible to implement Java while not infringing patents, Google certainly believes they don't infringe on those patents. Even if Google is found to infringe on some Oracle patents, that does not distract from the fact that Java, the language spec, is not patented and all OpenJDK patents are available under the terms of the GPL.&lt;br /&gt;&lt;br /&gt;4.2) Google's issue is related to different OSS eco-systems, which is an entirely different subject and out of scope. In short Google's VM is licensed under the Apache License while OpenJDK is under the GPL. Those perpetual and universal grants are restricted to those eco-systems they were placed under. GPL v ASL is a subject completely out of scope. So again, it has got nothing to do with one OSS project using patents under restrictive "certification" terms, see point 3. If Google had placed its VM under the GPL, Oracle would not be able to sue them.&lt;br /&gt;&lt;br /&gt;-------&lt;br /&gt;&lt;br /&gt;Having shown that each and every fact he uses to support the basis of his argument is completely wrong lets now turn to the darker sides of his blog, where he  misappropriates someone's comment and slides to conjecture on my beliefs and motives, for which he has no evidence. This completely nullifies any claims he has for impartiality, balance or integrity.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5) Jacob Feldman, from Open Rules, as an Open Source vendor has endorsed the TDM patent position. "If KPI TDM patent usage rights statement appears to be acceptable to Jacob at OpenRules – an open source decision management company www.openrules.com ) what is there to prevent you from using TDM within Drools?"&lt;/span&gt; - &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;MISAPPROPRIATION&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;5.1) Before you misquote someone whose comment was intended to be amicable simply to avoid conflict, you should probably check with them first before you use them as a full blown endorsement. I have known Jacob personally for many years and have already spoken to him on the matter. And I think I've already answered well enough, time after time, why even legally this is prevented.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6) "The only people who have the moral right to own patents are open source software companies who will naturally use their patents defensively."&lt;/span&gt; - &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;CONJECTURE&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;6.1) That is complete conjecture with no basis of evidence. I have never and will never claim any arguments based on morality. Yes, I believe that patents hinder innovation in software. Yes, I believe that patents restrict the potential of Open Source, as it cannot license patents (as proven in points 1 to 4). This has nothing to do with morality. I am invested in Open Source, I have every right to protect my interests and my employers interests and attempt (within the law) to limit those that might negatively impact on said interests. In the same way any individual or company has every right to hold patents to protect their interest. Morality has nothing to do with it.&lt;br /&gt;&lt;br style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;7) "Mark believes that this TDM patent should be made available to the wider community on an Apache licence because I believe (but I cannot prove this belief) that Mark would have liked to integrate TDM with Drools in some way and therefore argues that an open source project should not be encumbered with any software patents."&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;&lt;/span&gt; - &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;CONJECTURE&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;7.1) This is so bad in so many ways that I don't even know where to begin. It borders on being libellous. You are trying to claim that I wish to appropriate someone else's property because I wish to use their ideas.&lt;br /&gt;&lt;br /&gt;7.2) I've repeatedly said, in almost every thread on this subject, that I consider the research projects Prologa and XTT2 to be far more extensive, and that I will be using those. That alone falsifies any conjecture you are trying to make. Shame on you.&lt;br /&gt;&lt;br /&gt;7.3) I think I made it clear in point 6 that my motives are simply about protecting my interests. I'm invested in Open Source, I believe patents restrict the potential of Open Source and I have every right to execute in a way to negate those restrictions.&lt;br /&gt;&lt;br /&gt;7.4) I have never said I believe that they "should be made available". That's a very strong statement, insinuating I believe in the appropriation of someone else's property based on arguments of morality. Larry came to me and asked if we would use TDM within Drools, I cannot legally do so under the terms of the Apache license. If they wish for Drools to incorporate TDM, they need to license it under those terms - the choice is theirs and theirs alone. "Should" doesn't come into it.&lt;br /&gt;&lt;br /&gt;7.5) Patents create a ‘walled garden’, Drools cannot license those patents under restrictive terms. Thus wider adoption of TDM is not in my employer's commercial interests, as we cannot provide implementations for those potential customers who want TDM. I have every right to protect my employer's commercial interests by communicating this issue to potential TDM adopters, to ensure they do not become excluded from from Open Source.&lt;br /&gt;&lt;br /&gt;Mark&lt;br /&gt;Disclaimer: This post is made in a personal capacity. Nothing written above should be construed as Red Hat's corporate position.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-836586153195058163?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6TT1rYJdTP4:X0w0MvIPTqM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6TT1rYJdTP4:X0w0MvIPTqM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6TT1rYJdTP4:X0w0MvIPTqM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=6TT1rYJdTP4:X0w0MvIPTqM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6TT1rYJdTP4:X0w0MvIPTqM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=6TT1rYJdTP4:X0w0MvIPTqM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6TT1rYJdTP4:X0w0MvIPTqM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6TT1rYJdTP4:X0w0MvIPTqM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=6TT1rYJdTP4:X0w0MvIPTqM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6TT1rYJdTP4:X0w0MvIPTqM:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/6TT1rYJdTP4" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/6TT1rYJdTP4/decision-model-ip-trap-part-drei.html</link><author>noreply@blogger.com (Mark Proctor)</author><thr:total>1</thr:total><feedburner:origLink>http://blog.athico.com/2012/01/decision-model-ip-trap-part-drei.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-6283478332903632747</guid><pubDate>Sun, 25 Dec 2011 16:39:00 +0000</pubDate><atom:updated>2011-12-25T16:39:48.424Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">planner</category><title>Less boilerplate in Planner: Generic MoveFactory</title><description>The recently released &lt;a href="http://www.jboss.org/drools/drools-planner"&gt;Drools Planner&lt;/a&gt; &lt;a href="http://www.jboss.org/drools/downloads"&gt;5.4.0.Beta1&lt;/a&gt; includes 2 Generic MoveFactories. That means it's no longer required to implement&amp;nbsp;&amp;nbsp;a&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;MoveFactory&lt;/span&gt;&amp;nbsp;and&amp;nbsp;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Move&lt;/span&gt;&amp;nbsp;to use a local search optimization algorithm such as Tabu Search or Simulated Annealing.&lt;br /&gt;
&lt;br /&gt;
For example, the MachineReassignment example configures Tabu Search like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;  &amp;lt;localSearch&amp;gt;
    &amp;lt;selector&amp;gt;
      &amp;lt;selector&amp;gt;
        &amp;lt;moveFactoryClass&amp;gt;org.drools.planner.core.move.generic.GenericChangeMoveFactory&amp;lt;/moveFactoryClass&amp;gt;
      &amp;lt;/selector&amp;gt;
      &amp;lt;selector&amp;gt;
        &amp;lt;moveFactoryClass&amp;gt;org.drools.planner.core.move.generic.GenericSwapMoveFactory&amp;lt;/moveFactoryClass&amp;gt;
      &amp;lt;/selector&amp;gt;
    &amp;lt;/selector&amp;gt;
    &amp;lt;acceptor&amp;gt;
      &amp;lt;propertyTabuSize&amp;gt;5&amp;lt;/propertyTabuSize&amp;gt;
    &amp;lt;/acceptor&amp;gt;
    &amp;lt;forager&amp;gt;
      &amp;lt;minimalAcceptedSelection&amp;gt;1000&amp;lt;/minimalAcceptedSelection&amp;gt;
    &amp;lt;/forager&amp;gt;
  &amp;lt;/localSearch&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
Notice that there is no MachineReassignment specific code in there&amp;nbsp;whatsoever. But if I wanted to, I could easily mix in a custom &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;MoveFactory&lt;/span&gt; implementation too.&lt;br /&gt;
&lt;br /&gt;
Planner comes with 2 generic move factories out of the box:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;GenericChangeMoveFactory&lt;/span&gt;&lt;/b&gt;: A &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;GenericChangeMove&lt;/span&gt; changes 1 planning variable of 1 planning entity to another planning value. For example: Given course C1 in room R1 and period P1, change its room to room R2.
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;GenericSwapMoveFactory&lt;/span&gt;&lt;/b&gt;: A &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;GenericSwapMove&lt;/span&gt; swaps all the planning variables of 2 planning entities. For example: Given course C1 in room R1 and period P1 and Course C2 in room R2 and period P2, put course C1 in room R2 and period P2 and put course C2 in room R1 and period P1.
&lt;/li&gt;
&lt;/ul&gt;
They are slightly slower than a custom implementation, but equally scalable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-6283478332903632747?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=zVDYfR3Dbaw:6yGXKe1tgRc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=zVDYfR3Dbaw:6yGXKe1tgRc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=zVDYfR3Dbaw:6yGXKe1tgRc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=zVDYfR3Dbaw:6yGXKe1tgRc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=zVDYfR3Dbaw:6yGXKe1tgRc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=zVDYfR3Dbaw:6yGXKe1tgRc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=zVDYfR3Dbaw:6yGXKe1tgRc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=zVDYfR3Dbaw:6yGXKe1tgRc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=zVDYfR3Dbaw:6yGXKe1tgRc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=zVDYfR3Dbaw:6yGXKe1tgRc:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/zVDYfR3Dbaw" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/zVDYfR3Dbaw/less-boilerplate-in-planner-generic.html</link><author>noreply@blogger.com (Geoffrey De Smet)</author><thr:total>5</thr:total><feedburner:origLink>http://blog.athico.com/2011/12/less-boilerplate-in-planner-generic.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-5929689426568616784</guid><pubDate>Fri, 23 Dec 2011 13:41:00 +0000</pubDate><atom:updated>2012-01-07T22:38:15.674Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">standards</category><category domain="http://www.blogger.com/atom/ns#">decision tables</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>The Decision Model IP Trap - Part Deux</title><description>&lt;a href="http://blog.athico.com/2011/11/decision-model-ip-trap.html"&gt;part 1&lt;/a&gt;   &lt;a href="http://blog.athico.com/2011/12/decision-model-ip-trap-part-deux.html"&gt;part 2&lt;/a&gt;   &lt;a href="http://blog.athico.com/2012/01/decision-model-ip-trap-part-drei.html"&gt;part 3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A while back I published this article titled the “The Decision Model Trap”, &lt;a href="http://blog.athico.com/2011/11/decision-model-ip-trap.html"&gt;http://blog.athico.com/2011/11/decision-model-ip-trap.html&lt;/a&gt;. In short it highlighted the dangers of adopting a patented methodology and my opinion on Red Hat's stance on the matter. The patent is owned by the &lt;a href="http://www.kpiusa.com/"&gt;Knowledge Partners International (KPI)&lt;/a&gt; who push TDM.&lt;br /&gt;&lt;br /&gt;My article was referenced in a thread, started by Jacob Feldman from Open Rules, in a linkedin group for “The Decision Model”. It's a closed group, A copy is provided online &lt;a href="http://www.athico.com/TDM/tdm.htm"&gt;here&lt;/a&gt;. The original link is &lt;a href="http://www.linkedin.com/groupItem?view=&amp;amp;gid=3394865&amp;amp;type=member&amp;amp;item=86029666&amp;amp;qid=d473e78c-2266-421d-b265-24ea39e88d5b&amp;amp;trk=group_most_popular-0-b-ttl&amp;amp;goback=.gmp_3394865"&gt;here&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;I'll quote Jacob below:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;“First I learned about a possible patent for The Decision Model from Mark Proctor – see http://blog.athico.com/2011/11/decision-model-ip-trap.html. But it was impossible to find any references to it on the web. Besides, neither Larry nor Barb ever mentioned anything about the patent (at least to me). So, I thought that was just a misunderstanding. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;However, on Dec. 6, 2011 USPTO apparently granted a patent to Larry and Barb – see http://www.freepatentsonline.com/8073801.html. I believe it would be only helpful if the Decision Model authors openly explain their position regarding this patent to all of us. Otherwise, such a “holiday present” may scare the entire decision modelling community to stay away from TDM. “&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The thread turned hostile with a KPI representative demanding I clarify my motivations and then resorting to belittling me – but I'll come back to that later. The result was that eventually KPI made an announcement on their objectives and intentions with regards to the patent and TDM. The link for this is &lt;a href="http://www.kpiusa.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=170&amp;amp;Itemid=39"&gt;here&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;Lets look at this briefly:&lt;br /&gt;Objectives of the Patent Policy:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To ensure that we are able to evolve what we started without risking an infringement of someone else's patent.&lt;/li&gt;&lt;li&gt;To share the ideas behind The Decision Model in an orderly way.&lt;/li&gt;&lt;li&gt;To protect its rigor, hence its reputation.”&lt;/li&gt;&lt;/ul&gt;With the current insanity of the various patent systems, having to play the patent game, just to protect yourself is a reality. However restricting 3rd party use of that patent is not necessary to achieve the later two goals. Trademark and certification is a perfectly adequate, if not far superior and more effective way to achieve those goals. Unless they have other objectives, not listed, I invite them to license their patent under terms similar to that in the Apache Software License.&lt;br /&gt;&lt;br /&gt;Then lets get onto their next statement:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"Vendors who provide Open Source Software, and who wish to incorporate TDM can obtain a royalty-free license for Open Source software. There will be a certification fee and process for Open Source vendors who desire this optional software certification."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Talk about the classic honey trap. Ring ring, ring ring..... "hello?... Hey KPI it's 2002 calling, they want their business ideas back". For those that don't get the joke it's a play on the "hey hunny, its the 80s calling, they want their hair back" :) Seriously the world has moved on, it's clued up, they don't fall for that clap trap any more. KPI, there is an awesome website, that covered the SCO débâcle, called groklaw.net - very recommended reading. If you are an OSS vendor and take KPI up on their offer, you aren't not Open Source - end of story. Just don't do it to yourself, you deserve better, your customers deserve better.&lt;br /&gt;&lt;br /&gt;It's old news now that KPI through a partner is trying to infect the OMG Decision Model and Notation standard effort, &lt;a href="http://www.omgwiki.org/dmn-rfp/doku.php"&gt;http://www.omgwiki.org/dmn-rfp/doku.php&lt;/a&gt;. Private emails have been sent between the various heavyweights in the OMG process. I think the general sentiment was "not a chance in hell". So that's one nail in the coffin. A proprietary and encumbered methodology will die when faced with an un-encumbered official and open standard.&lt;br /&gt;&lt;br /&gt;They may however try to argue that their patent covers the resulting DMN standard, regardless of whether the DMN group accepts their proposal. The result on the industry in general could be chilling. I would urge KPI to re-read groklaw.net about what happened to SCO when they tried to enforce bogus patents. Yes that's right, “SC...Who?” - it's doubtful your reputations and company brand would survive if you became hostile on an open standard and/or an open source implementation of that standard. RIP TDM.....&lt;br /&gt;&lt;br /&gt;So let's now get back to that linked in forum posting. As the thread was started by quoting my initial blog, when someone asked what impact this could have on the industry, I felt that I had every right to re-iterate a key point from the article. That while TDM continues to be patented the industry will move around and beyond it, and that the work we are doing lifting from the extensive research made available in the Prologa and XTT2 will also make it's patent irrelevant.&lt;br /&gt;&lt;br /&gt;Michael Grohs, VP of Business Development @ KPI, jumped in demanding I declare my motivations – as if I was some how being underhanded. I don't think he had taken the time to read my article. I think it makes my stance and motivations very clear. But then I believe he was more interested in posturing than substance. I'll show two key points from the article, I think they show my stance and motivations pretty clearly.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;“...snip...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Open Source and Patents do not mix. When you get software from Red Hat you are guaranteed its 100% Open Source, not maybe OS or partly OS. From top to bottom, inside and out 100% OS goodness. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;...snip...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;In the mean time we in the Drools team will continue to take our inspiration from the excellent and unencumbered research projects; Prologa and XTT2.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;http://www.econ.kuleuven.be/prologa/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;http://ai.ia.agh.edu.pl/wiki/hekate:xtt2”&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The thread continued to regress into noise. With further indications that I was trying to be underhanded, by demanding I declare my motivations. It was insinuated that I don't live in the real world, that the patents I have through Red Hat make me hypercritical for demanding “special rights”:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;“but then world is full of people who believe that they are entitled to special rights which they believe other people should not have. “&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In general there seemed to be a lack of understanding on the use of defensive patents within OSS, particularly on how they have virtually no restrictions, beyond that defensive clause – as specified in the Apache Software License. There also seemed to be a lack of understanding on the walled garden patents create, shutting off the OSS research world - which is why I oppose this so vehemently.&lt;br /&gt;&lt;br /&gt;Finally Michael, a VP @KPI, just decided to get full out snotty on me. I couldn't figure out if he was trying to belittle me or indicate that I was being underhanded by concealing that I work for Red Hat – or maybe both. I guess when you have nothing of substance to say, just use insults:&lt;br /&gt;Michael:&lt;span style="font-style: italic;"&gt;”Mark I understand that your and Edson's patent is assigned to your employer Red Hat and not to the World, but correct me if I am wrong. So it is actually Red Hat who does the gifting. “&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I apologise in advance for the slightly over pompous use of “I”. Those that know me, know that while I evangelise the technology, that I will big up the Drools community in general and it's achievements - I do not try to add grandeur directly to my personage, that actually I'm a little shy of direct attention. I believe Michael thought I was some peon of a developer, scuttling along to my masters commands. So given the circumstances, I felt that a point should be made:&lt;br /&gt;&lt;br /&gt;Michael:&lt;span style="font-style: italic;"&gt;"I understand that your and Edson's patent is assigned to your employer Red Hat and not to the World, but correct me if I am wrong. So it is actually Red Hat who does the gifting. "&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;mark:&lt;span style="font-style: italic;"&gt;"I'm really not sure what point you are trying to make with this comment. When you have to reach for semantic interpretations it makes you sound bitter and doesn't become an industry professional. I'm not even sure I should dignify it with a response.... but then I wouldn't be me :) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"So it is actually Red Hat who does the gifting" &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I don't make it any secret that I'm employee of Red Hat, I'm very proud to work for the worlds number one Open Source company. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;But I don't know if that is the point you are trying to make, or if you are trying to belittle me by arguing semantics on the appropriation of the term "we". Much as Suleiman keeps trying to talk down to me by using terms like "real world" and "special rights". So I guess I should answer both possibilities, neither are becoming for you. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I'm the co-founder and creator of Drools, I did this before joining JBoss. The choice to license Drools under the Apache Software License was mine and done before joining JBoss - JBoss was later acquired by Red Hat. It is this license, that I chose, that grants those free and perpetual rights. In fact it is this license that ensures that neither I nor Red Hat nor anyone else contributing to Drools project may file a patent that is not covered under this free and perpetual rights, when that patent relates to Drools. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;While at Red Hat it was my choice to file the patent and my choice to do the work necessary for the patent, I could have chosen not to file a patent. Edson also had those same personal choices and we did the work together. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I would say considering those choices that I made I have a write to use the term "we". We as in myself, Edson and Red Hat. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"and not to the World" &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;You are trying to argue the points of assignment and usage and gift? I'm not sure which part of the following you don't get: &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work" " &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;It doesn't get more "gifting" than this. Well maybe it can. Having watched a user gorge themselves on christmas pudding, mince pies and port. I could wrap the patent in silver paper with stars on it, tie a red bow around it, put on my Red Fedora and climb down the chimney and ram it down their throats. Is that "gifty" enough for you? :) to clarify the term "their" I mean "the world". &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;......next? “&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Anyway I'm looking forward to what Jan Vanthienen, one of the decision table godfathers, has to say on the matter in the new year. I'm guessing that he's not pleased that someone took his work, changed the names used in the terminology and patented it.&lt;br /&gt;&lt;br /&gt;Mark&lt;br /&gt;Disclaimer: This post is made in a personal capacity. Nothing written above should be construed as Red Hat's corporate position.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-5929689426568616784?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=UFhvl3VU7Yc:Qu9pfQMy-Sg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=UFhvl3VU7Yc:Qu9pfQMy-Sg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=UFhvl3VU7Yc:Qu9pfQMy-Sg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=UFhvl3VU7Yc:Qu9pfQMy-Sg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=UFhvl3VU7Yc:Qu9pfQMy-Sg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=UFhvl3VU7Yc:Qu9pfQMy-Sg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=UFhvl3VU7Yc:Qu9pfQMy-Sg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=UFhvl3VU7Yc:Qu9pfQMy-Sg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=UFhvl3VU7Yc:Qu9pfQMy-Sg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=UFhvl3VU7Yc:Qu9pfQMy-Sg:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/UFhvl3VU7Yc" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/UFhvl3VU7Yc/decision-model-ip-trap-part-deux.html</link><author>noreply@blogger.com (Mark Proctor)</author><thr:total>5</thr:total><feedburner:origLink>http://blog.athico.com/2011/12/decision-model-ip-trap-part-deux.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-5749999901580275175</guid><pubDate>Tue, 20 Dec 2011 10:40:00 +0000</pubDate><atom:updated>2011-12-20T13:29:29.360Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">Drools Expert</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Drools : A Journey towards a Meta Framework for Hybrid Reasoning Systems</title><description>&lt;h2&gt;Introduction&lt;/h2&gt;Recent versions of Drools have started to show our direction towards a hybrid reasoning system, going beyond production rule systems. In 2011 we introduced prolog style derivation trees, with reactive materialised views, we also introduced traits. In 2012 we'll continue to build out more of the prolog like functionality and traits will expand to description logic for semantic reasoning.&lt;br /&gt;&lt;br /&gt;To make further progress I feel we need to smash apart our current infrustructure that is hard coded for the rigid way PRD systems where designed 30 years ago. In that time the structure of PRD systems hasn't change that much. In essence they have an agenda + conflict resolution strategy. Simple "groups" have been added by various systems be it a single push/pop stacks or rufeflows. Further execution control has been hard coded via attributes.&lt;br /&gt;&lt;br /&gt;If we could break Drools down into smaller components, each with life cycles, event models, hook points and designed for compositability - what would this look like? This would provide more of a meta framework, so the author can define how it's execution should behave and open up Drools to a wider variety of research and problem solving.&lt;br /&gt;&lt;br /&gt;Existing PRD behaviour can be easily provided as an "out of the box meta configuration", however it is hoped via "macro's" power users can implement other useful types of behaviours and provide those to end users as fully encapsulated macro's.&lt;br /&gt;&lt;br /&gt;By opening up the way that Drools components can be easily brought together we hope to make it easier for people to try out different research ideas - without having to develop yet another engine. This will allow ideas to go beyond that conceived by the core development team.&lt;br /&gt;&lt;br /&gt;I hope the introduction of a macro concept for rules will allow for a more pattern oriented approach to rule engine development.&lt;br /&gt;&lt;br /&gt;When reading this document please cast aside preconcieved ideas of what a  rule engine is or how it works. The document is conceptual in nature  and at this stage I would like conceptual input on how to progress the  ideas, and not spend 95% of the time argueing over which symbols or  keywords to use, or whether it's needed (see &lt;a href="http://www.bikeshed.com/"&gt;http://www.bikeshed.com&lt;/a&gt;). Expect many rough sketches, incomplete syntax etc, it is conceptual brain storming and not an implementation spec.&lt;br /&gt;&lt;br /&gt;Continuous updates to this article can be found &lt;a href="http://community.jboss.org/wiki/DroolsModule/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;h2&gt;Module&lt;/h2&gt;Additional ideas on modules for rules can be read as part of the research on Venus:&lt;br /&gt;&lt;a href="http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.56.6958"&gt;Venus: An Object-Oriented Extension of Rule-Based Programming (1998) &lt;/a&gt;&lt;br /&gt;&lt;a href="http://citeseer.ist.psu.edu/viewdoc/similar?doi=10.1.1.21.8486&amp;amp;type=ab"&gt;An Overview of the VenusDB Active Multidatabase System (1996) &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The module concept can be introduced as generic container for rules. The module consists of a name and arguments. Parenthesis can be ommitted if no arguments are specified. There are also further member variables, internal to the module. A module supports attributes. A module can specify a single parent module, there is a MAIN module which is the default parent of all modules. A module may optional extend other modules&lt;br /&gt;&lt;pre class="brush:java"&gt;&amp;lt;@attribute(....)&amp;gt;*&lt;br /&gt;module &amp;lt;module_name&amp;gt; ( &amp;lt;arguments&amp;gt;*)&lt;br /&gt; &amp;lt;parent module_name&amp;gt;? &lt;br /&gt; &amp;lt;extends &amp;lt;module_name&amp;gt;+&amp;gt;* &lt;br /&gt; &amp;lt;variables plus optional initialisation&amp;gt;*&lt;/pre&gt;A DRL can have multiple modules specified. Within the DRL file all rules that come after that module name are associated with the module.&lt;br /&gt;&lt;pre class="brush:drl"&gt;module A&lt;br /&gt; rule r1....&lt;br /&gt; end &lt;br /&gt;&lt;br /&gt; rule r2...&lt;br /&gt; end&lt;br /&gt;&lt;br /&gt;module B(String s, Person p) &lt;br /&gt; var Book b  &lt;br /&gt;&lt;br /&gt; rule r3... &lt;br /&gt; end  &lt;br /&gt;&lt;br /&gt; rule r4... &lt;br /&gt; end&lt;/pre&gt;NOTE) Can modules span namespaces? What does a namespce mean for a module, does it live within the namespace or is it global? For now assuming scoped to namespace.:&lt;br /&gt;&lt;br /&gt;A module can be called like a java Runnable, the caller's method signature must match the specified arguments or a runtime exception is thrown&lt;br /&gt;&lt;pre class="brush:java"&gt;Module m = kruntime.packages["org.domain"].modules["A"]&lt;br /&gt;ModuleHandle bhA = m.run()&lt;br /&gt;&lt;br /&gt;m = kruntime.packages["org.domain"].modules["B"]&lt;br /&gt;ModuleHandle mhB =m.run( "S", new Person("darth") );&lt;/pre&gt;The parameter variables are available to the rules inside of the module, in a similar manner that globals are. An array pattern referencing the arguments is injected as the root pattern to each rule. This not only makes the variables available but acts as a control object for when rules can fire with those variables. The ModuleHandle has a "stop" method that results in that array element being retracted, and thus the rule cannot fire any more for those variables. Even rules associated with that module that do not depend on those variables has the root control fact injected.&lt;br /&gt;&lt;pre class="brush:java"&gt;mhB.stop()&lt;/pre&gt;Note that a module can be called multple times with different arguments, each results in a different ModuleHandle. Should a module be called with existing arguments the previous ModuleHandle is returned. So you can consider a module instance module + variables.&lt;br /&gt;&lt;br /&gt;Passed module arguments may or may not be facts, if they are facts they may be modified (unlike globals) and patterns will respect and react to that change as normal. The module's called signature is updated.&lt;br /&gt;&lt;br /&gt;The role of member variables is for scoped data avaliable to events, such as counters or intermediary objects.&lt;br /&gt;&lt;br /&gt;(NOTE) If we want to make member variables available to rules, we will need to think carefuly about the behaviour, as they have more potentially more complications than globals. Currently they are only available as fields on events, see the activation-group variance.&lt;br /&gt;&lt;h2&gt;Match&lt;/h2&gt;A Match is the same as the traditional Activation concept in PRD systems. It has an array of FactHandle's for the matched objects. But we recognise the Match can be active or dormant, and use a boolean to represent this, and that even information on dormant matches can be useful in reasoning systems. A Match is considered active if it is ellible for for foring and has not yet done so.&lt;br /&gt;&lt;pre class="brush:java"&gt;Match &lt;br /&gt; FactHandle[] facts &lt;br /&gt; boolean active&lt;/pre&gt;(NOTE) Maybe instead of "boolean active" we should have an enum, and possible also including "running" as a state. ACTIVE, RUNNING, DORMANT.&lt;br /&gt;&lt;br /&gt;(NOTE) It's possible for a rule + facts to fire multiple times without relaxing (made false). We should optional keep a counter for the number of times fired, and even each execution can be time stamped.&lt;br /&gt;&lt;h2&gt;Module Properties&lt;/h2&gt;&lt;pre class="brush:java"&gt;Module Properties&lt;br /&gt;activeSize // number of active Matches, queries can be used for more complex cases using rule attributes&lt;br /&gt;dormantSize // number of dormant Matches, queries can be used for more complex cases using rule attributes&lt;br /&gt;activeMatches // Collection of active Matches&lt;br /&gt;dormantMatches // Collection of dormant Matches&lt;/pre&gt;(NOTE) The size and and collection properties only contain relevance for eager matching algorithms that compute an entire cross product for each WME change. Future versions of Drools may optionally implement some lazy matching and in those situations the user's understanding of those properties may be a problem.&lt;br /&gt;&lt;h2&gt;Module Methods&lt;/h2&gt;&lt;pre class="brush:java"&gt;Module Methods&lt;br /&gt; cancel() // all active matches are made dormant&lt;br /&gt; cancel( Match ) // cancels a match, i.e. sets it dormant, if already dormant this method does nothing.&lt;br /&gt; refresh() // all dormant activates are made active, however filters such as calendars, enabled etc are still obeyed&lt;br /&gt; refresh( Match ) // refreshes a match, i.e. sets it active if it's dormant, if it's already active it is ignored&lt;br /&gt; halt() // The state of the module is preserved, but no&lt;br /&gt; continue() //&lt;br /&gt; addListener() // type inference adds the listener implementation to the correct list(s).                  &lt;br /&gt;               // Listener composition for  single instance is allowed, meaning it is added to multiple listener lists.&lt;br /&gt; start(Object[] args)&lt;br /&gt; stop() &lt;/pre&gt;&lt;h2&gt;Module Events and Lifecycle&lt;/h2&gt;A Module has a life cycle to which listeners may be added.&lt;br /&gt;&lt;pre class="brush:java"&gt;Module Events&lt;br /&gt;onEnter // when a module is called&lt;br /&gt;onExit  // when a module is stopped&lt;br /&gt;onMatch // when a rule is matched&lt;br /&gt;onRematch // when a rule is matched and is matched again, without relaxing first (via update)&lt;br /&gt;onUnmatch // when a rule stops being matched&lt;br /&gt;onBeforeFire // before a rule for this module fires&lt;br /&gt;onAfterFire // after a rule for this module fires&lt;br /&gt;onHalt // tells the listener halt has been callled&lt;br /&gt;onResume // tells the listeners resume ahs been called&lt;br /&gt;onEmpty // when the size == 0, all Matches are dormant -- other potential events --&lt;br /&gt;onBeforeRuleEvaluation // before a wme insert/update/delete for this module&lt;br /&gt;onAfterRuleEvaluation// after a wme insert/update/delete for this module&lt;/pre&gt;&lt;br /&gt;onEmpty will only be triggered after the first rule evaluation phase. i.e. it does not fire after onEnter, before the rule evaluation phase has had a chance to execute.&lt;br /&gt;&lt;br /&gt;(NOTE) Other potential events are before/after rule evaluation. Each WME insert/modify/update causes a rule evaluation, and could be listend to via onBeforeRuleEvaluation and OnAfterRuleEvaluation. This poses problems with concurrency where potentially multiple insertions/updates/modifies could be happening at the same time. So at best it's a listener scoped to a fact, we cannot guarantee the resutling matches are assocated with this event, unless serial rule evaluation is enforced - which may be a possible configuration for a module.&lt;br /&gt;&lt;br /&gt;DRL will support the ability to declare literal functions attached to these listeners, the exact syntax for this is TBD. But the keyword will probaby be "on.". We will support .Net style delegate operators for = and += when adding or setting listeners.&lt;br /&gt;&lt;pre class="brush:java"&gt;on.Enter += {&lt;br /&gt;}&lt;/pre&gt;Those listeners can also be added from java code.&lt;br /&gt;&lt;h2&gt;Simulation the Agenda&lt;/h2&gt;&lt;br /&gt;A Module itself doesn't do anything other than obey the life cycle of the prescribed events, it doesn't even fire a rule, making it dormant. The only thing the Module does is maintain the list of active and dormant matches.&lt;br /&gt;&lt;br /&gt;However this then allows a much more flexible system to which the end user can customise the behaviour. For instance the traditional agenda+conflict resolution strategy can be implemented via the onMatch/onRematch/onUnmatch listeners.&lt;br /&gt;&lt;pre class="brush:java"&gt;class Agenda implements onMatch, onUnmatch, onRematch { &lt;br /&gt; ....&lt;br /&gt;}&lt;/pre&gt;The above class implements a composition of event listener interfaces, but it only needs to be added to the module once&lt;br /&gt;&lt;pre class="brush:java"&gt;module.addListener( new Agenda() );&lt;/pre&gt;This means each module may have it's own conflict resolution strategy. Some may want more traditional lifo execution, but anything else is possible. Such as rule definition order, or async execution. Listeners can be combined, but that means that order IS important. Some listeners may want to preevent a rule from firing, others may want to prever other rules from firing after the current rule has fired.&lt;br /&gt;&lt;h2&gt;Async rule execution&lt;/h2&gt;Fire each match asyncronously as it matches.&lt;br /&gt;&lt;pre class="brush:java"&gt;onMatch + { asyncFire( match ); }&lt;br /&gt;&lt;/pre&gt;&lt;h2&gt;Manual Interaction Agenda&lt;/h2&gt;Because the listeners are now fully pluggable and whether a rule fires or does not, or is cancelled is fully pragmatic it is possible to just expose the Module via an interactive GUI and the end user can see the conflict set and specify which rule(s) to fire.&lt;br /&gt;&lt;br /&gt;As WME actions occur the users GUI will be updated showing the active matches, however none will fire without user selection. This means the user can interrogate the state of each Match and the fact it contains to select whch rules to fire. The user can also see dormant matches and "refresh" them so they can become available for firing again.&lt;br /&gt;&lt;br /&gt;This could be taken a step further where a user sees a dash board of modules and all are inactive and the user can manually activate modules they wish to see evaluated.&lt;br /&gt;&lt;h2&gt;Simulating existing rule execution behviours&lt;/h2&gt;&lt;h2&gt;activation-group plus variance&lt;/h2&gt;Other rule attribute behaviours can be implemented by combining listeners, although listener order is obviously important. For instance this listener can be added AFTER the agenda listener, and it simulates the existing "activation-group" behaviour, such that only the first activation fires for a conflict.&lt;br /&gt;activation-group&lt;br /&gt;&lt;pre class="brush:java"&gt;onMatch += { &lt;br /&gt; module.cancel(); // cancels all other matches&lt;br /&gt;}&lt;/pre&gt;We could do a variance on this that fires the first 3 activations, and cancels the rest&lt;br /&gt;&lt;pre class="brush:java"&gt;onEnter += { count = 0 } // count is a module member variable&lt;br /&gt;onMatch += { &lt;br /&gt; if ( count++ == 3 ) {      &lt;br /&gt;      module.cancel(); // cancels all other matches    ]&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;h2&gt;ruleflow-group&lt;/h2&gt;ruleflow-group behaviour is very simple to simulate. jBPM injects a trigger member variable, that on exit calls telling jBPM to trigger the next nodes in the flow, which may be ruleflow-group nodes or other jBPM nodes&lt;br /&gt;&lt;pre class="brush:java"&gt;onEmpty { module.stop() } // stopping the module causes onExit to fire&lt;br /&gt;onExit + {&lt;br /&gt; node.triggerCompleted()&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;h2&gt;agenda-groups &lt;/h2&gt;agenda-groups implement a push/pop stack behaviour. Only the stack tip executes, the others are considered "halted". To acehive this the consequence of any rule needs to call the following three methods:&lt;br /&gt;&lt;pre class="brush:java"&gt;module1.halt();&lt;br /&gt;module2.onExit += { module1.resume() };&lt;br /&gt;module2.call();&lt;br /&gt;&lt;/pre&gt;So that halts the current module and executes "pushes" the next module, when that module finishes "pops" the caller is resumed.&lt;br /&gt;&lt;br /&gt;Simulating agenda-filters&lt;br /&gt;If a match is cancelled, and made dormant it is not propagated to the next listener in the onMatch event.&lt;br /&gt;&lt;pre class="brush:java"&gt;onMatch += {&lt;br /&gt; if ( &amp;lt;boolean expr&amp;gt; ) {&lt;br /&gt;     module.cancel( match );&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;h2&gt;Events as facts&lt;/h2&gt;Events are also inserted as facts, so can be matched in rules too. Member variables are fields on the events&lt;br /&gt;&lt;pre class="brush:java"&gt;rule  activationGroupVariance when &lt;br /&gt; m : OnMatch( count &amp;lt; 3 )&lt;br /&gt;then &lt;br /&gt;m.count++&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;h2&gt;Parent Modules and Module Scoping&lt;/h2&gt;Modules can contain sub modules, they can ony be called from within the scope of the parent module.Sub modules will have access othe parent modules member variables and parameter variables.&lt;br /&gt;&lt;h2&gt;Module Reuse and Extension&lt;/h2&gt;A module can extend other modules. The exact semantics of this will need a lot more extensive though, but i'll outline something to get started. When a module extends another module it effectively copies the definitions of all the contained rules.However those rules will match and fire completely indepedantly of the source.&lt;br /&gt;&lt;h2&gt;Macro's to abstract module configuration&lt;/h2&gt;All this manual configuration would become very cumbersome to the end user, and potentially far too complex. The idea is that all the above complexity is for power users, this is then encapsulated via macro's for end users. I don't intend to outline a Macro system for Drools yet, as that is a different subject in itself and will need a lot of though. For now I'll use &amp;lt;macro "name"&amp;gt;, pontentially these can be listed. But how macro's are defined and applied are completely open to debate. These macro's are then expanded at complie time to provide all the required listener behaviour:&lt;br /&gt;&lt;pre class="brush:java"&gt;Module xxxx &lt;br /&gt;macro activationGroup( "g1" )&lt;br /&gt;&lt;br /&gt;module xxx &lt;br /&gt;macro agenda module xxx &lt;br /&gt;macro agenda activationGroup( "g1 )&lt;br /&gt;&lt;br /&gt;module xxx &lt;br /&gt;macro default&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-5749999901580275175?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6zp4-SZ6pp4:A31KPMFYs2g:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6zp4-SZ6pp4:A31KPMFYs2g:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6zp4-SZ6pp4:A31KPMFYs2g:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=6zp4-SZ6pp4:A31KPMFYs2g:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6zp4-SZ6pp4:A31KPMFYs2g:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=6zp4-SZ6pp4:A31KPMFYs2g:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6zp4-SZ6pp4:A31KPMFYs2g:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6zp4-SZ6pp4:A31KPMFYs2g:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=6zp4-SZ6pp4:A31KPMFYs2g:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6zp4-SZ6pp4:A31KPMFYs2g:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/6zp4-SZ6pp4" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/6zp4-SZ6pp4/drools-journey-towards-meta-framework.html</link><author>noreply@blogger.com (Mark Proctor)</author><thr:total>1</thr:total><feedburner:origLink>http://blog.athico.com/2011/12/drools-journey-towards-meta-framework.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-6697995059989126343</guid><pubDate>Tue, 20 Dec 2011 10:15:00 +0000</pubDate><atom:updated>2011-12-20T12:38:13.165Z</atom:updated><category domain="http://www.blogger.com/atom/ns#">release</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Drools 5.4.0.Beta1 released</title><description>We're happy to announce the release of Drools (Expert, Fusion, Planner, Guvnor) &lt;b&gt;5.4.0.Beta1&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Beta1 finally  introduces the simulation and testing work that we've been talking about for so long. This will provide a unified environment for simulation and testing over time for rules, workflow and event processing. Beta1 also demonstrates our continued effort to fully commodotise the decison table paradigm, using the excellent research provided by Jan Vanthienen's &lt;a href="http://www.econ.kuleuven.be/prologa/"&gt;Prologa &lt;/a&gt;project, some high lights for the decision table improvements are listed below.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Limited and Extended entry wizards&lt;/li&gt;&lt;li&gt;Automatic decision table generation to expanded form&lt;/li&gt;&lt;li&gt;Improved rule templating flexibility&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Work Item integration (declarative lazy environment bound functions)&lt;/li&gt;&lt;li&gt;Impossible Match detection&lt;/li&gt;&lt;li&gt;Conflict Match detection&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Documtation, Release Notes and Downloads are detailed below:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Download the zips from the bottom of &lt;a href="http://www.jboss.org/drools/downloads"&gt;the drools download page&lt;/a&gt;.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;To try out the examples, just unzip one and run a &lt;font style="Courier New&amp;quot;,Courier,monospace;" face="&amp;quot;"&gt;runExamples.sh/.bat&lt;/font&gt; script.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;See the JBoss Maven repository for &lt;a href="https://repository.jboss.org/nexus/index.html#nexus-search;gav%7Eorg.drools*%7E%7E5.4.0.Beta1%7E%7E"&gt;a list of all released artifacts&lt;/a&gt;.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;It will be synced to &lt;a href="http://search.maven.org/#search%7Cga%7Beta1%7Corg.drools"&gt;Maven Central&lt;/a&gt; automatically in a couple of hours.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://docs.jboss.org/drools/release/5.4.0.Beta1/droolsjbpm-introduction-docs/html/releaseNotesBeta1.html"&gt;Read the new and noteworthy changes here.&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;Try it out and give us some feed-back (&lt;a href="http://www.jboss.org/drools/lists"&gt;user list&lt;/a&gt;, &lt;a href="https://issues.jboss.org/browse/JBRULES"&gt;issue tracker&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5869426-6697995059989126343?l=blog.athico.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6isvDEYgLFY:RL4Ebw1ZhvQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6isvDEYgLFY:RL4Ebw1ZhvQ:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6isvDEYgLFY:RL4Ebw1ZhvQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=6isvDEYgLFY:RL4Ebw1ZhvQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6isvDEYgLFY:RL4Ebw1ZhvQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=6isvDEYgLFY:RL4Ebw1ZhvQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6isvDEYgLFY:RL4Ebw1ZhvQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6isvDEYgLFY:RL4Ebw1ZhvQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?i=6isvDEYgLFY:RL4Ebw1ZhvQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~ff/DroolsRSS?a=6isvDEYgLFY:RL4Ebw1ZhvQ:jWeZv7XsJd0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DroolsRSS?d=jWeZv7XsJd0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DroolsRSS/~4/6isvDEYgLFY" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/6isvDEYgLFY/drools-540beta1-released.html</link><author>noreply@blogger.com (Toni Rikkola)</author><thr:total>1</thr:total><feedburner:origLink>http://blog.athico.com/2011/12/drools-540beta1-released.html</feedburner:origLink></item></channel></rss>

