<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.athico.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.athico.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/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>Thu, 24 Jul 2008 15:34:13 +0000</lastBuildDate><title>Drools - Business Logic integration Platform</title><description /><link>http://blog.athico.com/</link><managingEditor>noreply@blogger.com (Mark Proctor)</managingEditor><generator>Blogger</generator><openSearch:totalResults>218</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.athico.com/DroolsRSS" type="application/rss+xml" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-3356369437546369340</guid><pubDate>Wed, 23 Jul 2008 14:37:00 +0000</pubDate><atom:updated>2008-07-23T15:48:40.690+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Guvnor</category><category domain="http://www.blogger.com/atom/ns#">BRMS</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Drools Flow view in Guvnor with GWT Diagram</title><description>We now have Guvnor displaying uploaded Drools Flow files. We use the native GWT XML api to read in the XML document and GWT Diagram to generate the diagram. At the moment it's view only, over time we will make it editable - which will sure beat round tripping with Visio that other platforms do.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Jrhwx8X9P7g/SIdDFV9o0oI/AAAAAAAAALI/FRTmCe-msSA/s1600-h/ruleflowguvnorhx4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_Jrhwx8X9P7g/SIdDFV9o0oI/AAAAAAAAALI/FRTmCe-msSA/s400/ruleflowguvnorhx4.png" alt="" id="BLOGGER_PHOTO_ID_5226219651660829314" border="0" /&gt;&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=Ei3BXJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=Ei3BXJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=1M2kzJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=1M2kzJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=cQz0Wj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=cQz0Wj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=JEcnCj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=JEcnCj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=mWuMxJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=mWuMxJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=mKUNbj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=mKUNbj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=6nAN4J"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=6nAN4J" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/343619307" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/343619307/drools-flow-view-in-guvnor-with-gwt.html</link><author>noreply@blogger.com (Mark Proctor)</author><feedburner:origLink>http://blog.athico.com/2008/07/drools-flow-view-in-guvnor-with-gwt.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-5364257180196665737</guid><pubDate>Tue, 22 Jul 2008 22:42:00 +0000</pubDate><atom:updated>2008-07-22T23:52:30.980+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Guvnor</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>GuvnorNG</title><description>Work has already begun on GuvnorNG, which is the next generation web framework for Drools, which will hopefully be delivered next year. GuvnorNG is being written to provide the foundations for the JBoss SOA Platform governance tooling, so we need to make every aspect of it pluggable. So it'll have pluggable viewers and editors, be more flexible on the content types it can store and support dashboard layouts. Mike Brock, the &lt;a href="http://mvel.codehaus.org/"&gt;MVEL&lt;/a&gt;author, is the main person behind this at the moment. It's very early stages and Mike is working on the foundations, particularly state management and pluggability. He has made a screen caste so people can see it working, notice at the end how the refresh does not lose any state. You can find the Screencast &lt;a href="http://www.screencast.com/users/MikeBrock/folders/Jing/media/f1477b52-36e2-4880-a579-26922e78ba04"&gt;here&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;As always Mike is looking for contributors, it's a very interesting project that can be usable standalone, outside of Drools, for any enterprise to develop their governance software and dashboards with.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=8KaDsJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=8KaDsJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=mWOYGJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=mWOYGJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=NXre6j"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=NXre6j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=6SnWgj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=6SnWgj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=UK85cJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=UK85cJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=nmcnzj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=nmcnzj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=Gdr3jJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=Gdr3jJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/342981157" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/342981157/guvnorng.html</link><author>noreply@blogger.com (Mark Proctor)</author><feedburner:origLink>http://blog.athico.com/2008/07/guvnorng.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-4375864796657141191</guid><pubDate>Sat, 19 Jul 2008 00:23:00 +0000</pubDate><atom:updated>2008-07-19T01:45:58.036+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Guvnor</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Rolodex Panel Assembly for Guvnor (Anton Arhipov)</title><description>In my previous post about &lt;a href="http://blog.athico.com/2008/07/integrating-rolodex-to-guvnor-for-image.html"&gt;integrating rolodex into Guvnor&lt;/a&gt; I tried to create the example just with a set of &lt;span style="font-weight: bold;"&gt;pre-compiled&lt;/span&gt; images which are then assembled into drools-guvnor.war. But the real goal is actually to display the pictures stored in Jackrabbit repository for Guvnor.&lt;br /&gt;Now, after some experiments with rolodex and Guvnor, I have a widget where one may upload a picture and display it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Jrhwx8X9P7g/SIE08ALl5FI/AAAAAAAAALA/8nc0Hfn7dyY/s1600-h/rolodex-working-widget-single-image.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_Jrhwx8X9P7g/SIE08ALl5FI/AAAAAAAAALA/8nc0Hfn7dyY/s400/rolodex-working-widget-single-image.png" alt="" id="BLOGGER_PHOTO_ID_5224515248171902034" border="0" /&gt;&lt;/a&gt;Currently it can accept &lt;span style="font-weight: bold;"&gt;only one picture per RuleAsset&lt;/span&gt; class instance. Therefore the content handler for this asset should be extended to support multiple images per RuleAsset.&lt;pre&gt;RolodexCardBundle images = getImagesFromAsset();&lt;br /&gt;RolodexCard[] rolodexCards = images.getRolodexCards();&lt;br /&gt;if (rolodexCards.length &gt; 0) {&lt;br /&gt;   final RolodexPanel rolodex =&lt;br /&gt;   new RolodexPanel(images, 3, rolodexCards[0], true);&lt;br /&gt;   layout.addRow(rolodex);&lt;br /&gt;}&lt;/pre&gt;I have set the hight of the panel manually as the picture was cropped otherwise in the widget. (Don't know the reason yet). &lt;span style="font-weight: bold;"&gt;getImagesFromAsset()&lt;/span&gt; is used for converting the asset's content to the RolodexCard:&lt;pre&gt;public RolodexCardBundle getImagesFromAsset() {&lt;br /&gt;   return new RolodexCardBundle() {&lt;br /&gt;      ClippedImagePrototype clip = new ClippedImagePrototype(&lt;br /&gt;         GWT.getModuleBaseURL() + "asset?" + HTMLFileManagerFields.FORM_FIELD_UUID &lt;br /&gt;                                +  "=" + asset.uuid, 0, 0, 300, 200 );&lt;br /&gt;&lt;br /&gt;      RolodexCard card = new RolodexCard(clip, clip, clip, 300, 100, 10);&lt;br /&gt;&lt;br /&gt;      public int getMaxHeight() {&lt;br /&gt;        return 200;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      public RolodexCard[] getRolodexCards() {&lt;br /&gt;        return new RolodexCard[]{card};&lt;br /&gt;     }&lt;br /&gt;  };&lt;br /&gt;}&lt;/pre&gt;I've cheated with the code that composes the RolodexCard, as ClippedImagePrototype's javadoc says:&lt;blockquote&gt;This class is used internally by the image bundle generator and is not intended for general use. It is subject to change without warning.&lt;/blockquote&gt;But the implementation of ClippedImagePrototype is actually what I need. Probably, if it is really the subject to change at any time, I would rather cope'n'paste this class into Guvnor code base.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;TODO:&lt;/span&gt;&lt;br /&gt;A heavy part of the work will have to be carried out by the content handler. The content handler will have to support the multiple images per asset and also perform some graphics routines in order to replace the pre-compilation phase implemented in rolodex to adjust images.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=QN0G9J"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=QN0G9J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=QH0W7J"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=QH0W7J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=tKe4uj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=tKe4uj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=CdXaDj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=CdXaDj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=Ls4u2J"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=Ls4u2J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=gNzjyj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=gNzjyj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=ibtx0J"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=ibtx0J" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/339474465" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/339474465/rolodex-panel-assembly-for-guvnor-anton.html</link><author>noreply@blogger.com (Mark Proctor)</author><feedburner:origLink>http://blog.athico.com/2008/07/rolodex-panel-assembly-for-guvnor-anton.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-7085764878833022715</guid><pubDate>Fri, 18 Jul 2008 21:12:00 +0000</pubDate><atom:updated>2008-07-18T22:25:09.892+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Guvnor</category><category domain="http://www.blogger.com/atom/ns#">BRMS</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Guvnor BRMS and Eclipse Synchronisation</title><description>The Guvnor (BRMS) and Eclipse synchronisation tool has made leaps and bounds in progress for the upcoming 5.0 Milestone 2 release. It now has full bi-direction synchronisation of files between Eclipse and Guvnor. A developer can now work locally with a rule, or other Guvnor assets, they can do lots of small commits to their SCM of choice and when they need to can upload or synchronise that asset with Guvnor. Eclipe diff viewing is also supported.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Jrhwx8X9P7g/SIEJX0bhzUI/AAAAAAAAAKo/eZpKfrPSNFM/s1600-h/guvnor-synch+.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_Jrhwx8X9P7g/SIEJX0bhzUI/AAAAAAAAAKo/eZpKfrPSNFM/s400/guvnor-synch+.png" alt="" id="BLOGGER_PHOTO_ID_5224467347542232386" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Synchronisation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Jrhwx8X9P7g/SIEJYsvVJ2I/AAAAAAAAAKw/ki6hL1C8sr8/s1600-h/compare.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_Jrhwx8X9P7g/SIEJYsvVJ2I/AAAAAAAAAKw/ki6hL1C8sr8/s400/compare.png" alt="" id="BLOGGER_PHOTO_ID_5224467362657675106" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Diff Viewer&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Jrhwx8X9P7g/SIEJY8bHFFI/AAAAAAAAAK4/_S56r1PV8IM/s1600-h/version-history.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_Jrhwx8X9P7g/SIEJY8bHFFI/AAAAAAAAAK4/_S56r1PV8IM/s400/version-history.png" alt="" id="BLOGGER_PHOTO_ID_5224467366867833938" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Version History&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=nfhjcJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=nfhjcJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=snKLkJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=snKLkJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=4NKZ9j"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=4NKZ9j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=iDEghj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=iDEghj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=HsDedJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=HsDedJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=0Lctrj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=0Lctrj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=vuSEaJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=vuSEaJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/339351398" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/339351398/guvnor-brms-and-eclipse-synchronisation.html</link><author>noreply@blogger.com (Mark Proctor)</author><feedburner:origLink>http://blog.athico.com/2008/07/guvnor-brms-and-eclipse-synchronisation.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-1186203671980766848</guid><pubDate>Tue, 15 Jul 2008 21:18:00 +0000</pubDate><atom:updated>2008-07-15T23:30:14.688+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Guvnor</category><category domain="http://www.blogger.com/atom/ns#">BRMS</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Integrating Rolodex to Guvnor for Image Asset Types</title><description>In &lt;a href="http://blog.athico.com/2008/04/brms-for-drools-5.html"&gt;Guvnor&lt;/a&gt;, there are many different widgets that are used to display or edit different assets. One interesting widget is about to be added - a widget that could accept images and display them. For this purpose, &lt;a href="http://code.google.com/p/gwt-rolodex/"&gt;rolodex&lt;/a&gt;, a widget that can display a stack of images, can be used. Rolodex uses deferred binding for the image generation and animation. Let's see how can we quickly add a new widget displaying some predefined images.&lt;br /&gt;&lt;br /&gt;First, create a class, implementing RolodexCardBundle interface (from the rolodex library) and declare a few methods that will return the images (just like ImageBundle described in &lt;a href="http://arhipov.blogspot.com/2008/06/studying-google-web-toolkit.html"&gt;the book&lt;/a&gt;):&lt;pre&gt;public abstract class Images implements RolodexCardBundle {&lt;br /&gt;&lt;br /&gt;   /**&lt;br /&gt;    * @gwt.resource img_3861.jpg&lt;br /&gt;    */&lt;br /&gt;   public abstract RolodexCard imgA();&lt;br /&gt;&lt;br /&gt;   /**&lt;br /&gt;    * @gwt.resource img_3863.jpg&lt;br /&gt;    */&lt;br /&gt;   public abstract RolodexCard imgB();&lt;br /&gt;&lt;br /&gt;   /**&lt;br /&gt;    * @gwt.resource img_3865.jpg&lt;br /&gt;    */&lt;br /&gt;   public abstract RolodexCard imgC();&lt;br /&gt;&lt;br /&gt;   ...&lt;br /&gt;&lt;br /&gt;   private final RolodexCard[] cards = new RolodexCard[]{ imgA(), imgB(), imgC() };&lt;br /&gt;&lt;br /&gt;   public RolodexCard[] getRolodexCards() {&lt;br /&gt;      return cards;&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;Next, to display those images, create ImageSetWidget (or you-name-it) class extending DirtyableComposite:&lt;pre&gt;public class ImageSetEditor extends DirtyableComposite {&lt;br /&gt; // asset and viewer are not used now...&lt;br /&gt; public ImageSetEditor(RuleAsset asset, RuleViewer viewer) {&lt;br /&gt;   final Images images = (Images) GWT.create(Images.class);&lt;br /&gt;   final RolodexPanel rolodex&lt;br /&gt;        = new RolodexPanel(images, 3, images.imgA(), true);&lt;br /&gt;   initWidget(rolodex);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;For Guvnor to be able to launch the editor, we have to modify EditorLauncher class:&lt;pre&gt;...&lt;br /&gt;else if (asset.metaData.format.equals(AssetFormats.IMAGE_SET)) {&lt;br /&gt; return new ImageSetEditor(asset, viewer);&lt;br /&gt;...&lt;/pre&gt;AssetFormats should be supplied with the new constant for this new type, of course.&lt;br /&gt;&lt;br /&gt;To allow user to create such widgets in UI, a new menu item needs to be added.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_flYJTi1O_TE/SHzuHT_as6I/AAAAAAAAFVI/nGEIXClXNcA/s1600-h/menu-imageset.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_flYJTi1O_TE/SHzuHT_as6I/AAAAAAAAFVI/nGEIXClXNcA/s320/menu-imageset.png" alt="" id="BLOGGER_PHOTO_ID_5223311477235692450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This means, ExplorerLayoutManger#rulesNewMenu() should be modified&lt;pre&gt;m.addItem(new Item("New ImageSet",&lt;br /&gt; new BaseItemListenerAdapter() {&lt;br /&gt;   public void onClick(BaseItem item, EventObject e) {&lt;br /&gt;     launchWizard(AssetFormats.IMAGE_SET, "New ImageSet", true);&lt;br /&gt;   }&lt;br /&gt;}, "images/rule_asset.gif"));&lt;/pre&gt;&lt;br /&gt;And last, but not least we need to include the following line in Guvnor.gwt.xml&lt;pre&gt;&amp;lt;inherits name='com.yesmail.gwt.rolodex.Rolodex'/&amp;gt;&lt;/pre&gt;Now, after the project has been rebuilt and redeployed we get the following widget on the screen:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_flYJTi1O_TE/SHzwb3HUh5I/AAAAAAAAFVQ/ob4OtINhikM/s1600-h/rolodex-in-guvnor.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_flYJTi1O_TE/SHzwb3HUh5I/AAAAAAAAFVQ/ob4OtINhikM/s320/rolodex-in-guvnor.png" alt="" id="BLOGGER_PHOTO_ID_5223314029284722578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Currenly, the widget is displaying a predefined set of images and animates them as we roll the mouse over. So we have now a rolodex-powered widget inside Guvnor. Sounds cool! :)&lt;br /&gt;&lt;br /&gt;Now, there are a lot of &lt;span style="font-style: italic;"&gt;TODO&lt;/span&gt;s to make use of this new cool widget.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Menus should be pluggable.&lt;/span&gt; So far I knew that the only class that we should generate in order to support adding new rule editor widgets. Without doubt, a user needs a button to create the widget in his workspace, and therefor we should inject the new menu item. I suppose we can generate this part also. Therefore we need to extract the ExplorerLayoutManger#rulesNewMenu() method into a separate class.&lt;br /&gt;Currently I have an ant task ready to generate a new EditorLauncher class source to plug a new asset type editor. But perhaps, if we have more of these classes to be generated, I'd better add a new ruby script to do this job.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Upload of new images.&lt;/span&gt; There's no use of this widget if it can redisplay only the predefined set of images.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_flYJTi1O_TE/SH0jNtCgxmI/AAAAAAAAFZ8/syOISc2idEc/s1600-h/extended-rolodex-widget-in-guvnor.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_flYJTi1O_TE/SH0jNtCgxmI/AAAAAAAAFZ8/syOISc2idEc/s320/extended-rolodex-widget-in-guvnor.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5223369861155047010" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;RuleAsset support for images.&lt;/span&gt;The images should be supplied via the RuleAsset, i.e. the content should be a class that could represent a set of images.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A &lt;span style="font-weight: bold;"&gt;content handler&lt;/span&gt; is required as well.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=x6i27J"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=x6i27J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=bV9crJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=bV9crJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=5UfBCj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=5UfBCj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=Wt3Fmj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=Wt3Fmj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=1gVMWJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=1gVMWJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=XBZtMj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=XBZtMj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=sUAOpJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=sUAOpJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/336451530" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/336451530/integrating-rolodex-to-guvnor-for-image.html</link><author>noreply@blogger.com (Anton Arhipov)</author><feedburner:origLink>http://blog.athico.com/2008/07/integrating-rolodex-to-guvnor-for-image.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-6620570859479050178</guid><pubDate>Tue, 15 Jul 2008 00:18:00 +0000</pubDate><atom:updated>2008-07-15T01:30:55.734+01:00</atom:updated><title>SVN url changes &amp; a funny video</title><description>For those that care, our SVN urls have changed due to a migration. The repositories are the same, but the URLS different:&lt;br /&gt;&lt;br /&gt;Developer URL: https://svn.jboss.org/repos/labs/labs/jbossrules/trunk/&lt;br /&gt;Anonymous URL: http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/&lt;br /&gt;&lt;br /&gt;If you have an existing working copy, you can use svn switch like following:&lt;br /&gt;&lt;br /&gt;svn switch --relocate https://svn.labs.jboss.org/labs/jbossrules/trunk https://svn.jboss.org/repos/labs/labs/jbossrules/trunk .&lt;br /&gt;&lt;br /&gt;(for developers).&lt;br /&gt;&lt;br /&gt;Also, some may remember I mentioned Fair Isaac's "falcon" fraud detection system some time ago - which is in use by ANZ bank. I finally found the advertisement for this, I always think it is funny:&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/1zDwIfSDQiE&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/1zDwIfSDQiE&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" height="344" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;What is interesting is that they are promoting a fraud detection system as a strategic advantage,&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=0Lv6kJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=0Lv6kJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=0P8I6J"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=0P8I6J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=TeJ4Oj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=TeJ4Oj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=2k4Zxj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=2k4Zxj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=ImfvzJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=ImfvzJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=kTnZjj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=kTnZjj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=37gDOJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=37gDOJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/335579348" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/335579348/svn-url-changes-funny-video.html</link><author>noreply@blogger.com (Michael Neale)</author><feedburner:origLink>http://blog.athico.com/2008/07/svn-url-changes-funny-video.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-1312356275751087371</guid><pubDate>Wed, 09 Jul 2008 14:23:00 +0000</pubDate><atom:updated>2008-07-09T18:50:36.107+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">WordNet</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Drools and WordNet</title><description>Someone has made a working implementation of WordNet for Drools and posted it to the user mailing list, andI thought others might find it interesting so I've blogged it here. The link below is for the email and contains the paste code.&lt;br /&gt;&lt;a href="http://www.mail-archive.com/rules-users@lists.jboss.org/msg05918.html"&gt;http://www.mail-archive.com/rules-users@lists.jboss.org/msg05918.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/WordNet"&gt;http://en.wikipedia.org/wiki/WordNet&lt;/a&gt;&lt;br /&gt;&lt;b&gt;WordNet&lt;/b&gt; is a &lt;a href="http://en.wikipedia.org/wiki/Semantic_lexicon" title="Semantic lexicon"&gt;semantic lexicon&lt;/a&gt; for the &lt;a href="http://en.wikipedia.org/wiki/English_language" title="English language"&gt;English language&lt;/a&gt;. It groups English words into sets of synonyms called &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Synsets" class="mw-redirect" title="Synsets"&gt;synsets&lt;/a&gt;&lt;/i&gt;, provides short, general definitions, and records the various &lt;a href="http://en.wikipedia.org/wiki/Semantic" class="mw-redirect" title="Semantic"&gt;semantic&lt;/a&gt; relations between these &lt;a href="http://en.wikipedia.org/wiki/Synonym" title="Synonym"&gt;synonym&lt;/a&gt; sets. The purpose is twofold: to produce a combination of &lt;a href="http://en.wikipedia.org/wiki/Dictionary" title="Dictionary"&gt;dictionary&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Thesaurus" title="Thesaurus"&gt;thesaurus&lt;/a&gt; that is more intuitively usable, and to support automatic text analysis and &lt;a href="http://en.wikipedia.org/wiki/Artificial_intelligence" title="Artificial intelligence"&gt;artificial intelligence&lt;/a&gt; applications. The database and software tools have been released under a &lt;a href="http://en.wikipedia.org/wiki/BSD_License" class="mw-redirect" title="BSD License"&gt;BSD style license&lt;/a&gt; and can be downloaded and used freely. The &lt;a href="http://en.wikipedia.org/wiki/Database" title="Database"&gt;database&lt;/a&gt; can also be browsed &lt;a href="http://en.wikipedia.org/wiki/Online" class="mw-redirect" title="Online"&gt;online&lt;/a&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=V9S5eJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=V9S5eJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=iA9lmJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=iA9lmJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=dL7FSj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=dL7FSj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=riBS8j"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=riBS8j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=hpztFJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=hpztFJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=3GUyDj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=3GUyDj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=w85g2J"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=w85g2J" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/330829492" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/330829492/drools-and-wordnet.html</link><author>noreply@blogger.com (Mark Proctor)</author><feedburner:origLink>http://blog.athico.com/2008/07/drools-and-wordnet.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-972015711220579740</guid><pubDate>Wed, 09 Jul 2008 14:20:00 +0000</pubDate><atom:updated>2008-07-09T15:22:53.036+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Performance</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Drools Scalability</title><description>We often get asked about Drools scalability in complex apps, so I thought I would link to this posting just done, where someone has Drools scaling to 900K facts on a 64bit JVM with reasonable performance.&lt;br /&gt;&lt;a href="http://www.mail-archive.com/rules-users@lists.jboss.org/msg05922.html"&gt;http://www.mail-archive.com/rules-users@lists.jboss.org/msg05922.html&lt;/a&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=Ib52SJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=Ib52SJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=2XAQhJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=2XAQhJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=7QI9Xj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=7QI9Xj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=8Ehy9j"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=8Ehy9j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=woCXpJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=woCXpJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=SRznCj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=SRznCj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=uxHxcJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=uxHxcJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/330822443" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/330822443/drools-scalability.html</link><author>noreply@blogger.com (Mark Proctor)</author><feedburner:origLink>http://blog.athico.com/2008/07/drools-scalability.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-8821311028487996855</guid><pubDate>Sun, 06 Jul 2008 17:26:00 +0000</pubDate><atom:updated>2008-07-07T02:02:55.882+01:00</atom:updated><title>Drools and Machine Learning</title><description>&lt;div&gt;&lt;div&gt;I'm Gizil. I am doing my master thesis in Drools project. I'm working on decision trees. I have made an ID3, C4.5 implementation with rule generation. I'm investigating bagging and boosting algorithm in order to produce better rules.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I am using Annotations on object fields to be able to process extra information on the attributes of the objects. I'm generating the rules out of the trees by parsing the trees using depth first search and compiling with PackageBuilder before adding to the RuleBase. In the future I consider using MVEL for templating to generate the rules from the trees.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Target Attribute or Class Label&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Since I implement a Supervised learning algorithm the class labels of the target class has to be given by the user. There are two ways to input the labels. The first and easy way is specifying one of the fields related to the target class as the label by the Annotation on that field. The second way is writing a getter function on the object class and specifiying by its Annotation. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Attribute Domains&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The most common domain types are categorical and quantitative. Moreover, the decision trees need to deal with complex domains which are not simple primitive object types. &lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Categorical (discrete) domain&lt;/span&gt; is commonly constructed by a set of String values. There has to be a finite number of discrete values. The attributes are assumed to be categorical by default. Only if there is an annotation saying the opposite then the domain is treated as quantitative. The target attribute has to be categorical since it is not a regression tree implementation.&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;Quantitative (continuous) domain&lt;/span&gt;: Commonly, subset of real numbers, where there is a measurable difference between the possible values. Integers are usually treated as continuous in practical problems. This type of domain has to be discretized by defining a various number of thresholds (intervals) for each possible class. My implementation can discretize numerical attributes which are a set of real numbers and have quantitative domain.   &lt;span class="Apple-style-span" style="font-weight: bold; "&gt;&lt;/span&gt;&lt;/li&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;For example: age &lt; 15 as child&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;   &lt;/span&gt;15 &lt;= age &lt; 20 as teenage&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;   &lt;/span&gt;20 &lt;= age as adult&lt;/div&gt;&lt;div&gt;Literal attributes which are set of Strings and have a continuous domain can also be discretized by defining a various number of sets for each possible class.&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt; &lt;/span&gt;For example: letter element of {a, e, i, o, u} as vowel&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;    &lt;/span&gt; letter not element of {a, e, i, o, u} as consonant&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-weight: bold; "&gt;Complex domain&lt;/span&gt; implements a domain of an attribute that belongs to another object class. This type of domain needs more care because there are many possibilities such as Collections or references to the object class, itself.&lt;span class="Apple-style-span" style="white-space: pre; "&gt; &lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Quinlan's C4.5 Algorithm&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Comparing to the ID3 the C4.5 learning algorithm can tackle with harder domains that contain many number of possible values.&lt;/div&gt;&lt;div&gt;C4.5 deals with the numeric (integer or real) and continuous attributes using a discretization technic based on entropy.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Continuous Attribute Discretization&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are mainly two approaches of discretizing the continuous attributes. One approach is using a global discretization algorithm, which results in a smaller decision tree. A global discretization algorithm would ignore the relation of the continuous attribute with the other attributes. The other approach is at any node of tree dicretizing the continuous attribute on the current set of instances that means applying the global discretization algorithm during the training of the decision tree.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I implemented the Fayyad and Irani's the Minimum descriptive length method to discretize the numerical domains which is also used by the WEKA project. Fayyad and Irani used information gain approach while evaluating the effectiveness of the discretization. I also tried the Quinlan's gain ratio approach as an MDL method which is presented as a bit more fair evaluation of the domains due the normalization of the information gain by the information of the current data set based on the domain attribute. Moreover, there are some other approaches such as gini coefficient, or chi-squared test that need to be tested. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For example:  Using the 15 Golf instances with 4 attributes (1 boolean, 1 literal and 2 numerical = 2 Categorical and 2 Quantitative) and Boolean target attribute I get a rule saying that the decision should be to play golf outside if the outlook attribute of the Golf object is "overcast". This rule's rank is 0.2858 which means that the rule is classifiying 28.58 % of the given Golf objects.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;rule&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; "#0 decision= Play  classifying 4.0 num of facts with rank:0.2858" &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;when&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal; "&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;$golf_0 : Golf(outlook == "overcast", $target_label : decision )&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;then&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;System.out.println("[decision] Expected value (" + $target_label + "), Classified as (Play )");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=O5OMQJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=O5OMQJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=ypf23J"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=ypf23J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=g7pGGj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=g7pGGj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=bvxnWj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=bvxnWj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=kUkiAJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=kUkiAJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=cR5x4j"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=cR5x4j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=AFXNTJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=AFXNTJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/328441726" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/328441726/drools-and-machine-learning.html</link><author>noreply@blogger.com (Gizil Oguz)</author><feedburner:origLink>http://blog.athico.com/2008/07/drools-and-machine-learning.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-8380797205877555407</guid><pubDate>Sat, 05 Jul 2008 14:10:00 +0000</pubDate><atom:updated>2008-07-05T15:23:14.531+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Smooks</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Drools Smooks Data Loader</title><description>&lt;a href="http://milyn.codehaus.org"&gt;Smooks&lt;/a&gt; is a powerful open source ETL tool, it can transform variety of data sources. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Jrhwx8X9P7g/SG-CJKaIWCI/AAAAAAAAAKI/QyJd48fTupg/s1600-h/smooks-usecase.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_Jrhwx8X9P7g/SG-CJKaIWCI/AAAAAAAAAKI/QyJd48fTupg/s400/smooks-usecase.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5219533587070081058" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Drools now supports an internal model, so ideally you want to be able to load different payloads, such as XML, into this model. I've just added support for this and it'll be in M2 :)&lt;br /&gt;&lt;br /&gt;Here is an example of the api loading an XML file into a drools session, the xml entries for OrderItem are mapped into the internal class and inserted into the given session. The matching rules simple do a print statement.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;declare OrderItem&lt;br /&gt;    productId : long&lt;br /&gt;    quantity : Integer&lt;br /&gt;    price : double&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;rule someRule&lt;br /&gt;when&lt;br /&gt;    $i : OrderItem()&lt;br /&gt;then&lt;br /&gt;    System.out.println( $i ); &lt;br /&gt;end&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;PackageBuilder pkgBuilder = new PackageBuilder();&lt;br /&gt;pkgBuilder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test.drl" )) );&lt;br /&gt;&lt;br /&gt;RuleBase ruleBase = RuleBaseFactory.newRuleBase();&lt;br /&gt;ruleBase.addPackage( pkgBuilder.getPackage() );&lt;br /&gt;&lt;br /&gt;StatefulSession session = ruleBase.newStatefulSession();&lt;br /&gt;&lt;br /&gt;// Instantiate Smooks with the config...&lt;br /&gt;Smooks smooks = new Smooks( "smooks-config.xml" );&lt;br /&gt;&lt;br /&gt;// set rood id&lt;br /&gt;DroolsSmooksConfiguration conf = new DroolsSmooksConfiguration( "root" );&lt;br /&gt;DroolsSmooks loader = new DroolsSmooks( session, smooks, conf );&lt;br /&gt;loader.insertFilter( new StreamSource( new ByteArrayInputStream( readInputMessage() ) ) );&lt;br /&gt;&lt;br /&gt;session.fireAllRules();&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=B08MjJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=B08MjJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=oszFtJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=oszFtJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=h2wjGj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=h2wjGj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=TOUVBj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=TOUVBj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=xwFzvJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=xwFzvJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=2HZrfj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=2HZrfj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=CnFdDJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=CnFdDJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/327398904" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/327398904/drools-smooks-data-loader.html</link><author>noreply@blogger.com (Mark Proctor)</author><feedburner:origLink>http://blog.athico.com/2008/07/drools-smooks-data-loader.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-4675156116785341077</guid><pubDate>Fri, 04 Jul 2008 19:32:00 +0000</pubDate><atom:updated>2008-07-04T20:42:12.582+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>The Rise of the Open Source BRMS</title><description>The JavaRules blog has done an interesting take on the rise of the Open Source BRMS, titled&lt;a href="http://yaakov2.wordpress.com/2008/07/04/drools-brms-and-revolutions/"&gt; "Drools, BRMS and Revolutions"&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is a choice quote:&lt;br /&gt;"Here’s another thing: More and more companies are using shareware or freeware products such as Linux, Open Office, Java, Eclipse, Net Beans, JBoss to run those $500K (final installed price) BRMS packages. Now they’re going to have another really good package to add in there; Drools. The line between commercial BRMS vendors and freeware vendors is becoming more and more blurred and, with the next year or two, should disappear altogether."&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=Ymc2oJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=Ymc2oJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=UgF62J"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=UgF62J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=U0AbZj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=U0AbZj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=qJhpej"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=qJhpej" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=nSnQ4J"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=nSnQ4J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=Rl89bj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=Rl89bj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=K3EvSJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=K3EvSJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/326868160" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/326868160/rise-of-open-source-brms.html</link><author>noreply@blogger.com (Mark Proctor)</author><feedburner:origLink>http://blog.athico.com/2008/07/rise-of-open-source-brms.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-6527476245514381170</guid><pubDate>Fri, 04 Jul 2008 12:23:00 +0000</pubDate><atom:updated>2008-07-05T11:50:19.962+01:00</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.0 M1 - New and Noteworthy</title><description>&lt;div&gt;Drools 5.0 will be the launch of what we call the Business Logic integration Platform (BLiP) - the BRMs is dead :) The future is for a unified and integrated solution for Rules, Processes and CEP - this is what users want and this is what we are aiming for.&lt;br /&gt;&lt;br /&gt;Drools 5.0 will split up into 4 main sub projects, the documentation has already been split to reflect this:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Drools Guvnor (BRMS/BPMS)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Drools Expert (rule engine),&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Drools Flow (process/workflow)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Drools Fusion (cep/temporal reasoning)&lt;/li&gt;&lt;/ul&gt;M1 is still very hairy and only for the hard core drools users, little documentation has been updated - although some Flow and Guvnor stuff has been. So you will have to rely on looking at code and unit tests, as well as asking on the mailing lists and irc - we hope this new and noteworthy document helps guide you too.&lt;br /&gt;&lt;br /&gt;M2 will involve an API change as we refactor away from being rules centric, as discussed &lt;a href="http://www.mail-archive.com/rules-dev@lists.jboss.org/msg00757.html"&gt;here&lt;/a&gt;, we will provide a legacy 4.0 wrapper jar for backwards compatability in some later milestones.&lt;br /&gt;&lt;br /&gt;We hope that M3/M4 will start to be more user/public friendly as the feature set matures and bugs come in and we start to update the documentation. We are hoping for an August/Sept release.&lt;br /&gt;&lt;br /&gt;5.0 M1 can be found on the main &lt;a href="http://www.jboss.org/drools/downloads.html"&gt;drools download&lt;/a&gt; page. The Binary with dependencies is particularly large, but the bulk of it is uml javadocs, we will try and address this in M2 or M3 where we will try and remove non public stable apis.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;A Big Thanks to the following Contributors&lt;/span&gt;&lt;br /&gt;Ming Jin - Package serialisation performance increase (10x improvement)&lt;br /&gt;&lt;div&gt;Matthias Groch - sliding windows algorithm research&lt;/div&gt; &lt;div&gt;Tino Breddin - temporal operators&lt;/div&gt; &lt;div&gt;Matt Geis - new DSL parser and enhancements&lt;br /&gt;Steven Williams - various decision table tasks.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Guvnor (the BRMS component)&lt;/h2&gt;&lt;span style="font-weight: bold;"&gt;New look web tooling&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_KukQ8TlQMz8/SFGyNEz3v9I/AAAAAAAAAPo/pZtIuQXKQNM/s1600-h/Picture+1.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5211142181543722962" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://bp2.blogger.com/_KukQ8TlQMz8/SFGyNEz3v9I/AAAAAAAAAPo/pZtIuQXKQNM/s320/Picture+1.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;Web based decision table editor&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_KukQ8TlQMz8/SFGyeB_84gI/AAAAAAAAAPw/drRcF_1aId4/s1600-h/WebDT.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5211142472846860802" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://bp3.blogger.com/_KukQ8TlQMz8/SFGyeB_84gI/AAAAAAAAAPw/drRcF_1aId4/s320/WebDT.png" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Integrated scenario testing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_KukQ8TlQMz8/SFGy_USk9SI/AAAAAAAAAP4/aGNVOB8bPss/s1600-h/ScenarioSuite.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5211143044692505890" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://bp0.blogger.com/_KukQ8TlQMz8/SFGy_USk9SI/AAAAAAAAAP4/aGNVOB8bPss/s320/ScenarioSuite.png" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_KukQ8TlQMz8/SFGy_sebpFI/AAAAAAAAAQA/3xr_x_S-iGY/s1600-h/Scenario.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5211143051184677970" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://bp0.blogger.com/_KukQ8TlQMz8/SFGy_sebpFI/AAAAAAAAAQA/3xr_x_S-iGY/s320/Scenario.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;WebDAV file based interface to repository&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_KukQ8TlQMz8/SFGy_wfKGqI/AAAAAAAAAQI/jBWo-hTLZlI/s1600-h/WebDav.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5211143052261464738" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://bp0.blogger.com/_KukQ8TlQMz8/SFGy_wfKGqI/AAAAAAAAAQI/jBWo-hTLZlI/s320/WebDav.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Declarative modelling of types (types that are not in pojos)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_KukQ8TlQMz8/SGRshYcU_hI/AAAAAAAAAQ0/30TiIf_QUGE/s1600-h/Picture+2.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5216413589154627090" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://bp3.blogger.com/_KukQ8TlQMz8/SGRshYcU_hI/AAAAAAAAAQ0/30TiIf_QUGE/s320/Picture+2.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This works with the new "declare" statement - you can now declare types in drl itself. You can then populate these without using a pojo (if you like). These types are then available in the rulebase.&lt;br /&gt;&lt;br /&gt;Others:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Logic verifier&lt;/li&gt;&lt;li&gt;Improvements to guided editor (many)&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;CORE ENGINE&lt;/h2&gt;&lt;span style="font-weight: bold;"&gt;Asymmetrical Rete algorithm implementation&lt;/span&gt;&lt;br /&gt;Shadow proxies are no longer needed. Shadow proxies protected the engine from information change on facts, which if occurred outside of the engine's control it could not be modified or retracted.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;PackageBuilder can now build multiple namespaces&lt;/span&gt;&lt;br /&gt;You no longer need to confine one PackageBuilder to one package namespace. Just keeping adding your DRLs for any namespace and getPackages() returns an array of Packages for each of the used namespaces.&lt;pre&gt;Package[] packages = pkgBuilder.getPackages();&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;RuleBase attachment to PackageBuilder&lt;/span&gt;&lt;br /&gt;It is now possible to attach a RuleBase to a PackageBuilder, this means that rules are built and added to the rulebase at the same time. PackageBuilder uses the Package instances of the actual RuleBase as it's source, removing the need for additional Package creation and merging that happens in the existing approach.&lt;pre&gt;RuleBase ruleBase = RuleBaseFactory.newRuleBase();&lt;br /&gt;PackageBuilder pkgBuilder = new PackageBuilder( ruleBase, null );&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Binary marshalling of stateful sessions&lt;/span&gt;&lt;br /&gt;Stateful sessions can now saved and resumed at a later date.&lt;br /&gt;Pre-loaded data sessions can now be created.&lt;br /&gt;Pluggable strategies can be used for user object persistence, i.e. hibernate or identity maps.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Type Declaration&lt;/span&gt;&lt;br /&gt;Drools now supports a new base construct called Type Declaration. This construct fulfils two purposes: the ability to declare fact metadata, and the ability to dynamically generate new fact types local to the rule engine. The Guvnor modelling tool uses this underneath.&lt;br /&gt;One example of the construct is:&lt;pre&gt;declare StockTick&lt;br /&gt;  @role( event )&lt;br /&gt;  @timestamp( timestampAttr )&lt;br /&gt;&lt;br /&gt;  companySymbol : String&lt;br /&gt;  stockPrice : double&lt;br /&gt;  timestampAttr : long&lt;br /&gt;end&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Declaring Fact Metadata&lt;/span&gt;&lt;br /&gt;To declare and associate fact metadata, just use the @ symbol for each metadata ID you want to declare. Example:&lt;pre&gt;declare StockTick&lt;br /&gt;  @role( event )&lt;br /&gt;end&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Triggering Bean Generation&lt;/span&gt;&lt;br /&gt;To activate the dynamic bean generation, just add fields and types to your type declaration:&lt;pre&gt;declare Person&lt;br /&gt;  name : String&lt;br /&gt;  age : int&lt;br /&gt;end&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;DSL improvements&lt;/span&gt;&lt;br /&gt;A series of DSL improvements were implemented, including a completely new parser and the ability to declare matching masks for matching variables. For instance, one can constrain a phone number field to a 2-digit country code + 3-digit area code + 8-digit phone number, all connected by a "-" (dash), by declaring the DSL map like:&lt;br /&gt;&lt;br /&gt;The phone number is {number:\d{2}-\d{3}-\d{8}}&lt;br /&gt;&lt;br /&gt;Any valid java regexp may be used in the variable mask.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Complex Event Processing Support (Temporal Reasoning)&lt;/h2&gt;Drools 5.0 brings to the rules world the full power of events processing by supporting a number of CEP features as well as supporting events as first class citizens in the rules engine.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Event Semantics&lt;/span&gt;&lt;br /&gt;Events are (from a rules engine perspective) a special type of fact that has a few special characteristics:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;they are immutable&lt;/li&gt;&lt;li&gt;they have strong time-related relationships&lt;/li&gt;&lt;li&gt;they may have clear lifecycle windows&lt;/li&gt;&lt;li&gt;they may be transparently garbage collected after it's lifecycle window expires&lt;/li&gt;&lt;li&gt;they may be time-constrained&lt;/li&gt;&lt;li&gt;they may be included in sliding windows for reasoning&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Event Declaration&lt;/span&gt;&lt;br /&gt;Any fact type can assume an event role, and its corresponding event semantics, by simply declaring the metadata for it. Both existing and generated beans support event semantics:&lt;br /&gt;&lt;pre&gt;# existing bean assuming an event role&lt;br /&gt;import org.drools.test.StockTick&lt;br /&gt;declare StockTick&lt;br /&gt;  @role( event )&lt;br /&gt;end&lt;/pre&gt;&lt;pre&gt;# generated bean assuming an event role&lt;br /&gt;declare Alarm&lt;br /&gt;  @role( event )&lt;br /&gt;  type : String&lt;br /&gt;  timestamp : long&lt;br /&gt;end&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;Entry-Point Stream Listeners&lt;/span&gt;&lt;br /&gt;A new key "from entry-point" has been added to allow a pattern in a rule to listen on a stream, which avoids the overhead of having to insert the object into the working memory where it is potentially reasoned over by all rules.&lt;pre&gt;$st : StockTick( company == "ACME", price &gt; 10 ) from entry-point "stock stream"&lt;/pre&gt;To insert facts into an entry point:&lt;br /&gt;&lt;pre&gt;WorkingMemoryEntryPoint entry = wm.getWorkingMemoryEntryPoint( "stock stream" );&lt;br /&gt;entry.insert( ticker );&lt;/pre&gt;&lt;a href="http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java"&gt;StreamTest&lt;/a&gt; shows a unit for this.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Event Correlation and New Operators&lt;/span&gt;&lt;br /&gt;Event correlation and time based constraint support are requirements of event processing, and are completely supported by Drools 5.0. The new, out of the box, time constraint operators can be seen in these test case rules:&lt;br /&gt;&lt;a href="http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_CEP_TimeRelationalOperators.drl"&gt;test_CEP_TimeRelationalOperators.drl&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As seen in the test above, Drools supports both: primitive events, that are point in time occurrences with no duration, and compound events, that are events with distinct start and end timestamps.&lt;br /&gt;&lt;br /&gt;The complete list of operators are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;coincides&lt;/li&gt;&lt;li&gt;before&lt;/li&gt;&lt;li&gt;after&lt;/li&gt;&lt;li&gt;meets&lt;/li&gt;&lt;li&gt;metby&lt;/li&gt;&lt;li&gt;overlaps&lt;/li&gt;&lt;li&gt;overlappedby&lt;/li&gt;&lt;li&gt;during&lt;/li&gt;&lt;li&gt;includes&lt;/li&gt;&lt;li&gt;starts&lt;/li&gt;&lt;li&gt;startedby&lt;/li&gt;&lt;li&gt;finishes&lt;/li&gt;&lt;li&gt;finishedby&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Sliding Time Windows&lt;/span&gt;&lt;br /&gt;Drools 5.0 adds support for reasoning over sliding windows of events. For instance:&lt;pre&gt;StockTick( symbol == "RHAT" ) over window:time( 60 )&lt;/pre&gt;The above example will only pattern match the RHAT stock ticks that happened in the last 60 clock ticks, discarding any event older than that.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Session Clock&lt;/span&gt;&lt;br /&gt;Enabling full event processing capabilities requires the ability to configure and interact with a session clock. Drools adds support for time reasoning and session clock configuration, allowing it to not only run real time event processing but also simulations, what-if scenarios and post-processing audit by replaying a scenario.&lt;br /&gt;&lt;br /&gt;The Clock is specified as part of the SessionConfiguration, a new class that is optionally specified at session creation time:&lt;pre&gt;SessionConfiguration conf = new SessionConfiguration();&lt;br /&gt;conf.setClockType( ClockType.PSEUDO_CLOCK );&lt;br /&gt;StatefulSession session = ruleBase.newStatefulSession( conf );&lt;/pre&gt;&lt;h2&gt;Drools Flow&lt;/h2&gt;Drools 4.0 had simple "RuleFlow" which was for orchestrating rules. Drools 5.0 introduces a powerful (extensible) workflow engine. It allows users to specify their business logic using both rules and processes (where powerful interaction between processes and rules is possible) and offers a unified enviroment.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Interactive Debugger&lt;/span&gt;&lt;br /&gt;Process Instance view at a specific breakpoint:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Jrhwx8X9P7g/SGw3nUKRF4I/AAAAAAAAAJg/d-YtLt4RjRU/s1600-h/process-instances.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5218607216781760386" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://bp0.blogger.com/_Jrhwx8X9P7g/SGw3nUKRF4I/AAAAAAAAAJg/d-YtLt4RjRU/s400/process-instances.png" border="0" /&gt;&lt;/a&gt;Current active nodes in a workflow in a specific breakpoint:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_Jrhwx8X9P7g/SGw3nfAKNpI/AAAAAAAAAJo/cYPe-2UqPww/s1600-h/example-debug-1.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5218607219692156562" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://bp1.blogger.com/_Jrhwx8X9P7g/SGw3nfAKNpI/AAAAAAAAAJo/cYPe-2UqPww/s400/example-debug-1.png" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;New Nodes&lt;/span&gt;&lt;br /&gt;Timers:&lt;br /&gt;A timer node can be added which causes the execution of the node to wait for a specific period. Currently just uses JDK defaults of initial delay and repeat delay, more complex timers will be available in further milestones.&lt;br /&gt;&lt;br /&gt;Human Task:&lt;br /&gt;Processes can include tasks that need to be executed by human actors. Human tasks include parameters like taskname, priority, description, actorId, etc. The process engine can easily be integrated with existing human task component (like for example a WS-HumanTask implementation) using our pluggable work items (see below). Swimlanes and assignment rules are also supported.&lt;br /&gt;&lt;br /&gt;The palette in the screenshot shows the two new components, and the workflow itself shows the human task in use. It also shows two "work items" which is explained in the next section:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Jrhwx8X9P7g/SGw5NycBXQI/AAAAAAAAAJw/NAsUdORdLtg/s1600-h/humantask.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5218608977255947522" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://bp2.blogger.com/_Jrhwx8X9P7g/SGw5NycBXQI/AAAAAAAAAJw/NAsUdORdLtg/s400/humantask.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Domain Specific Work Items&lt;/span&gt;&lt;br /&gt;Domain Specific Work Items are pluggable nodes that users create to facilitate custom task execution. They provide an api to specify a new icon in the palette and gui editor for the tasks properties, if no editor gui is supplied then it defaults to a text based key value pair form. The api then allows execution behaviour for these work items to be specified. By default the Email and Log work items are provided. The Drools flow Manual has been updated on how to implement these.&lt;br /&gt;&lt;br /&gt;The below image shows three different work items in use in a workflow, "Blood Pressure", "BP Medication", "Notify GP":&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_Jrhwx8X9P7g/SGw_XhhfgaI/AAAAAAAAAJ4/kpHbACrBF7U/s1600-h/CDSSExample.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5218615741583950242" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://bp3.blogger.com/_Jrhwx8X9P7g/SGw_XhhfgaI/AAAAAAAAAJ4/kpHbACrBF7U/s400/CDSSExample.bmp" border="0" /&gt;&lt;/a&gt;This one ows a new "Notificatoin" work item:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_Jrhwx8X9P7g/SGw_XjzWD1I/AAAAAAAAAKA/9zYSYEL3HEA/s1600-h/NotificationPalette.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5218615742195699538" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://bp2.blogger.com/_Jrhwx8X9P7g/SGw_XjzWD1I/AAAAAAAAAKA/9zYSYEL3HEA/s400/NotificationPalette.bmp" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;extensible Process Definition Language (ePDL)&lt;/span&gt;&lt;br /&gt;Drools 4.0 used Xstream to store it's content, which was not easily human writeable. Drools 5.0 introduced the ePDL which is a XML specific to our process language, it also allows for domain specific extensions which has been talked about in detail in this blog posting &lt;a href="http://blog.athico.com/2007/12/drools-extensible-process-definition.html"&gt;"Drools Extensible Process Definition Language (ePDL) and the Semantic Module Framework (SMF)"&lt;/a&gt;. An example of the XML language, with a DSL extension in red, is shown below.&lt;br /&gt;&lt;pre&gt;&amp;lt;process  name="process name" id="process name" package-name="org.domain"&lt;br /&gt;xmlns="http://drools.org/drools-4.0/process"&lt;br /&gt;xmlns:mydsl="http://domain/org/mydsl"&lt;br /&gt;xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;xs:schemaLocation="http://drools.org/drools-4.0/process drools-processes-4.0.xsd" &amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;nodes&amp;gt;&lt;br /&gt;  &amp;lt;start id="0" /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;action id="1" dialect="java"&amp;gt;&lt;br /&gt;      list.add( "action node was here" ); &lt;br /&gt;  &amp;lt;/action&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;    &amp;lt;mydsl:logger id="2" type="warn"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;        This is my message         &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;    &amp;lt;mydsl:logger&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;end id="3" /&amp;gt;&lt;br /&gt;&amp;lt;/nodes&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;connections&amp;gt;&lt;br /&gt;  &amp;lt;connection from="0 to="1" /&amp;gt;&lt;br /&gt;  &amp;lt;connection from="1" to="2" /&amp;gt;&lt;br /&gt;  &amp;lt;connection from="2" to="3" /&amp;gt;&lt;br /&gt;&amp;lt;/connections&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/process&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pluggable Nodes&lt;/span&gt;&lt;br /&gt;The underlying nodes for the framework are completely pluggable making it simple to extend and to implement other execution models. We already have a partial implementation for &lt;a href="http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-process/drools-osworkflow/"&gt;OSWorkflow&lt;/a&gt; and are working with &lt;a href="http://www.hcw.be/p.aspx?p=J0879"&gt;Deigo&lt;/a&gt; to complete this to provide a migration path for OSWorkflow users.&lt;br /&gt;&lt;br /&gt;Other enhancements include exception scopes, the ability to include on-entry and on-exit actions on various node types, integration with our binary persistence mechanism to persist the state of long running processes, etc. Check out the Drools Flow documentation to learn more.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Drools Clips&lt;/h2&gt;A very alpha quality version of Drools Clips is now working and supports:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;deftemplate&lt;/li&gt;&lt;li&gt;defrule&lt;/li&gt;&lt;li&gt;deffuction&lt;/li&gt;&lt;li&gt;and/or/not/exists/test Conditional Elements&lt;/li&gt;&lt;li&gt;Literal, Variable, Return Value and Predicate field constraints&lt;/li&gt;&lt;/ul&gt;You can look at the &lt;a href="http://fisheye.jboss.org/browse/JBossRules/trunk/drools-clips/src/test/java/org/drools/clips/ClipsShellTest.java?r=HEAD"&gt;ClipsShellTest&lt;/a&gt; and &lt;a href="http://fisheye.jboss.org/browse/JBossRules/trunk/drools-clips/src/test/java/org/drools/clips/LhsClpParserTest.java?r=HEAD"&gt;LhsClipsParserTest&lt;/a&gt; get an idea of the full support. It's still early stages and it's very rough in places, especially on error handling and feedback as well as no view commands to display data. The Shell in action:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Jrhwx8X9P7g/SGwvSq7EBcI/AAAAAAAAAJY/_u4f3UcQ7bw/s1600-h/shell.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5218598066021729730" style="margin: 0px auto 10px; display: block; cursor: pointer; text-align: center;" alt="" src="http://bp0.blogger.com/_Jrhwx8X9P7g/SGwvSq7EBcI/AAAAAAAAAJY/_u4f3UcQ7bw/s400/shell.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The screen shot is a contrived example but it does show a shell environment cleanly mixing deftemplates and pojos - note that Drools 5.0 does not require shadow facts, due to the new asymmetrical Rete algorithm. It also shows deffunction in use. &lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=07P0JJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=07P0JJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=yqmFkJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=yqmFkJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=MnTUPj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=MnTUPj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=QqP29j"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=QqP29j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=FxJikJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=FxJikJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=lA4rSj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=lA4rSj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=05ys1J"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=05ys1J" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/326614925" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/326614925/drools-50-m1-new-and-noteworthy.html</link><author>noreply@blogger.com (Michael Neale)</author><feedburner:origLink>http://blog.athico.com/2008/07/drools-50-m1-new-and-noteworthy.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-1267605316588454341</guid><pubDate>Wed, 02 Jul 2008 15:14:00 +0000</pubDate><atom:updated>2008-07-05T19:11:00.901+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ORF</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Texas October Rules Fest and Drools Team Meeting</title><description>The Texas Rules User Group is organising a 3 day conference for Expert Systems starting October the 22nd - the &lt;a href="http://rulesfest.org/"&gt;October Rules Fest (ORF) &lt;/a&gt;. It's a non-profit event costing only $150 for the three days. This is a "No Fluff, Just Stuff" conference and the idea is to keep it technical so people can actually learn. The sessions are listed &lt;a href="http://rulesfestregistration.dallasrulesgroup.org/Sessions"&gt;here&lt;/a&gt;, the speakers bios &lt;a href="http://rulesfestregistration.dallasrulesgroup.org/Speakers"&gt;here&lt;/a&gt; and the agenda &lt;a href="http://rulesfestregistration.dallasrulesgroup.org/Agenda"&gt;here.&lt;/a&gt; The sessions and speakers are still fluid at the moment, but I've been sent a more up to date version, which I've pasted at the end of this blog. There is also a promotion PDF &lt;a href="http://www.bizrules.info/files/DallasRulesGroup_OctoberRulesFest_2008"&gt;here&lt;/a&gt;. I know the organisers are still searching for sponsors, to help justify the low cost for the event, so if you can help please do.&lt;br /&gt;&lt;br /&gt;The Drools team will arrive a week earlier on the 15th of October and will be doing a 7 day team meeting at the &lt;a href="http://book.bestwestern.com/bestwestern/productInfo.do?propertyCode=44540"&gt;Best Western Hotel&lt;/a&gt;. This meeting is open to the public, so if you want some hard core hands on coding do try and come down and join in with the coding fest :) This is a great opportunity to learn Drools at an indepth level and contribute back to the project, we can also assist helping you to solve any Drools extensions you are doing for your job - a great opportunity for you to get your managers time and budget approval :) The Best Western is currently only $89 per night, so very affordable.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The current tentative agenda for ORF is pasted below:&lt;br /&gt;&lt;br /&gt;&lt;style&gt;   &lt;!--    BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"Verdana"; font-size:medium }    --&gt;  &lt;/style&gt;&lt;br /&gt;&lt;table cellspacing="0" cols="6" rules="none" border="0" frame="void"&gt;&lt;colgroup&gt;&lt;col width="165"&gt;&lt;col width="191"&gt;&lt;col width="192"&gt;&lt;col width="128"&gt;&lt;col width="128"&gt;&lt;col width="148"&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" align="left" width="165" height="24"&gt;&lt;b&gt;Wednesday AM&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left" width="191"&gt;&lt;b&gt;Tutorials &lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left" width="192"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left" width="128"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td align="left" width="276" colspan="2"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="48"&gt;&lt;span style="color:#0000d4;"&gt;8:00 - 8:15&lt;/span&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;span style="color:#0000d4;"&gt;Pete Carapetyn&lt;/span&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;span style="color:#0000d4;"&gt;Data Fundamentals&lt;/span&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;span style="color:#0000d4;"&gt;Welcome&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="49"&gt;&lt;span style="color:#0000d4;"&gt;8:15 - 9:15&lt;/span&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;span style="color:#0000d4;"&gt;Dr. Kappleman&lt;/span&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;span style="color:#0000d4;"&gt;North Texas Univ.&lt;/span&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;span style="color:#0000d4;"&gt;Rules: Essential But Only Part of the Puzzle&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="48"&gt;9:30 - 10:20&lt;/td&gt;&lt;td valign="top" align="left"&gt;Rolando Hernandez&lt;/td&gt;&lt;td valign="top" align="left"&gt;BizRules.Com&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;Introduction to Business Rules Architecture and Rulebase Technology&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="24"&gt;10:30 - 11:20&lt;/td&gt;&lt;td valign="top" align="left"&gt;Larry Terril&lt;/td&gt;&lt;td valign="top" align="left"&gt;EBDX&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;Declarative vs Procedural Programming&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="25"&gt;11:30 - 12:30&lt;/td&gt;&lt;td valign="top" align="left"&gt;Greg Barton&lt;/td&gt;&lt;td valign="top" align="left"&gt;Greg Stuff&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;Introduction to Evolvable Rules&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="24"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;12:30 - 2:00&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;Lunch&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="24"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="24"&gt;&lt;b&gt;Wednesday PM&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;Conference Begins&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="49"&gt;2:00 - 3:15&lt;/td&gt;&lt;td valign="top" align="left"&gt;Jason Morris&lt;/td&gt;&lt;td valign="top" align="left"&gt;Morris Technical Solutions (Jess)&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;The Ontology of Rulebased Systems&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="49"&gt;3:30 - 4:45&lt;/td&gt;&lt;td valign="top" align="left"&gt;Edson Tirelli&lt;/td&gt;&lt;td valign="top" align="left"&gt;Drools&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;CEP - Complex Event Procesing Based on Rete&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="49"&gt;5:00 - 6:15&lt;/td&gt;&lt;td valign="top" align="left"&gt;Michael Neale&lt;/td&gt;&lt;td valign="top" align="left"&gt;Drools&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;"Guvnor" - A BRMS for Drools and Managing Other Asset Types&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="25" sdnum="2057;0;HH:MM"&gt;6:15 - 8:00&lt;/td&gt;&lt;td valign="top" align="left"&gt;Pub Night 1&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;??&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="24"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="24"&gt;&lt;b&gt;Thursday AM&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;Vendor's Day &lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="51"&gt;&lt;span style="color:#0000d4;"&gt;8:00 - 9:00&lt;/span&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;span style="color:#0000d4;"&gt;Dr. Levine&lt;/span&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;span style="color:#0000d4;"&gt;Unit Texas Arlington&lt;/span&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;span style="color:#0000d4;"&gt;Keynote 2: Brain mechanisms for Making, Breaking and Changing Rules&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="48"&gt;9:00 - 10:00&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;Art Torteloro&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;Visual Rules&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;b&gt;Constraints and Integration of Methodology With Automation&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="96"&gt;10:15 - 11:15&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;Carlos Seranno-Morales and Carole Ann Berliotz-Matignon&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;Fair Isaac&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;b&gt;TBD&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="44"&gt;11:30 - 12:30&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;Dr. Feldman&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;Open Rules&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;b&gt;Using Constraing Programming in Business Rules Environment&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="24"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;12:30 - 2:00&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;Lunch&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="24"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="24"&gt;&lt;b&gt;Thursday PM&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="47"&gt;2:00 - 3:15&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;??&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;Informavores&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;TBD&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="47"&gt;3:30 - 4:45&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;??&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;Haley Systems&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;TBD&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="52"&gt;5:00 - 6:15&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;Daniel Selman&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;ILOG&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;b&gt;Sequential Rules and Their Applications&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="25" sdnum="2057;0;HH:MM"&gt;6:15 - 8:00&lt;/td&gt;&lt;td valign="top" align="left"&gt;Pub Night 2&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;??&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="24"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td align="left" colspan="2"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="24"&gt;&lt;b&gt;Friday AM&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;The Future&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td align="left" colspan="2"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="47"&gt;&lt;span style="color:#0000d4;"&gt;8:00 - 9:00&lt;/span&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#0000d4;"&gt;??&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#0000d4;"&gt;Countrywide&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;b&gt;&lt;span style="color:#0000d4;"&gt;Keynote 3: Guest speaker&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="56"&gt;9:00 - 10:00&lt;/td&gt;&lt;td valign="top" align="left"&gt;Dr. Hicks&lt;/td&gt;&lt;td valign="top" align="left"&gt;Texas A&amp;amp;M, EZ-Xpert&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;Verification of Propositional Logic Systems and it's Implications&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="71"&gt;10:15 - 11:15&lt;/td&gt;&lt;td valign="top" align="left"&gt;Gary Riley&lt;/td&gt;&lt;td valign="top" align="left"&gt;CLIPS&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;RE-architecting CLIPS: recent Changes to Improve Performance, Integration and Internationalization&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="48"&gt;11:30 - 12:30&lt;/td&gt;&lt;td valign="top" align="left"&gt;Mark Proctor&lt;/td&gt;&lt;td valign="top" align="left"&gt;Drools&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;Declarative Programming with Rules, Processes and CEP&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="24"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;12:30 - 2:00&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;Lunch&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="24"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="24"&gt;&lt;b&gt;Friday PM&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;Parallel and Conference Wrapup&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align="left"&gt;&lt;b&gt;&lt;span style="color:#339966;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="69"&gt;&lt;b&gt;&lt;span style="color:#ff6600;"&gt;2:00 - 3:15&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#ff6600;"&gt;Dr. Forgy&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#ff6600;"&gt;PST, Rete, Rete 2&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;b&gt;&lt;span style="color:#ff6600;"&gt;Parallel Rulebase Technology (jco) - Parallel OPSJ, Rete, Rete 2, New Developments in Rulebase Theory&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="25"&gt;&lt;b&gt;&lt;span style="color:#0000d4;"&gt;3:30 - 5:30&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#0000d4;"&gt;Everyone&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;&lt;span style="color:#0000d4;"&gt;Everyone&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;b&gt;&lt;span style="color:#0000d4;"&gt;Conference Review&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" align="left" height="25" sdnum="2057;0;HH:MM"&gt;&lt;b&gt;5:15 - 8:00&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;Pub Night 3&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left"&gt;&lt;b&gt;Party Time&lt;/b&gt;&lt;/td&gt;&lt;td valign="top" align="left" colspan="3"&gt;&lt;b&gt;Billy Bob's in Fort Worth&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=PYbt4J"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=PYbt4J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=JnLXhJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=JnLXhJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=tq5S1j"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=tq5S1j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=MfWtaj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=MfWtaj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=a5ad5J"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=a5ad5J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=eO2dLj"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=eO2dLj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=9qfagJ"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=9qfagJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/325051849" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/325051849/texas-october-rules-fest-and-drools.html</link><author>noreply@blogger.com (Mark Proctor)</author><feedburner:origLink>http://blog.athico.com/2008/07/texas-october-rules-fest-and-drools.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-4718218152804473757</guid><pubDate>Tue, 24 Jun 2008 23:42:00 +0000</pubDate><atom:updated>2008-06-27T04:33:39.197+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Clips</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Drools Clips progress</title><description>Made some progress over the weekend with Drools Clips, which will provide a Clips like language for Drools. Deftemplates are now working and I did some work on PackageBuilder so that it's now able to handle multiple namespaces and have a RuleBase attached to provide a more "shell" like environment suitable for Clips. Michael Neale also got a basic command line shell working. So what does it support?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;deftemplate&lt;/li&gt;&lt;li&gt;defrule&lt;/li&gt;&lt;li&gt;deffuction&lt;/li&gt;&lt;li&gt;and/or/not/exists/test Conditional Elements&lt;/li&gt;&lt;li&gt;Literal, Variable, Return Value and Predicate field constraints&lt;/li&gt;&lt;/ul&gt;You can look at the &lt;a href="http://fisheye.jboss.org/browse/JBossRules/trunk/drools-clips/src/test/java/org/drools/clips/ClipsShellTest.java?r=HEAD"&gt;ClipsShellTest&lt;/a&gt; and &lt;a href="http://fisheye.jboss.org/browse/JBossRules/trunk/drools-clips/src/test/java/org/drools/clips/LhsClpParserTest.java?r=HEAD"&gt;LhsClipsParserTest&lt;/a&gt; get an idea of the full support. It's still early stages and it's very rough in places, especially on error handling and feedback as well as no view commands to display data. For a little fun here is a screenshot of the shell in action:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_Jrhwx8X9P7g/SGRYc5qz-KI/AAAAAAAAAIw/xefELIYMRCo/s1600-h/shell.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_Jrhwx8X9P7g/SGRYc5qz-KI/AAAAAAAAAIw/xefELIYMRCo/s400/shell.png" alt="" id="BLOGGER_PHOTO_ID_5216391521941846178" border="0" /&gt;&lt;span style="font-size:78%;"&gt;(click to enlarge)&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;The screen shot is a contrived example but it does show a shell environment cleanly mixing deftemplates and pojos - note that Drools 5.0 does not require shadow facts, due to the new asymmetrical Rete algorithm. It also shows  deffunction in use. This will be part of Milestone1, that I'm hoping to tag tomorrow.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=ly31PI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=ly31PI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=0kg4bI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=0kg4bI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=AFV4Ai"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=AFV4Ai" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=TJnw0i"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=TJnw0i" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=OEeHJI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=OEeHJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=wyQHFi"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=wyQHFi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=5ViXUI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=5ViXUI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/321003737" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/321003737/drools-clips-progress.html</link><author>noreply@blogger.com (Mark Proctor)</author><feedburner:origLink>http://blog.athico.com/2008/06/drools-clips-progress.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-1099375414641932358</guid><pubDate>Mon, 23 Jun 2008 16:00:00 +0000</pubDate><atom:updated>2008-06-23T17:06:35.802+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Eclipse</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>IDE re-license from ASL to EPL</title><description>We are looking to re-license our Eclipse IDE code from Apache Software License to Eclipse Public License. The reason for this is to simply align with the bulk of the Eclipse projects out there, to make bundling, deployment and code re-use much easier. The runtime work will remain as ASL.&lt;br /&gt;&lt;br /&gt;I don't consider this change any issue as the EPL license is not a controversial one, unlike the LGPL. If anyone can see any issues I guess we can always dual license under ASL and EPL, but I don't want to needlessly confuse things.&lt;br /&gt;&lt;br /&gt;I'm looking for community feedback on this before I do the change.&lt;br /&gt;&lt;br /&gt;Mark&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=KHBkNI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=KHBkNI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=DjgzQI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=DjgzQI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=nCvJki"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=nCvJki" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=CzdXVi"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=CzdXVi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=ZIsTmI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=ZIsTmI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=io8vGi"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=io8vGi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=hWoRBI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=hWoRBI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/318202163" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/318202163/ide-re-license-from-asl-to-epl.html</link><author>noreply@blogger.com (Mark Proctor)</author><feedburner:origLink>http://blog.athico.com/2008/06/ide-re-license-from-asl-to-epl.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-2861112504116240256</guid><pubDate>Tue, 17 Jun 2008 14:15:00 +0000</pubDate><atom:updated>2008-06-17T15:30:41.756+01:00</atom:updated><title>Why you need Business Rules in your workflow</title><description>Tom Baeyens has a good post on the &lt;a href="http://processdevelopments.blogspot.com/2008/06/brewing-jbpm-community.html" mce_href="http://processdevelopments.blogspot.com/2008/06/brewing-jbpm-community.html" target="_blank"&gt;jBPM (JBoss workflow) community day that was held at the Guinness brewery in Dublin&lt;/a&gt;.  As you'd expect, the slides have plenty of pictures of people drinking beer, and one or two pictures of people talking about workflow and business processes. (Do not adjust your TV set. This blogpost &lt;span style="font-weight: bold;"&gt;is&lt;/span&gt; about business rules).&lt;br /&gt;&lt;p&gt;What you might not expect is that Business Rules and Rule Engines were key to one of the presentations on the day. In case you missed &lt;b&gt;How to combine  (jBPM) Workflow and (Drools) Business Rules&lt;/b&gt; - here's the summary &lt;a href="http://www.firstpartners.net/blog/technology/java/2008/06/05/jboss-business-rules-and-jbpm-workflow-presentation-dublin/" mce_href="http://www.firstpartners.net/blog/technology/java/2008/06/05/jboss-business-rules-and-jbpm-workflow-presentation-dublin/"&gt;(with the slideset available on this blogpost&lt;/a&gt;).&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Workflow (e.g. JBoss jBPM) is great - it allows you to take spaghetti code and draw it as a workflow diagram (flowchart) so that it can be reviewed by the business (the nice people who pay our wages). You then attach standard (Java) actions to these steps.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Only problem is when you come to a decision node (the one circled in red below)&lt;/span&gt;: How do you decide to go left or right (in the workflow)? Normally this is coded in Java - good for us, but hidden from those nice business people (which means that this is more room for errors-in-translation).&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Business Rules allow you to keep those decision making rules in Plain English&lt;/span&gt;: When something is true , then do this. That's it. The rule engine does most of the hard work.&lt;/li&gt;&lt;li&gt;Integrating Workflow and Rules is easy. Use &lt;a href="http://docs.jboss.com/seam/2.0.2.SP1/reference/en-US/html/drools.html" mce_href="http://docs.jboss.com/seam/2.0.2.SP1/reference/en-US/html/drools.html" target="_blank"&gt;JBoss Seam (link)&lt;/a&gt; or &lt;a href="http://wiki.jboss.org/wiki/JbpmAndDrools" mce_href="http://wiki.jboss.org/wiki/JbpmAndDrools" target="_blank"&gt;do it by hand (link)&lt;/a&gt;. And it works on non-JBoss web / app servers such as Websphere, Oracle Application Server, Tomcat and Weblogic.&lt;/li&gt;&lt;li style="text-align: justify;" mce_style="text-align: justify;"&gt;&lt;b&gt;Repeat x6&lt;/b&gt; : Use workflow and rules. Use workflow and rules ...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p style="text-align: justify;" mce_style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.firstpartners.net/blog/location/dublin/2008/06/15/how-to-combine-workflow-and-business-rules-in-5-easy-steps/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/__IRoEcTpZss/SFfJJw2pDoI/AAAAAAAAABE/kFercASF8YE/s400/simple-workflow.PNG" alt="" id="BLOGGER_PHOTO_ID_5212856263274729090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Maybe it's co-incidence but, &lt;a href="http://processdevelopments.blogspot.com/2008/06/task-assignment-and-pools-harder-then.html" mce_href="http://processdevelopments.blogspot.com/2008/06/task-assignment-and-pools-harder-then.html" target="_blank"&gt;Tom Baeyens is now using strangely Rules-y like  examples over on his workflow blog&lt;/a&gt; .&lt;/p&gt;&lt;p style="text-align: justify;" mce_style="text-align: justify;"&gt; In this case Tom talks about task assignment; You may have a step such as 'Signoff Loan' in your workflow - but who does this task? Often these rules are complicated (e.g. loans less than 10,000 Dollars go to a junior officer, loans over 10 Million go to a bank president etc.). &lt;span style="font-weight: bold;"&gt;Business Rules allow you to keep these workflow task assignments in (almost) plain English.&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=ftKf3I"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=ftKf3I" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=82LT4I"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=82LT4I" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=WIlaKi"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=WIlaKi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=FEU97i"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=FEU97i" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=gUbDQI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=gUbDQI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=krA9Oi"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=krA9Oi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=43tHLI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=43tHLI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/313834130" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/313834130/why-you-need-business-rules-in-your.html</link><author>noreply@blogger.com (paul browne)</author><feedburner:origLink>http://blog.athico.com/2008/06/why-you-need-business-rules-in-your.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-7387761543890957425</guid><pubDate>Fri, 13 Jun 2008 11:35:00 +0000</pubDate><atom:updated>2008-06-13T12:38:57.917+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Job</category><category domain="http://www.blogger.com/atom/ns#">Drools</category><title>Drools Job Posting - Drools Designer (Croatia)</title><description>Another job posting came in, so thought I'd highlight it in the blog.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jobs.athico.com/job/4b5c654cec80b8695a2884f476a002ca/?d=1&amp;amp;source=jobroll"&gt;&lt;span style="font-weight: bold;"&gt;Drools Designer&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;We are currently recruiting for an experienced software engineer with specific knowledge of Java and Rules engines, ideally DROOLS. You must have several years experience as a developer/ designer in enterprise environments, have an excellent grasp of rules engine concepts, supporting database design, and understand current web technologies. &lt;br /&gt;&lt;br /&gt;The job is in Zagreb, but home based working is offered.&lt;br /&gt;&lt;br /&gt;The opportunity is to work for a very innovative company in the media area on the developmen  of a new technical platform. long term prospects very good. The position is that of designer, working with the software architect.&lt;br /&gt;&lt;br /&gt;You must be able to demonstrate a very high level of intellectual curiosity about technologies and their use and deployment.&lt;br /&gt;&lt;br /&gt;You must be fluent in english.&lt;br /&gt;&lt;br /&gt;Click &lt;a href="http://jobs.athico.com/job/4b5c654cec80b8695a2884f476a002ca/?d=1&amp;amp;source=jobroll"&gt;here&lt;/a&gt; for more details and to apply for this job.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=mbVlfI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=mbVlfI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=3T55HI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=3T55HI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=mBYYDi"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=mBYYDi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=yKKPZi"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=yKKPZi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=bBh7MI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=bBh7MI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=kUZwei"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=kUZwei" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=0Cfj1I"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=0Cfj1I" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/311103831" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/311103831/drools-job-posting-drools-designer.html</link><author>noreply@blogger.com (Mark Proctor)</author><feedburner:origLink>http://blog.athico.com/2008/06/drools-job-posting-drools-designer.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-2244986473592385751</guid><pubDate>Wed, 11 Jun 2008 23:49:00 +0000</pubDate><atom:updated>2008-06-12T00:55:30.156+01:00</atom:updated><title>Google Summer of Code project</title><description>Anton Arhipov (a drools contributor who has worked on some Eclipse stuff in the past) - got a proposal accepted as a Google Summer of Code project.&lt;br /&gt;&lt;br /&gt;His project is to make Guvnor (the BRMS) work with multiple content types - and more importantly have "pluggable" content editors (something that is kind of new to do in GWT - as GWT code is statically compiled into javascript).&lt;br /&gt;&lt;br /&gt;He blogs about his experiences &lt;a href="http://arhipov.blogspot.com/"&gt;here&lt;/a&gt;.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=7urgpI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=7urgpI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=UsTbWI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=UsTbWI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=8iCR2i"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=8iCR2i" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=NdPBni"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=NdPBni" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=HdXWZI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=HdXWZI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=1GQQSi"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=1GQQSi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=wZkPiI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=wZkPiI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/310019742" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/310019742/google-summer-of-code-project.html</link><author>noreply@blogger.com (Michael Neale)</author><feedburner:origLink>http://blog.athico.com/2008/06/google-summer-of-code-project.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-1819391861724888483</guid><pubDate>Wed, 11 Jun 2008 11:54:00 +0000</pubDate><atom:updated>2008-06-11T13:04:38.428+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Presentation</category><title>JBoss Benelux User Group</title><description>I will be speaking next Friday (June 20th) at the JBoss Benelux User Group in Rotterdam (Netherlands) about Drools in general.  So if you want a gentle introduction to Drools or want to chat afterwards, you can find the event details here:&lt;br /&gt;&lt;a href="http://www.lunatech-research.com/archives/2008/05/16/jbug-2008-06"&gt;http://www.lunatech-research.com/archives/2008/05/16/jbug-2008-06&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Registration: &lt;a href="http://www.lunatech-research.com/event/register/jbug4"&gt;http://www.lunatech-research.com/event/register/jbug4&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Summary and programme:&lt;br /&gt;The fourth Benelux JBoss User Group&lt;br /&gt; - JBoss Portal - Julien Viet and Thomas Heute - JBoss&lt;br /&gt; - Hibernate Search - Emmanuel Bernard - JBoss&lt;br /&gt; - Woman in IT - Clara Ko and Linda van der Pal - jduchess.org&lt;br /&gt; - JBoss Drools - Kris Verlaenen - JBoss&lt;br /&gt;&lt;br /&gt;Date: Friday, 20 June 2008.&lt;br /&gt;Arrive 13.30-14.00, presentations start 14.00, open bar 18.45 - 20.00.&lt;br /&gt;Location: Staal Rotterdam, World Trade Center, Beursplein 33, 3011 AA Rotterdam&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=3ZfyVI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=3ZfyVI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=9X6JAI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=9X6JAI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=77KmPi"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=77KmPi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=tsRSfi"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=tsRSfi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=bhO5OI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=bhO5OI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=8BOpgi"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=8BOpgi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=uVmJXI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=uVmJXI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/309580868" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/309580868/jboss-benelux-user-group.html</link><author>noreply@blogger.com (Kris Verlaenen)</author><feedburner:origLink>http://blog.athico.com/2008/06/jboss-benelux-user-group.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-4327213697825798392</guid><pubDate>Fri, 06 Jun 2008 17:29:00 +0000</pubDate><atom:updated>2008-06-06T23:05:26.060+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">DSL regexp antlr</category><title>Allowing variable "masks" in DSL grammar - by Matt Geis</title><description>Revisiting some of the concepts Edson posted &lt;a id="xr3t0" href="http://blog.athico.com/2008/04/revisiting-antlr.html"&gt;earlier&lt;/a&gt;, we decided to put &lt;a id="xr3t1" href="http://www.antlr.org/"&gt;ANTLR&lt;/a&gt; to use in how we handle DSLs. &lt;p id="xr3t2"&gt; At a high level, the logic used to parse a DSL entry was pretty straightforward. We were matching a pattern of "name=value", identifying a few groups inside the "name" block as variables (text surrounded by brackets, like "{name}"), and storing those variables for later use when the "value" block is substituted into the actual rule that needs to be expanded from a DSL into the DRL format that Drools knows how to work with. &lt;/p&gt;&lt;p id="xr3t3"&gt;However, we found that in certain circumstances, we'd pushed the regular expression to its limits. Its lifecycle consisted of the construction of a pattern string, followed by an optional capture group prepended to the DSL entry, and an optional capture group appended to it. Additionally, because Drools DSLs can handle regular expressions in the body of a DSL entry, we also had to allow &lt;i id="xr3t4"&gt;our &lt;/i&gt;regular expression (and the corresponding escape codes) to identify embedded regular expressions. These pattern strings were defined in java files, so any spaces or backslashes had to be escaped as well. Add it all together, and you get a regular expression that was difficult to read, and more difficult to modify without causing an unintended ripple effect through the rest of the expression. Finally, we learned that the resulting expression was greedier than we wanted it to be. It was easy enough to write a line like &lt;/p&gt;&lt;p id="xr3t5"&gt; &lt;/p&gt;&lt;pre id="xr3t6"&gt;a user exists named "{name}" = User (name == "{name}")&lt;/pre&gt; &lt;p id="xr3t7"&gt;But, if you have an object with a lot of attributes and want to support arbitrary creation of rules, you can't write a DSL expression for every possible permutation of attributes used in the LHS of your rule. Moreover, you may want to include constraints inside of a "from" or "exists" clause. To do so, you would want a DSL entry like &lt;/p&gt;&lt;p id="xr3t8"&gt; &lt;/p&gt;&lt;pre id="xr3t9"&gt;a user exists with {attribute} {value} = User (attribute == {value})&lt;/pre&gt; &lt;p id="xr3t10"&gt;The pattern ended up matching not only the first constraint, but also part of subsequent constraints applied (there were DSL entries for the first constraint on any object, and for subsequent constraints), because any variable used was translated to a capture group of "(.*?)". &lt;/p&gt;&lt;p id="xr3t11"&gt; Edson had the idea of allowing users to define the exact nature of a variable, in other words... &lt;/p&gt;&lt;p id="xr3t12"&gt; &lt;/p&gt;&lt;pre id="xr3t13"&gt;a user exists with social security number "{ssn:\d{3}-\d{2}-\d{4}}" = User (ssn == "{ssn}")&lt;/pre&gt; &lt;p id="xr3t14"&gt;Using ANTLR, we were able to parse the DSL entries and accurately isolate variable definitions, patterns within definitions, variable usage, and literal text. So now, it's straightforward to create a very strict matching such as... &lt;/p&gt;&lt;p id="xr3t15"&gt; &lt;/p&gt;&lt;pre id="xr3t16"&gt;[condition][]user has contact where {constraints}= u : User and exists (f: Person(where {constraints}) from u.contacts)&lt;br /&gt;[condition][]where {attr:[A-Za-z0-9]+} is "{value}"={attr} == "{value}"&lt;br /&gt;[condition][]and {attr:[A-Za-z0-9]+} is "{value}"=, {attr} == "{value}"&lt;/pre&gt; &lt;p id="xr3t17"&gt; which could support a rule like &lt;/p&gt;&lt;p id="xr3t18"&gt; &lt;/p&gt;&lt;pre id="xr3t19"&gt;user has contact where firstName is "Edson" and country is "Brazil"&lt;/pre&gt; &lt;p id="xr3t20"&gt; just as easily as it could support  &lt;/p&gt;&lt;p id="xr3t21"&gt; &lt;/p&gt;&lt;pre id="xr3t22"&gt;user has contact where lastName is "Tirelli" and company is "Red Hat"&lt;/pre&gt; &lt;p id="xr3t23"&gt;An even more user-friendly DSL can be built by the correct ordering of your DSL statements. For example, the addition of the following lines &lt;/p&gt;&lt;p id="xr3t24"&gt; &lt;/p&gt;&lt;pre id="xr3t25"&gt;[condition][]first name=firstName&lt;br /&gt;[condition][]last name=lastName&lt;/pre&gt; &lt;p id="xr3t26"&gt; would allow the user to rewrite the above rules as  &lt;/p&gt;&lt;p id="xr3t27"&gt; &lt;/p&gt;&lt;pre id="xr3t28"&gt;user has contact where first name is "Edson" and country is "Brazil"&lt;/pre&gt; &lt;p id="xr3t29"&gt; &lt;/p&gt;&lt;pre id="xr3t30"&gt;user has contact where last name is "Tirelli" and company is "Red Hat"&lt;/pre&gt; &lt;p id="xr3t31"&gt; Take that approach, and create some simple token replacements like  &lt;/p&gt;&lt;p id="xr3t32"&gt; &lt;/p&gt;&lt;pre id="xr3t33"&gt;[condition][]greater than = &gt;&lt;br /&gt;[condition][]less than = &lt;&lt;br /&gt;[condition][]is = ==&lt;br /&gt;[condition][]where {attr:[A-Za-z0-9]+} is {value:[0-9]+}={attr} == {value} &lt;br /&gt;[condition][]and {attr:[A-Za-z0-9]+} is {value:[0-9]+}=, {attr} == {value}&lt;/pre&gt; &lt;p id="xr3t34"&gt; and a universe of flexibility opens up in front of you, as you can now accurately construct sentence fragments and phrases. &lt;/p&gt;&lt;p id="xr3t35"&gt;(note that attention to the ordering of such DSL entries is CRITICAL, as expansion of one DSL entry will affect the matching of subsequent entries, so if you were to match line 3 above, lines 4 and 5 would never match -- you'd have to change "is" to "==" to make them match) &lt;/p&gt;&lt;p id="xr3t36"&gt;With the new ANTLR model, we were able to easily support the requirement to limit matches by user-defined patterns (on a variable-by-variable basis), as well as pave the way for future enhancements to DSL usage. &lt;/p&gt;&lt;p id="xr3t37"&gt;Finally, now that we are liberated from the usage of a few regular expressions that capture everything, we can move ahead with other features for Drools DSLs. What started as &lt;/p&gt;&lt;pre id="xr3t38"&gt;{variable}&lt;/pre&gt; and progressed to &lt;pre id="xr3t39"&gt;{variable:pattern}&lt;/pre&gt; could be extended do something like &lt;pre id="xr3t40"&gt;{variable:[attributeName,attributeValue]}&lt;/pre&gt; Examples of a possible attribute include a literal enumeration of allowable values for that variable, the name of a function to invoke to validate that the captured variable is allowed, the name of a function to invoke that provides a list of allowable values (a feature that could be leveraged by both the Eclipse plugin and in Guvnor). &lt;p id="xr3t41"&gt;Take the pattern matching for a test drive, let us know how it works for you (or doesn't, if that's the case), and tell us if there are any features you'd like implemented. &lt;/p&gt;&lt;p id="xr3t42"&gt;Caveat emptor: My rewrite of the DSL engine to use ANTLR was the result of just such a feature request. The need for tighter variable binding (basically "named capture groups") was acknowledged, and I was invited to make the necessary changes. I had no idea that it'd be so involved, or that the effort would be as rewarding as it has been.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p id="xr3t42"&gt;&lt;span style="font-style: italic;"&gt;Matt Geis&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=17qwGI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=17qwGI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=82t5nI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=82t5nI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=SkkOBi"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=SkkOBi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=Ut55yi"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=Ut55yi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=xcbkqI"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=xcbkqI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=RRB5yi"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=RRB5yi" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.athico.com/~f/DroolsRSS?a=kLfH9I"&gt;&lt;img src="http://feeds.athico.com/~f/DroolsRSS?i=kLfH9I" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.athico.com/~r/DroolsRSS/~4/306253125" height="1" width="1"/&gt;</description><link>http://feeds.athico.com/~r/DroolsRSS/~3/306253125/allowing-variable-masks-in-dsl-grammar.html</link><author>noreply@blogger.com (Edson Tirelli)</author><feedburner:origLink>http://blog.athico.com/2008/06/allowing-variable-masks-in-dsl-grammar.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-5869426.post-444899475860550800</guid><pubDate>Sun, 01 Jun 2008 12:44:00 +0000</pubDate><atom:updated>2008-06-02T10:08:27.805+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">drools puzzle</category><title>Drools Puzzle Round 3: Mastermind</title><description>&lt;span style="color: rgb(255, 0, 0); font-style: italic;"&gt;Important&lt;/span&gt;: &lt;a href="http://blog.athico.com/2007/08/drools-puzzles.html"&gt;Participation Rules&lt;/a&gt;. The rules are updated. Links to past puzzles and result reports can be found at the end of that entry.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic