<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Pathfinder Development » Business Rules Engines</title>
	
	<link>http://www.pathf.com/blogs</link>
	<description>Running commentary about agile development, user experience design and Ajax.</description>
	<lastBuildDate>Mon, 08 Feb 2010 22:22:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/BusinessRules" /><feedburner:info uri="businessrules" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Agile 2009: A reminder of why each team needs leadership</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/pv4VfrRlreo/</link>
		<comments>http://www.pathf.com/blogs/2009/09/agile-2009-reminded-team-leadership-2/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 14:44:25 +0000</pubDate>
		<dc:creator>Michael Walkden</dc:creator>
				<category><![CDATA[Agile Coaching]]></category>
		<category><![CDATA[Agile Project Management]]></category>
		<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Custom Application Development]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Agile Development]]></category>
		<category><![CDATA[Application Development]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[high-performance teams]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=3879</guid>
		<description><![CDATA[ Last week I presented at Agile 2009 a workshop for those new to Agile entitled: The Agile Game: An Experiential Workshop.  I love this workshop because it allows those new to Agile to experience the rhythm of an agile project in action and learn first hand many of the practices in a non-threatening, [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2009/09/agile-2009-reminded-team-leadership-2/">Agile 2009: A reminder of why each team needs leadership</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/08/building-high-performance-agile-team-assume-hit/' rel='bookmark' title='Permanent Link: Building a High Performance Agile Team:  Assume You Will Be a One Hit Wonder'>Building a High Performance Agile Team:  Assume You Will Be a One Hit Wonder</a></li><li><a href='http://www.pathf.com/blogs/2009/09/team-hump-daily-scrums/' rel='bookmark' title='Permanent Link: Getting a team over the fear of daily scrums'>Getting a team over the fear of daily scrums</a></li><li><a href='http://www.pathf.com/blogs/2010/01/whats-agile-box/' rel='bookmark' title='Permanent Link: What’s the value of Agile out of the box?'>What’s the value of Agile out of the box?</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img class="right" title="Throw the book out!" src="http://www.pathf.com/blogs/wp-content/uploads/2009/08/kdk_0691.jpg" alt="Throw the book out!" width="323" height="251" /> Last week I presented at Agile 2009 a workshop for those new to Agile entitled: <a href="http://www.agile2009.org/node/476" rel="nofollow" >The Agile Game: An Experiential Workshop</a>.  I love this workshop because it allows those new to Agile to experience the rhythm of an agile project in action and learn first hand many of the practices in a non-threatening, non-technical, and fun way.  I have used this workshop for clients a number of times and it works.  The feedback from this session was overwhelmingly positive too.  Comments such as, “Fun game, good to demonstrate how teams do and don’t work together” and “Very, very, practical way to get concept through” are always great to see.</p>
<p>Recently I had been wondering if Project Management was a questionable career choice.  I have spent the last couple of years surrounded by talented individuals who seemed to be able to work fine without me.  The test is always when the project manager (me) goes on vacation.  Has the team fallen apart? Are they forgetting all of the practices they were doing?  Is stuff getting delivered to clients?  I was finding that I had a backlog of chores when I came back, but overall things were still humming along.</p>
<p><span id="more-3879"></span></p>
<p>The Agile 2009 session reminded me of the road I took from software developer to a project manager and why.  Early in career I generally found project managers provided little value.  I asked a lot of questions and I caused a lot of trouble for those “managing” me. Eventually somebody said the equivalent of, “If you think you could do it better, do it.”  No introduction to the subject tells you that, simply, good project managers are good leaders.  They optimize what resources they have available, point out areas for improvement, and occasionally carry a stick.  An Agile project manager, freed from the burdens of heavy process, can’t stay busy with chores long and must produce a good team quickly.   I found that through focusing on how the team could work best together and gently pushing during <a href="http://www.pathf.com/blogs/2009/06/agile-fundamentals-the-feedback-loop/">retrospectives</a>,  I left a trail of happy teams on successful projects.</p>
<p>It may not be the most glamorous job, but each team needs one.  To continue the sports theme from <a href="http://www.pathf.com/blogs/2009/08/building-high-performance-agile-team-assume-hit/">my last post</a>:  Most teams populated by very talented athletes.  However, its take a good coach to help each of them reach potential together as a team.  Now, back to leading my team.</p>
<p>Related Services:  <a href="http://www.pathf.com/services/how-we-do-it/" rel="nofollow" >Agile Development</a>, <a href="http://www.pathf.com/services" rel="nofollow" >Custom Software Development</a></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2009/09/agile-2009-reminded-team-leadership-2/">Agile 2009: A reminder of why each team needs leadership</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/08/building-high-performance-agile-team-assume-hit/' rel='bookmark' title='Permanent Link: Building a High Performance Agile Team:  Assume You Will Be a One Hit Wonder'>Building a High Performance Agile Team:  Assume You Will Be a One Hit Wonder</a></li><li><a href='http://www.pathf.com/blogs/2009/09/team-hump-daily-scrums/' rel='bookmark' title='Permanent Link: Getting a team over the fear of daily scrums'>Getting a team over the fear of daily scrums</a></li><li><a href='http://www.pathf.com/blogs/2010/01/whats-agile-box/' rel='bookmark' title='Permanent Link: What’s the value of Agile out of the box?'>What’s the value of Agile out of the box?</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/pv4VfrRlreo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2009/09/agile-2009-reminded-team-leadership-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2009/09/agile-2009-reminded-team-leadership-2/</feedburner:origLink></item>
		<item>
		<title>What will Happen to a Giant</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/ELd4yaucOM8/</link>
		<comments>http://www.pathf.com/blogs/2009/07/what-will-happen-to-a-giant/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 22:08:04 +0000</pubDate>
		<dc:creator>Joe Gillespie</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Disruption]]></category>
		<category><![CDATA[Product Strategy]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[LINUX]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=2813</guid>
		<description><![CDATA[
Although I’ve seen so many players rise and fall over the years, what has inspired this post is the irony of what is happening to Microsoft. In the early years of my technology career it was Microsoft’s ownership of the PC O/S market that primarily allowed other compatible hardware manufacturers to create innovation and eventually [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2009/07/what-will-happen-to-a-giant/">What will Happen to a Giant</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/08/contrasting-apple-and-microsofts-product-strategy-a-tale-of-two-spills/' rel='bookmark' title='Permanent Link: Contrasting Apple and Microsoft&#8217;s Product Strategy: A Tale of Two Spills'>Contrasting Apple and Microsoft&#8217;s Product Strategy: A Tale of Two Spills</a></li><li><a href='http://www.pathf.com/blogs/2010/01/sanity-tablet-hype/' rel='bookmark' title='Permanent Link: Sanity Amid the Tablet Hype'>Sanity Amid the Tablet Hype</a></li><li><a href='http://www.pathf.com/blogs/2008/09/betting-your-business-on-the-iphone/' rel='bookmark' title='Permanent Link: Betting Your Business on the iPhone'>Betting Your Business on the iPhone</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div class="right"><a href="http://www.pathf.com/blogs/wp-content/uploads/2009/06/staypuffedx200.jpg"><img src="http://www.pathf.com/blogs/wp-content/uploads/2009/06/staypuffedx200.jpg" border="0" alt="StayPuft" width="265" height="260" /></a></div>
<p>Although I’ve seen so many players rise and fall over the years, what has inspired this post is the irony of what is happening to Microsoft. In the early years of my technology career it was Microsoft’s ownership of the PC O/S market that primarily allowed other compatible hardware manufacturers to create innovation and eventually marginalize IBM’s dominance of that market.</p>
<p>In the early years of PCs, the applications on top of the O/S weren’t even Microsoft applications. It was only later that Microsoft started developing their own applications and with them the predatory practice of squeezing out other application providers to rule the desktop.</p>
<p><span id="more-2813"></span></p>
<p>Fast forward twenty years, and In many ways, they're a textbook case for two phenomena:  suffering the effects of incumbency (in Clayton Christensen's theory of <a href="http://en.wikipedia.org/wiki/Disruptive_technology" rel="nofollow" >disruptive innovation</a> as articulated in <em>The Innovator's Dilemma</em>)  as well as case of <a href="http://en.wikipedia.org/wiki/Technical_debt" rel="nofollow" >technical debt</a>.</p>
<p>Through some of their strong-handed practices and deep pockets Microsoft has been able to fend off and delay some of the threats from other vendors in the past but, in my opinion, it’s just a matter of time before that convergence of competitive forces brings them down a notch or two. In fact in my opinion it has already been happening on a number of fronts.</p>
<p>On the desktop and especially the mobile side Apple is making significant inroads. The iPhone is taking the high-end cellular phone market by storm, as essentially what will become a PC in a smaller handheld package and certainly owns the “cool factor” now. Although Apple on the desktop and laptop market still is primarily run only on its own hardware, it has adopted the Intel hardware architecture allowing Leopard to run LINUX or Windows under a VM.</p>
<p>The option of running legacy applications under a VM affords users more flexibility of applications while maintaining legacy ties. This is eroding the market for Microsoft’s Desktop Suites, as Open Office and other less expensive alternatives have matured and provide that basic functionality.</p>
<p>Microsoft’s gargantuan O/S suffers immensely from Worm and Viruses and from the negative effects imposed but the software layered on top to offer protection from those ills. On the server side Microsoft long-ago squeezed out Novell years ago but LINUX is still gaining market share here as well as a less expensive, more reliable, and more efficient O/S with less “bloatware”.</p>
<p>As far as the pressure from the Internet side of the equation, Steve Balmer said last week in Chicago that if he had one do over, it would be in the area of search technologies. Google and Amazon, both facilitated by the availability of Internet access from virtually everywhere, are in the process of moving as much functionality as possible to the Internet or the cloud.  Bing is a step in the right direction for Microsoft, but the jury is still out on whether it's too little too late.</p>
<p>While things are certainly changing, Microsoft is still very dominant player now and I’m not advocating that Microsoft is irrelevant or will be soon irrelevant any time soon. What I am saying is there is more than one player on the field now and it is having an impact regarding Microsoft’s market share and what Microsoft is able to charge for their applications. <span> </span>If not for Microsoft’s response to the competition that was initially started by Netscape, I doubt we’d be looking the fact today that any Vendor’s Browsers are free to download. Microsoft isn’t really falling but just losing its stranglehold on the IT world.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2009/07/what-will-happen-to-a-giant/">What will Happen to a Giant</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/08/contrasting-apple-and-microsofts-product-strategy-a-tale-of-two-spills/' rel='bookmark' title='Permanent Link: Contrasting Apple and Microsoft&#8217;s Product Strategy: A Tale of Two Spills'>Contrasting Apple and Microsoft&#8217;s Product Strategy: A Tale of Two Spills</a></li><li><a href='http://www.pathf.com/blogs/2010/01/sanity-tablet-hype/' rel='bookmark' title='Permanent Link: Sanity Amid the Tablet Hype'>Sanity Amid the Tablet Hype</a></li><li><a href='http://www.pathf.com/blogs/2008/09/betting-your-business-on-the-iphone/' rel='bookmark' title='Permanent Link: Betting Your Business on the iPhone'>Betting Your Business on the iPhone</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/ELd4yaucOM8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2009/07/what-will-happen-to-a-giant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2009/07/what-will-happen-to-a-giant/</feedburner:origLink></item>
		<item>
		<title>Remove/Cancel Bubbling for an Event in Flex3</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/JCTFmjREWyw/</link>
		<comments>http://www.pathf.com/blogs/2009/04/remove-bubbling-for-an-event-in-flex3/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 20:18:15 +0000</pubDate>
		<dc:creator>Anthony Caliendo</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[Technologies and Platforms]]></category>
		<category><![CDATA[uxd]]></category>
		<category><![CDATA[Flex3]]></category>
		<category><![CDATA[flexunit]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=2243</guid>
		<description><![CDATA[


I recently had an issue in flex where I needed the click event for a component in an ItemRenderer to not bubble up to the parent list.  Since the click event was being dispatched by Flex SDK code, I could not directly do this by passing false into the event's constructor.  I had [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2009/04/remove-bubbling-for-an-event-in-flex3/">Remove/Cancel Bubbling for an Event in Flex3</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/03/notification-testing-with-puremvc-and-flexunit/' rel='bookmark' title='Permanent Link: Notification Testing with PureMVC and FlexUnit'>Notification Testing with PureMVC and FlexUnit</a></li><li><a href='http://www.pathf.com/blogs/2009/01/getting-rid-of-the-undefined-handler-call-error/' rel='bookmark' title='Permanent Link: Getting Rid of the &#8220;handler.call: handler undefined&#8221; Error'>Getting Rid of the &#8220;handler.call: handler undefined&#8221; Error</a></li><li><a href='http://www.pathf.com/blogs/2009/06/grails-custom-parent-child-aware-tags/' rel='bookmark' title='Permanent Link: Grails: Custom Parent/Child Aware Tags'>Grails: Custom Parent/Child Aware Tags</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div class="right">
<img src="http://www.pathf.com/blogs/wp-content/uploads/2009/04/fx_icon_special_100x100.jpg" alt="fx_icon_special_100x100" width="100" height="100" class="alignnone size-full wp-image-2245" />
</div>
<p>I recently had an issue in flex where I needed the click event for a component in an ItemRenderer to not bubble up to the parent list.  Since the click event was being dispatched by Flex SDK code, I could not directly do this by passing <code>false</code> into the event's constructor.  I had hoped to find a property I could set on the object, something like "clickBubbles", which I could set which would accomplish this.</p>
<p>Either that property doesn't exist or I could not find it.  My solution was to basically hijack the event and send an impersonator in its place.</p>
<p><span id="more-2243"></span></p>
<p>What I ended up doing was writing an event listener function which would stop propagation on the event.  It would then dispatch another event with the same properties as the original, except it would set <code>bubbles</code> to <code>false</code>.  This will prevent the event from bubbling up to parent components, but still allow event listeners to be added to the component itself.</p>
<p>The following is the function I wrote:</p>
<pre class="actionscript">&nbsp;
<span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> removeMouseEventBubble<span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #808080; font-style: italic;">// if the event already does not bubble, we don't</span>
	<span style="color: #808080; font-style: italic;">// need to do anything.</span>
	<span style="color: #808080; font-style: italic;">// also, this will prevent any infinite loops from occurring</span>
	<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">bubbles</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
		<span style="color: #808080; font-style: italic;">// stop the event from being handled by other code</span>
		event.<span style="color: #006600;">stopImmediatePropagation</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
		<span style="color: #808080; font-style: italic;">// dispatch a new event which does not bubble</span>
		event.<span style="color: #0066CC;">target</span>.<span style="color: #006600;">dispatchEvent</span><span style="color: #66cc66;">&#40;</span>
			<span style="color: #000000; font-weight: bold;">new</span> MouseEvent<span style="color: #66cc66;">&#40;</span>
				event.<span style="color: #0066CC;">type</span>, <span style="color: #000000; font-weight: bold;">false</span>, event.<span style="color: #006600;">cancelable</span>,
				event.<span style="color: #006600;">localX</span>, event.<span style="color: #006600;">localY</span>,
				event.<span style="color: #006600;">relatedObject</span>,
				event.<span style="color: #006600;">ctrlKey</span>, event.<span style="color: #006600;">altKey</span>,
				event.<span style="color: #006600;">shiftKey</span>, event.<span style="color: #006600;">buttonDown</span>,
				event.<span style="color: #006600;">delta</span>
			<span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#41;</span>;
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>Now, all you need to do is set the click handler on the component:</p>
<pre class="xml">&nbsp;
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;components:Foo</span> <span style="color: #000066;">click</span>=<span style="color: #ff0000;">&quot;removeMouseEventBubble(event)&quot;</span><span style="font-weight: bold; color: black;">/&gt;</span></span>
&nbsp;</pre>
<p>In order to make sure that this code prevented the original event from propagating and to ensure that it dispatched a similar event which does not bubble, I wrote the following <a href="http://opensource.adobe.com/wiki/display/flexunit/FlexUnit" rel="nofollow" >FlexUnit</a> test. <em>N.B. This code is adapted from an actual test, I wouldn't recommend having the code under test defined in the test case itself, nor do I like the fact that the </em><code>removeMouseEventBubble</code><em> function is being added in the test</em>.</p>
<pre class="actionscript">&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> testShouldRemoveBubbleOnClickButAllowEventListenersToStillFire<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">var</span> component:UIComponent = <span style="color: #000000; font-weight: bold;">new</span> UIComponent<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	component.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>
		MouseEvent.<span style="color: #006600;">CLICK</span>, removeMouseEventBubble
	<span style="color: #66cc66;">&#41;</span>;
&nbsp;
	<span style="color: #808080; font-style: italic;">// if we cannot add other event listeners, then the</span>
	<span style="color: #808080; font-style: italic;">// async function will not get fired and the test will fail.</span>
	component.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">CLICK</span>, addAsync<span style="color: #66cc66;">&#40;</span>
		<span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			assertFalse<span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">bubbles</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
			<span style="color: #808080; font-style: italic;">// assert that the event was translated properly</span>
			assertEquals<span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">CLICK</span>, event.<span style="color: #0066CC;">type</span><span style="color: #66cc66;">&#41;</span>;
			assertTrue<span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">cancelable</span><span style="color: #66cc66;">&#41;</span>;
			assertEquals<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">8</span>, event.<span style="color: #006600;">localX</span><span style="color: #66cc66;">&#41;</span>;
			assertEquals<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">9</span>, event.<span style="color: #006600;">localY</span><span style="color: #66cc66;">&#41;</span>;
			assertEquals<span style="color: #66cc66;">&#40;</span>renderer, event.<span style="color: #006600;">relatedObject</span><span style="color: #66cc66;">&#41;</span>;
			assertTrue<span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">ctrlKey</span><span style="color: #66cc66;">&#41;</span>;
			assertTrue<span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">altKey</span><span style="color: #66cc66;">&#41;</span>;
			assertTrue<span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">shiftKey</span><span style="color: #66cc66;">&#41;</span>;
			assertTrue<span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">buttonDown</span><span style="color: #66cc66;">&#41;</span>;
			assertEquals<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">5</span>, event.<span style="color: #006600;">delta</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>, <span style="color: #cc66cc;">1000</span><span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#41;</span>;
&nbsp;
	component.<span style="color: #006600;">dispatchEvent</span><span style="color: #66cc66;">&#40;</span>
		<span style="color: #000000; font-weight: bold;">new</span> MouseEvent<span style="color: #66cc66;">&#40;</span>
			MouseEvent.<span style="color: #006600;">CLICK</span>, <span style="color: #000000; font-weight: bold;">true</span>, <span style="color: #000000; font-weight: bold;">true</span>, <span style="color: #cc66cc;">8</span>,
			<span style="color: #cc66cc;">9</span>, renderer, <span style="color: #000000; font-weight: bold;">true</span>, <span style="color: #000000; font-weight: bold;">true</span>, <span style="color: #000000; font-weight: bold;">true</span>, <span style="color: #000000; font-weight: bold;">true</span>, <span style="color: #cc66cc;">5</span>
		<span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>I then wrote a test to verify that the event did not bubble up to the parent:</p>
<pre class="actionscript">&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> testShouldNotBubbleClickEventToParent<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">var</span> parent:UIComponent = <span style="color: #000000; font-weight: bold;">new</span> UIComponent<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	parent.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">CLICK</span>,
		<span style="color: #000000; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>event:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span>
			<span style="color: #808080; font-style: italic;">// this won't cause the test to fail per say,</span>
			<span style="color: #808080; font-style: italic;">// but it will cause an exception to be thrown</span>
			<span style="color: #808080; font-style: italic;">// and this will show up when executing the</span>
			<span style="color: #808080; font-style: italic;">// test.  This will fail the build, especially</span>
			<span style="color: #808080; font-style: italic;">// if run on a CI server like hudson or cruise.</span>
			fail<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'did not expect event to bubble'</span><span style="color: #66cc66;">&#41;</span>;
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#41;</span>;
&nbsp;
	<span style="color: #000000; font-weight: bold;">var</span> child:UIComponent = <span style="color: #000000; font-weight: bold;">new</span> UIComponent<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
	child.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>
		MouseEvent.<span style="color: #006600;">CLICK</span>, removeMouseEventBubble
	<span style="color: #66cc66;">&#41;</span>;
	parent.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>child<span style="color: #66cc66;">&#41;</span>;
&nbsp;
	child.<span style="color: #006600;">dispatchEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> MouseEvent<span style="color: #66cc66;">&#40;</span>MouseEvent.<span style="color: #006600;">CLICK</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>This solution works, but I was hoping there was something more elegant and less hacky which accomplished the same thing.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2009/04/remove-bubbling-for-an-event-in-flex3/">Remove/Cancel Bubbling for an Event in Flex3</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/03/notification-testing-with-puremvc-and-flexunit/' rel='bookmark' title='Permanent Link: Notification Testing with PureMVC and FlexUnit'>Notification Testing with PureMVC and FlexUnit</a></li><li><a href='http://www.pathf.com/blogs/2009/01/getting-rid-of-the-undefined-handler-call-error/' rel='bookmark' title='Permanent Link: Getting Rid of the &#8220;handler.call: handler undefined&#8221; Error'>Getting Rid of the &#8220;handler.call: handler undefined&#8221; Error</a></li><li><a href='http://www.pathf.com/blogs/2009/06/grails-custom-parent-child-aware-tags/' rel='bookmark' title='Permanent Link: Grails: Custom Parent/Child Aware Tags'>Grails: Custom Parent/Child Aware Tags</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/JCTFmjREWyw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2009/04/remove-bubbling-for-an-event-in-flex3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2009/04/remove-bubbling-for-an-event-in-flex3/</feedburner:origLink></item>
		<item>
		<title>Adopt a non-techie. Help your business team move faster</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/tVTgsrFVoAE/</link>
		<comments>http://www.pathf.com/blogs/2009/04/adopt-a-non-techie-help-your-business-team-move-faster/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 10:00:58 +0000</pubDate>
		<dc:creator>John McCaffrey</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Pathfinder General]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[Technologies and Platforms]]></category>
		<category><![CDATA[User Experience Design]]></category>
		<category><![CDATA[iPhone/Mobile]]></category>
		<category><![CDATA[uxd]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[google docs]]></category>
		<category><![CDATA[imacros]]></category>
		<category><![CDATA[neal ford]]></category>
		<category><![CDATA[nfjs]]></category>
		<category><![CDATA[Pair Programming]]></category>
		<category><![CDATA[portableapps]]></category>
		<category><![CDATA[productive programer]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[regular expressions]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1983</guid>
		<description><![CDATA[
 I've been spending some time with our internal sales and marketing team to hash out some of our goals for the year, and it became quite clear to me that non-developers are on their computers all day long facing some of the same technical challenges we do.
Some of the tasks they have to do:

"take [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2009/04/adopt-a-non-techie-help-your-business-team-move-faster/">Adopt a non-techie. Help your business team move faster</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/04/can-your-selenium-do-that-testing-flashflex-and-silverlight-in-web-apps-with-imacros/' rel='bookmark' title='Permanent Link: Can your Selenium do that? Testing flash/flex and silverlight in web apps with iMacros'>Can your Selenium do that? Testing flash/flex and silverlight in web apps with iMacros</a></li><li><a href='http://www.pathf.com/blogs/2009/06/stick-with-erb-or-move-to-haml/' rel='bookmark' title='Permanent Link: Stick with ERB or move to Haml'>Stick with ERB or move to Haml</a></li><li><a href='http://www.pathf.com/blogs/2009/09/does-your-project-have-code-ownership-culture/' rel='bookmark' title='Permanent Link: Does your project have Code Ownership Culture?'>Does your project have Code Ownership Culture?</a></li></ol>]]></description>
			<content:encoded><![CDATA[<div class="right"><img class="alignright size-full wp-image-1998" src="http://www.pathf.com/blogs/wp-content/uploads/2009/04/confused-computer-user.jpg" alt="" height="125" /></div>
<p> I've been spending some time with our internal sales and marketing team to hash out some of our goals for the year, and it became quite clear to me that non-developers are on their computers all day long facing some of the same technical challenges we do.</p>
<p><strong>Some of the tasks they have to do:</strong></p>
<ul>
<li>"take the data out of the spreadsheet for last quarter and compare it to this quarter"</li>
<li>"gather the bounced emails from <a href="http://www.pathf.com/newsletter/newsletter-archive/" rel="nofollow"  target="_blank">our newsletter</a> posting, and update our list, pulling out duplicates"</li>
<li>"replace all the names and addresses from our NDA agreement each time it is sent to a new client"</li>
<li>"slice and dice google ad-words and google analytics data"</li>
</ul>
<p><span> </span></p>
<p>So I've resolved to take some time each week to 'Adopt a non-techie', and help them spend less time 'screwing around with the computer' and more time on the most valuable tasks they do.</p>
<p>In the same way that developers need to be as efficient as possible with the tools they use, <span id="more-1983"></span>so do the rest of the people at your company. At Pathfinder a good number of us have attended <a href="http://books.google.com/books?id=oVadw8Jf0cYC&amp;dq=neal+ford+productive+programmer&amp;printsec=frontcover&amp;source=bl&amp;ots=fbIouS5hPw&amp;sig=u26tEhBQ00KJwBiqR-pbt65CH4Q&amp;hl=en&amp;ei=6JjbSe7OBYTMyQXOmvi9CA&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=2#PPA31,M1" rel="nofollow"  target="_blank">Neal Ford's Productive Programmer</a> talks at the <a href="http://www.nofluffjuststuff.com/conference/speaker/neal_ford.html" rel="nofollow"  target="_blank">NofluffJustStuff </a>conference, which covers a series of strategies for becoming extremely efficient as a developer. For those on our team that haven't attended the presentations, they pick up the best tricks through pairing and internal developer brownbags, but now I suggest we take the same approach with our business team.</p>
<p><span> </span></p>
<p>While the benefits of having two developers pair on a technical task has been <a href="http://www.google.com/search?hl=en&amp;rlz=1C1GGLS_en-USUS294US303&amp;q=~benefits+of+'pair+programming'+agile+best+practices+blog+TDD+speed+faster+better+less+bugs&amp;btnG=Search" rel="nofollow"  target="_blank">covered a million times</a>, I would say it also applies to pairing with your UI designer, QA and BA resources as well. Whenever they need to take lots of text and reformat it, search/replace, etc, they might be tackling that problem manually, when you could help them solve it with a quick script or finding the plugin they need.</p>
<p><strong> A few areas you might be able to help them with:</strong></p>
<ol>
<li>Forms and mail merge in word</li>
<li>Advanced searching and replacing in word</li>
<li>Google docs now has more powerful regular expression capabilities for searching and replacing (Actually, I could do a whole post on the benefits of getting your team to use GoogleDocs, would anyone be interested in that?)</li>
<li>Building a quick survey with google forms or surveymonkey</li>
<li>General text manipulation</li>
<li>Searching through all of their emails or local documents for anything related to the 'Jelly Belly vs. M&amp;Ms' case</li>
<li>Excel spreadsheet manipulation, charts, etc.</li>
<li>Web searching and data extraction</li>
<li>Managing and sharing bookmarks and research data with others</li>
<li>Even tools like Selenium or <a href="http://www.pathf.com/blogs/2009/04/can-your-selenium-do-that-testing-flashflex-and-silverlight-in-web-apps-with-imacros" target="_blank">iMacros</a> could help your Business team automate repetitive form filling, web searching or web site testing.</li>
</ol>
<p><strong>Goals (First do no harm!):</strong></p>
<ol>
<li>Find the right problem. Just like we see in Product development, sometimes the most difficult problem is also the rarest, and not the best use of your time. In fact, the greatest area of efficiency is more likely to come from something they <em>know </em>how to do, but could be doing faster. (Instead of saving them 30mins off of a task they do twice a year, you might find something that saves 15mins every day!)</li>
<li>Don't expect them to become a developer. The goal is to reduce the time these things get in their way, so they can focus on the higher value stuff.</li>
<li>Make it easy for them to repeat the process (let them document it in their words, or even make a screencast while you're doing it)</li>
<li>Share your successes with the rest of the team (notes and screenshots/videos up on the wiki)</li>
</ol>
<p><strong>Use the right tools for the job!</strong></p>
<p>While its best if you can help them to become more efficient with the tools they use everyday, you may find that they are just not using the right tool for the job, or if its a one-time thing, and you need to bring your toolkit with you.  For that I recommend a usb drive with your favorite <a href="http://portableapps.com/" rel="nofollow"  target="_blank">PortableApps</a> (notepad++ is great for text editing), or my new favorite PortableUbuntu (which lets you run linux off the usb drive, while accessing the files on the windows system)</p>
<p><span> </span></p>
<p><strong>What gets in your way?</strong></p>
<p>To the business folks out there, what are some of the tasks you do to manipulate data? What frustrates you or eats up a lot of your time?</p>
<p>Reach out to your nearest techie, I bet they can help, or post your problem here and we'll make some recommendations.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2009/04/adopt-a-non-techie-help-your-business-team-move-faster/">Adopt a non-techie. Help your business team move faster</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2009/04/can-your-selenium-do-that-testing-flashflex-and-silverlight-in-web-apps-with-imacros/' rel='bookmark' title='Permanent Link: Can your Selenium do that? Testing flash/flex and silverlight in web apps with iMacros'>Can your Selenium do that? Testing flash/flex and silverlight in web apps with iMacros</a></li><li><a href='http://www.pathf.com/blogs/2009/06/stick-with-erb-or-move-to-haml/' rel='bookmark' title='Permanent Link: Stick with ERB or move to Haml'>Stick with ERB or move to Haml</a></li><li><a href='http://www.pathf.com/blogs/2009/09/does-your-project-have-code-ownership-culture/' rel='bookmark' title='Permanent Link: Does your project have Code Ownership Culture?'>Does your project have Code Ownership Culture?</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/tVTgsrFVoAE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2009/04/adopt-a-non-techie-help-your-business-team-move-faster/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2009/04/adopt-a-non-techie-help-your-business-team-move-faster/</feedburner:origLink></item>
		<item>
		<title>ILog Aquired by IBM</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/1Eb4ar9vUFs/</link>
		<comments>http://www.pathf.com/blogs/2009/01/ilog-aquired-by-ibm/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 23:32:35 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Custom Application Development]]></category>
		<category><![CDATA[Rich Internet Apps]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[ILog]]></category>
		<category><![CDATA[ILOG JRules]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1362</guid>
		<description><![CDATA[I've used the ILog Business Rules products on a number of projects. Reasonable software. Does the job. Not exactly cheap. I'm not sure why they went for the aquisition by IBM -- it was announced back at the end of July, so likely nothing to do with hard economic times.
What does this mean for software [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2009/01/ilog-aquired-by-ibm/">ILog Aquired by IBM</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/03/_ibm_to_acquire/' rel='bookmark' title='Permanent Link: IBM to acquire ILOG and other rumors'>IBM to acquire ILOG and other rumors</a></li><li><a href='http://www.pathf.com/blogs/2006/03/ibm_and_ilog_pl/' rel='bookmark' title='Permanent Link: IBM and ILOG playing nice'>IBM and ILOG playing nice</a></li><li><a href='http://www.pathf.com/blogs/2008/06/gwt-showcase-brms-for-jboss-rules/' rel='bookmark' title='Permanent Link: GWT Showcase &#8211; BRMS for JBoss Rules'>GWT Showcase &#8211; BRMS for JBoss Rules</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>I've used the <a href="http://www.ilog.com/products/businessrules/" rel="nofollow"  target="_blank">ILog Business Rules</a> products on a number of projects. Reasonable software. Does the job. Not exactly cheap. I'm not sure why they went for the <a href="http://www-03.ibm.com/press/us/en/pressrelease/26403.wss" rel="nofollow"  target="_blank">aquisition by IBM</a> -- it was <a href="http://www.ilog.com/corporate/releases/us/080728_ibm.cfm" rel="nofollow"  target="_blank">announced back at the end of July</a>, so likely nothing to do with hard economic times.</p>
<p>What does this mean for software developers and system integrators? Back when the aquisition plans were first announced, I joked that we would soon be using WebSphere rules. And wouldn't you know it, the aquisition announcement mentions ILog and WebSphere in the same sentence several times.</p>
<p><span id="more-1362"></span></p>
<p>So, what does it mean for us? It means that IBM is likely going to give the ILog business rules products the WebSphere treatment, i.e. polute a perfectly good package with all sorts of WebSphere goodness until it isn't fit for integrator consumption. I'm sure there are going to be at least twice as many xml configurations files and an enourmous Java runtime that takes 10 minutes to start up. <img src='http://www.pathf.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Actually, IBM isn't even the worst of the big software vendors in regard to infecting aquisitions. Oracle is the undisputed champ in this regard. Don't get me wrong, I love their database product, but they buy a best-of-breed product, they get their hooks into it and turn it into something that you'd be crazy to run without the database. It makes sense from a product management perspective -- if you want to sell more databases, make sure that people who buy your other products need to use your database. Ergo, rewrite 30% of the application in PL/SQL. <img src='http://www.pathf.com/blogs/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Here's hoping I'm wrong about ILog and IBM.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2009/01/ilog-aquired-by-ibm/">ILog Aquired by IBM</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/03/_ibm_to_acquire/' rel='bookmark' title='Permanent Link: IBM to acquire ILOG and other rumors'>IBM to acquire ILOG and other rumors</a></li><li><a href='http://www.pathf.com/blogs/2006/03/ibm_and_ilog_pl/' rel='bookmark' title='Permanent Link: IBM and ILOG playing nice'>IBM and ILOG playing nice</a></li><li><a href='http://www.pathf.com/blogs/2008/06/gwt-showcase-brms-for-jboss-rules/' rel='bookmark' title='Permanent Link: GWT Showcase &#8211; BRMS for JBoss Rules'>GWT Showcase &#8211; BRMS for JBoss Rules</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/1Eb4ar9vUFs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2009/01/ilog-aquired-by-ibm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2009/01/ilog-aquired-by-ibm/</feedburner:origLink></item>
		<item>
		<title>Category and UI changes on Pathfinder blogs</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/_-qQ6verYHo/</link>
		<comments>http://www.pathf.com/blogs/2008/12/category-and-ui-changes-on-pathfinder-blogs/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 16:50:45 +0000</pubDate>
		<dc:creator>Brian Dillard</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Custom Application Development]]></category>
		<category><![CDATA[Disruption]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Flex, Flash and Air]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Pathfinder General]]></category>
		<category><![CDATA[Pathfinder News]]></category>
		<category><![CDATA[Product Strategy]]></category>
		<category><![CDATA[Rich Internet Apps]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Social Applications]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[Technologies and Platforms]]></category>
		<category><![CDATA[User Experience Design]]></category>
		<category><![CDATA[iPhone/Mobile]]></category>
		<category><![CDATA[uxd]]></category>
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/?p=1338</guid>
		<description><![CDATA[If you read one or more of the Pathfinder blogs in our web interface, you may have noticed some tweaks to our navigation and top-level categories. Our goal in making these changes was to help different audiences drill down to the specific content that interests them. Instead of just a few top-level categories, we now [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/12/category-and-ui-changes-on-pathfinder-blogs/">Category and UI changes on Pathfinder blogs</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/05/the-blogs-have-moved/' rel='bookmark' title='Permanent Link: The Blogs Have Moved'>The Blogs Have Moved</a></li><li><a href='http://www.pathf.com/blogs/2008/12/puremvc-spanning-the-platform-spectrum/' rel='bookmark' title='Permanent Link: PureMVC, Spanning the Platform Spectrum?'>PureMVC, Spanning the Platform Spectrum?</a></li><li><a href='http://www.pathf.com/blogs/2009/04/touch-screen-kiosk-in-adobe-air/' rel='bookmark' title='Permanent Link: Touch Screen Kiosk in Adobe Air'>Touch Screen Kiosk in Adobe Air</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>If you read one or more of the Pathfinder blogs in our web interface, you may have noticed some tweaks to our navigation and top-level categories. Our goal in making these changes was to help different audiences drill down to the specific content that interests them. Instead of just a few top-level categories, we now boast around 20, though many posts appear in multiple categories. To subscribe via RSS to any specific category - or to our entire feed - just visit our <a href="http://www.pathf.com/blogs/feeds/">Feeds</a> page.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/12/category-and-ui-changes-on-pathfinder-blogs/">Category and UI changes on Pathfinder blogs</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/05/the-blogs-have-moved/' rel='bookmark' title='Permanent Link: The Blogs Have Moved'>The Blogs Have Moved</a></li><li><a href='http://www.pathf.com/blogs/2008/12/puremvc-spanning-the-platform-spectrum/' rel='bookmark' title='Permanent Link: PureMVC, Spanning the Platform Spectrum?'>PureMVC, Spanning the Platform Spectrum?</a></li><li><a href='http://www.pathf.com/blogs/2009/04/touch-screen-kiosk-in-adobe-air/' rel='bookmark' title='Permanent Link: Touch Screen Kiosk in Adobe Air'>Touch Screen Kiosk in Adobe Air</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/_-qQ6verYHo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/12/category-and-ui-changes-on-pathfinder-blogs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2008/12/category-and-ui-changes-on-pathfinder-blogs/</feedburner:origLink></item>
		<item>
		<title>GWT Showcase – BRMS for JBoss Rules</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/88sZaDc3gnA/</link>
		<comments>http://www.pathf.com/blogs/2008/06/gwt-showcase-brms-for-jboss-rules/#comments</comments>
		<pubDate>Fri, 20 Jun 2008 02:06:48 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Software Development Best Practices]]></category>
		<category><![CDATA[Blaze Advisor]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[ILOG JRules]]></category>
		<category><![CDATA[RETE]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/2008/06/gwt-showcase-brms-for-jboss-rules/</guid>
		<description><![CDATA[JBoss Rules (the former "Drools," though it's sad to see that cringe-inducing name making a comeback) is a Business Rules Engine (BRE). Those are the logic engines that allow you to execute a large set of "if-then" rules against a large set of facts (the most common algorithm to achieve this kind of performance is [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/06/gwt-showcase-brms-for-jboss-rules/">GWT Showcase &#8211; BRMS for JBoss Rules</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/08/jboss_rules_wik/' rel='bookmark' title='Permanent Link: JBoss Rules Wiki &#8211; A Business Rules Community of Practice'>JBoss Rules Wiki &#8211; A Business Rules Community of Practice</a></li><li><a href='http://www.pathf.com/blogs/2007/04/will_jboss_rule/' rel='bookmark' title='Permanent Link: Will JBoss Rules 3.1 Do for BRE&#8217;s What mySQL Did for RDBMS&#8217;?'>Will JBoss Rules 3.1 Do for BRE&#8217;s What mySQL Did for RDBMS&#8217;?</a></li><li><a href='http://www.pathf.com/blogs/2006/06/business_rules_/' rel='bookmark' title='Permanent Link: Business Rules Resources'>Business Rules Resources</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.pathf.com/blogs/wp-content/uploads/2008/06/brms-ruleexplorer.png"><img class="alignright size-medium wp-image-976" style="float:right;padding:10px;" title="brms-ruleexplorer.png" src="http://www.pathf.com/blogs/wp-content/uploads/2008/06/brms-ruleexplorer.png" alt="" width="300" height="134" /></a><a href="http://www.jboss.org/drools/" rel="nofollow"  target="_blank">JBoss Rules</a> (the former "Drools," though it's sad to see that cringe-inducing name making a comeback) is a Business Rules Engine (<a href="http://en.wikipedia.org/wiki/Business_rules_engine" rel="nofollow"  target="_blank">BRE</a>). Those are the logic engines that allow you to execute a large set of "if-then" rules against a large set of facts (the most common algorithm to achieve this kind of performance is called RETE, from the ancient Greek for "net"). For more on BRE's and how to use them, have a look at our <a href="http://www.pathf.com/blogs/category/business-rules/" target="_blank">Business Rules blog</a>.</p>
<p>One of the things that has differentiated commercial BRE's like <a href="http://www.fairisaac.com/fic/en/product-service/product-index/blaze-advisor/" rel="nofollow"  target="_blank">Blaze Advisor</a> and <a href="http://www.ilog.com/products/jrules/" rel="nofollow"  target="_blank">ILOG JRules</a> from the Open Source JBoss Rules is the tools. The commercial BRE's were part of a suite of development and management tools -- IDE's, "natural" language support, Business Rules Management Systems (<a href="http://en.wikipedia.org/wiki/BRMS" rel="nofollow"  target="_blank">BRMS</a>) -- that made their use in a corporate IT "ecosystem" much easier.</p>
<p>With version 4 of JBoss Rules, you now get a powerful workbench plugin for Eclipse, support for Domain Specific Languages (DSL) that mimick natural language, and a web-based BRMS. With it you can deploy, roll back, and report on your rules.</p>
<p>The BRMS has a nice Ajax interface and is in fact written in GWT. This is a natural for a Java-based system like JBoss Rules. If the developers who use and develop JBoss Rules can also tinker with the BRMS interface (GWT==Java in the browser), the odds are better that the BRMS will evolve apace with the core system.</p>
<p>Compare this with a framework like <a href="http://wiki.nextapp.com/echowiki/Echo3" rel="nofollow"  target="_blank">Echo2/3</a> where there is only a small cadre of developers who develop the JavaScript piece of what is essentially a Java centric framework, and consequently the development has lagged relative to other frameworks. So, good decision for JBoss Rules and probably a good decision if you are adding a web interface to your own Java system.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/06/gwt-showcase-brms-for-jboss-rules/">GWT Showcase &#8211; BRMS for JBoss Rules</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/08/jboss_rules_wik/' rel='bookmark' title='Permanent Link: JBoss Rules Wiki &#8211; A Business Rules Community of Practice'>JBoss Rules Wiki &#8211; A Business Rules Community of Practice</a></li><li><a href='http://www.pathf.com/blogs/2007/04/will_jboss_rule/' rel='bookmark' title='Permanent Link: Will JBoss Rules 3.1 Do for BRE&#8217;s What mySQL Did for RDBMS&#8217;?'>Will JBoss Rules 3.1 Do for BRE&#8217;s What mySQL Did for RDBMS&#8217;?</a></li><li><a href='http://www.pathf.com/blogs/2006/06/business_rules_/' rel='bookmark' title='Permanent Link: Business Rules Resources'>Business Rules Resources</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/88sZaDc3gnA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/06/gwt-showcase-brms-for-jboss-rules/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2008/06/gwt-showcase-brms-for-jboss-rules/</feedburner:origLink></item>
		<item>
		<title>The Blogs Have Moved</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/5eC3agAeXUg/</link>
		<comments>http://www.pathf.com/blogs/2008/05/the-blogs-have-moved/#comments</comments>
		<pubDate>Sun, 25 May 2008 21:36:13 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Pathfinder News]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technologies and Platforms]]></category>
		<category><![CDATA[User Experience Design]]></category>
		<category><![CDATA[Announcement]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/2008/05/the-blogs-have-moved/</guid>
		<description><![CDATA[After laboring away on Typepad because it was easy and, frankly, we had more important things to do, we have finally made the move to our own in-house blog. It now sits under the web site at http://www.pathf.com/blogs/ and combines our various blogs -- Agile Ajax, UXD, Business Rules and Techdev. You can still access [...]<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/05/the-blogs-have-moved/">The Blogs Have Moved</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/12/category-and-ui-changes-on-pathfinder-blogs/' rel='bookmark' title='Permanent Link: Category and UI changes on Pathfinder blogs'>Category and UI changes on Pathfinder blogs</a></li><li><a href='http://www.pathf.com/blogs/2006/03/two_interesting/' rel='bookmark' title='Permanent Link: Two Interesting Blogs'>Two Interesting Blogs</a></li><li><a href='http://www.pathf.com/blogs/2008/07/ajax-overhaul-part-3-retrofit-existing-sites-with-jquery-ajax-tabs-and-photo-carousels-up-on-ibm-developer-works/' rel='bookmark' title='Permanent Link: &#8220;Ajax Overhaul, Part 3:  Retrofit existing sites with jQuery, Ajax tabs, and photo carousels&#8221; Up on IBM Developerworks'>&#8220;Ajax Overhaul, Part 3:  Retrofit existing sites with jQuery, Ajax tabs, and photo carousels&#8221; Up on IBM Developerworks</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>After laboring away on Typepad because it was easy and, frankly, we had more important things to do, we have finally made the move to our own in-house blog. It now sits under the web site at <a href="http://www.pathf.com/blogs/">http://www.pathf.com/blogs/</a> and combines our various blogs -- Agile Ajax, UXD, Business Rules and Techdev. You can still access all of the sub-blogs individually through their feeds and category pages.</p>
<p>If you run into any issues (which I'm sure you will, given the contortions we had to go through to deal with Typepad's funky url's), drop us a line at <a href="mailto:info@pathf.com" rel="nofollow" >info@pathf.com</a>.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2008/05/the-blogs-have-moved/">The Blogs Have Moved</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/12/category-and-ui-changes-on-pathfinder-blogs/' rel='bookmark' title='Permanent Link: Category and UI changes on Pathfinder blogs'>Category and UI changes on Pathfinder blogs</a></li><li><a href='http://www.pathf.com/blogs/2006/03/two_interesting/' rel='bookmark' title='Permanent Link: Two Interesting Blogs'>Two Interesting Blogs</a></li><li><a href='http://www.pathf.com/blogs/2008/07/ajax-overhaul-part-3-retrofit-existing-sites-with-jquery-ajax-tabs-and-photo-carousels-up-on-ibm-developer-works/' rel='bookmark' title='Permanent Link: &#8220;Ajax Overhaul, Part 3:  Retrofit existing sites with jQuery, Ajax tabs, and photo carousels&#8221; Up on IBM Developerworks'>&#8220;Ajax Overhaul, Part 3:  Retrofit existing sites with jQuery, Ajax tabs, and photo carousels&#8221; Up on IBM Developerworks</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/5eC3agAeXUg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2008/05/the-blogs-have-moved/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2008/05/the-blogs-have-moved/</feedburner:origLink></item>
		<item>
		<title>Something to watch: Ruleby, a Ruby RETE Implementation</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/qDX5IEDjkNU/</link>
		<comments>http://www.pathf.com/blogs/2007/12/something-to-wa/#comments</comments>
		<pubDate>Fri, 14 Dec 2007 19:20:12 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[RETE]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/2007/12/something-to-wa/</guid>
		<description><![CDATA[As Rails (and Ruby) climbs the hype curve, more and more systems are getting implemented that could benefit from a BRE. There are two (Rools and SIE) that don't use RETE. But Ruleby does, though it is in version 0.1...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2007/12/something-to-wa/">Something to watch: Ruleby, a Ruby RETE Implementation</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/04/explaining_rete/' rel='bookmark' title='Permanent Link: Explaining RETE'>Explaining RETE</a></li><li><a href='http://www.pathf.com/blogs/2006/04/do_you_really_n/' rel='bookmark' title='Permanent Link: Do You Really Need RETE?'>Do You Really Need RETE?</a></li><li><a href='http://www.pathf.com/blogs/2007/11/intellij-idea-a/' rel='bookmark' title='Permanent Link: IntelliJ IDEA and Ruby on Rails'>IntelliJ IDEA and Ruby on Rails</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>As Rails (and Ruby) climbs the hype curve, more and more systems are getting implemented that could benefit from a BRE. There are two (<a href="http://rools.rubyforge.org/" rel="nofollow" >Rools</a> and <a href="http://homepage.ntlworld.com/peterhi/sie.html" rel="nofollow" >SIE</a>) that don't use RETE. But <a href="http://rubyforge.org/projects/ruleby/" rel="nofollow" >Ruleby</a> does, though it is in version 0.1 now. I'll post a couple of examples in it in the next couple of weeks.</p>
<p>Technorati Tags: <a href="http://technorati.com/tag/bre" rel="nofollow" class="performancingtags"  rel="tag">bre</a>, <a href="http://technorati.com/tag/ruby" rel="nofollow" class="performancingtags"  rel="tag">ruby</a>, <a href="http://technorati.com/tag/rails" rel="nofollow" class="performancingtags"  rel="tag">rails</a>, <a href="http://technorati.com/tag/rete" rel="nofollow" class="performancingtags"  rel="tag">rete</a>, <a href="http://technorati.com/tag/rools" rel="nofollow" class="performancingtags"  rel="tag">rools</a>, <a href="http://technorati.com/tag/SIE" rel="nofollow" class="performancingtags"  rel="tag">SIE</a>, <a href="http://technorati.com/tag/Ruleby" rel="nofollow" class="performancingtags"  rel="tag">Ruleby</a></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2007/12/something-to-wa/">Something to watch: Ruleby, a Ruby RETE Implementation</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/04/explaining_rete/' rel='bookmark' title='Permanent Link: Explaining RETE'>Explaining RETE</a></li><li><a href='http://www.pathf.com/blogs/2006/04/do_you_really_n/' rel='bookmark' title='Permanent Link: Do You Really Need RETE?'>Do You Really Need RETE?</a></li><li><a href='http://www.pathf.com/blogs/2007/11/intellij-idea-a/' rel='bookmark' title='Permanent Link: IntelliJ IDEA and Ruby on Rails'>IntelliJ IDEA and Ruby on Rails</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/qDX5IEDjkNU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2007/12/something-to-wa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2007/12/something-to-wa/</feedburner:origLink></item>
		<item>
		<title>BRE Patterns III: Collaboration Cop, Part II</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/_3_xYwH70uU/</link>
		<comments>http://www.pathf.com/blogs/2007/05/bre_patterns_ii/#comments</comments>
		<pubDate>Sun, 13 May 2007 02:58:18 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Patterns]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/2007/05/bre_patterns_ii/</guid>
		<description><![CDATA[In explaining this pattern, I wanted to take a step back and explain where and how OO and BRE's intersect. To start with, this excellent post over at Mark Proctor's blog makes the following statement: Assert all your objects as...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2007/05/bre_patterns_ii/">BRE Patterns III: Collaboration Cop, Part II</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2007/02/bre_patterns_ii-2/' rel='bookmark' title='Permanent Link: BRE Patterns III: Collaboration Cop, Part I'>BRE Patterns III: Collaboration Cop, Part I</a></li><li><a href='http://www.pathf.com/blogs/2006/05/bre_patterns_i/' rel='bookmark' title='Permanent Link: BRE Patterns I: The Fact Harvest'>BRE Patterns I: The Fact Harvest</a></li><li><a href='http://www.pathf.com/blogs/2006/07/jsr94_getting_y/' rel='bookmark' title='Permanent Link: JSR-94 &#8211; Getting Your Feet Wet'>JSR-94 &#8211; Getting Your Feet Wet</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>In explaining <a href="http://blogs.pathf.com/business_rules/2007/02/bre_patterns_ii.html" rel="nofollow"  target="_blank">this pattern</a>, I wanted to take a step back and explain where and how OO and BRE's intersect. To start with, this <a href="http://markproctor.blogspot.com/2007/03/writing-better-rules.html" rel="nofollow"  target="_blank">excellent post</a> over at Mark Proctor's blog makes the following statement:</p>
<blockquote>
<p>Assert all your objects as facts: Rule engines usually know how to handle a fairly heavy load of facts, so let the engine do its magic. If you want to reason over a nested set of objects, assert all of them (not only the top level ones) into the engine and make sure your business model models the relationship between them. After that, writing your rules will be easier and the engine will be able to optimize execution (when compared to using eval and other constructs to access deeply nested structures). Example: if you have an Order fact that contains a list of OrderItems, assert both Order and OrdemItems as facts (if you need to reason over OrderItems too, obviously).</p>
</blockquote>
<p>Why, by all that is object oriented, do you have to turn your domain model inside out, exposing what was hidden, unencapsulating what was encapsulated? Isn't this defeating the purpose of object orientation? The answer is, in short, yes. You are defeating the purpose of OO when you expose the innards of your model to the BRE. But it is a tradeoff. You get something for your trouble. Specifically, you get the super efficient rule matching of RETE and it's decendents.</p>
<p>This sort of exploding of the object model happens all the time in systems, and it isn't necessarily always bad. Alen Hollub (author of <a href="http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html" rel="nofollow" ><em>Why getter and setter methods are evil</em></a> and other Edsger Dijkstra-like articles) has identified the "procedural boundary layer" and explains it nicely in his book <a href="http://www.amazon.com/Holub-Patterns-Learning-Design-Looking/dp/159059388X" rel="nofollow"  target="_blank"><em>Holub on Patterns: Learning Design Patterns by Looking at Code</em></a>:</p>
<blockquote>
<p>One big exception exists to the no-getter-or-setter rule. I think of all OO systems as having a "procedural boundary layer." The vast majority of OO programs run on procedural operating systems and talk to procedural databases, for example. The interfaces to these external procedural subsystems are by their nature generic. The designer of JDBC hasn't a clue about what you'll be doing with the database, so the class design has to be unfocused and highly flexible. UI-builder classes such as Java's Swing library are another example of a "boundary-layer" library. The designers of Swing can't have any idea about how their classes will be used; they're too generic. Normally, it would be a bad thing to build lots of flexibility that you didn't use because it increases development time. Nonetheless, the extra flexibility is unavoidable in these boundary APIs, so the boundary-layer classes are loaded with accessor and mutator methods. The designers really have no choice.</p>
</blockquote>
<p>BRE's are not OO. Yes, the facts can be viewed as objects and the BRE's can be implemented using and OO language and design, but really the internal working of the BRE are most definitely not OO, the more the rule engine knows about each and every object and its innards, the more efficient it can be. Thus the PBL (procedural boundary layer) applies.</p>
<p>As an example why you need to expose all object, consider an order that is made up of line items.</p>
<p><code>public interface Order {<br/>[...]<br/>void addItem(OrderLineItem item);<br/>boolean removeItem(OrderLineItem item);<br/>[...]<br/>}</code></p>
<p>Now normally you would hide the details of all the line items inside the class that implements the Order interface. Let's suppose now that we haven't added any of the encapsulated line items to the working memory of the BRE's, just the order. Now let's say we update one of the line items through an operation. The only way we have to telling the BRE that something has changes is by flagging the enclosing Order object. That will trigger a reevaluation of every rule in which the Order plays a part, even ones where the line items play no part.</p>
<p>There are all sorts of ways of dealing with exposing the internals of your domain model to the BRE without breaking encapsulation. One way is to implement both the business interface and a bean interface (getters, setters, etc.) in the implementation (see diagram). The business interface is used within the domain model, the bean interface in the BRE.</p>
<p><a href="http://blogs.pathf.com/business_rules/BREExample.png" rel="nofollow"  rel="lightbox" title="BREExample.png"><img src="http://blogs.pathf.com/business_rules/BREExample_tn.jpg" title="BREExample.png" height="167" width="200" alt="BREExample.png" border="0" id="urn:zoundry:jid:BREExample.png"/></a></p>
<p>Another approach is to wrap the domain objects in bean containers that access the private instance variables through reflection.</p>
<p>Of course lots of this depends on the specific BRE you are using. Some require you to expose your instance variables directly and don't deal well with method calls. I'd suggest not using those.</p>
<p>Next time I'll go through a simple example using JBoss Rules showing how to convert a domain model to a Collaboration Cop rule base.</p>
<p><br/>
<p class="zoundry_bw_tags">
<!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com --><br />
<span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/bre" rel="nofollow"  class="ztag" rel="tag">bre</a>, <a href="http://technorati.com/tag/business%20rules" rel="nofollow"  class="ztag" rel="tag">business rules</a>, <a href="http://technorati.com/tag/holub" rel="nofollow"  class="ztag" rel="tag">holub</a>, <a href="http://technorati.com/tag/ooad" rel="nofollow"  class="ztag" rel="tag">ooad</a>, <a href="http://technorati.com/tag/patterns" rel="nofollow"  class="ztag" rel="tag">patterns</a>, <a href="http://technorati.com/tag/procedural%20boundary" rel="nofollow"  class="ztag" rel="tag">procedural boundary</a></span></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2007/05/bre_patterns_ii/">BRE Patterns III: Collaboration Cop, Part II</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2007/02/bre_patterns_ii-2/' rel='bookmark' title='Permanent Link: BRE Patterns III: Collaboration Cop, Part I'>BRE Patterns III: Collaboration Cop, Part I</a></li><li><a href='http://www.pathf.com/blogs/2006/05/bre_patterns_i/' rel='bookmark' title='Permanent Link: BRE Patterns I: The Fact Harvest'>BRE Patterns I: The Fact Harvest</a></li><li><a href='http://www.pathf.com/blogs/2006/07/jsr94_getting_y/' rel='bookmark' title='Permanent Link: JSR-94 &#8211; Getting Your Feet Wet'>JSR-94 &#8211; Getting Your Feet Wet</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/_3_xYwH70uU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2007/05/bre_patterns_ii/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2007/05/bre_patterns_ii/</feedburner:origLink></item>
		<item>
		<title>Will JBoss Rules 3.1 Do for BRE’s What mySQL Did for RDBMS’?</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/Sa55uz6fBWE/</link>
		<comments>http://www.pathf.com/blogs/2007/04/will_jboss_rule/#comments</comments>
		<pubDate>Sun, 22 Apr 2007 18:55:26 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Drools]]></category>
		<category><![CDATA[JBoss Rules]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/2007/04/will_jboss_rule/</guid>
		<description><![CDATA[While JBoss Rules 3.0.x has been a great step from its predecessor (the unfortunately named Drools) -- providing a rule editing environment, universal and existential quantifiers (the "not" A is the same as "for all" ~A), and Domain Specific Languages...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2007/04/will_jboss_rule/">Will JBoss Rules 3.1 Do for BRE&#8217;s What mySQL Did for RDBMS&#8217;?</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/08/jboss_rules_wik/' rel='bookmark' title='Permanent Link: JBoss Rules Wiki &#8211; A Business Rules Community of Practice'>JBoss Rules Wiki &#8211; A Business Rules Community of Practice</a></li><li><a href='http://www.pathf.com/blogs/2008/06/gwt-showcase-brms-for-jboss-rules/' rel='bookmark' title='Permanent Link: GWT Showcase &#8211; BRMS for JBoss Rules'>GWT Showcase &#8211; BRMS for JBoss Rules</a></li><li><a href='http://www.pathf.com/blogs/2006/06/business_rules_/' rel='bookmark' title='Permanent Link: Business Rules Resources'>Business Rules Resources</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>While JBoss Rules 3.0.x has been a great step from its predecessor (the unfortunately named Drools) -- providing a rule editing environment, universal and existential quantifiers (the "not" A is the same as "for all" ~A), and Domain Specific Languages (DSL's) -- there were still a few things missing. I've watched the progress on 3.1 with barely contained excitement and impatience, but the result has been worth the wait. The <a href="http://markproctor.blogspot.com/2007/02/drools-31-milestone-1.html" rel="nofollow"  target="_blank">3.1 M1 drop</a> contains operations on collections:</p>
<div class="code-quote">
<pre xml:space="preserve">
rule "Find interesting crash events, with 10 or more port scans within a 1 day window"
when
$crash : OutageEvent( eventType == OutageEvent.SERVER_CRASH)
ArrayList( size &gt; 9) from collect ( HackEvent(hackType == HackEvent.PORT_SCAN, $date : eventDate -&gt; (DateHelper.withinDayWindow($crash.getEventDate(), $date, 1))))
then
suspicious.add($crash);
end
</pre>
</div>
<p>There is also the accumulate operator, which is even more powerful than the collect operator. The documentation has lagged a little behind (it isn't a full on release, after all), but you can see some examples of it's use <a href="http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_Accumulate.drl" rel="nofollow"  target="_blank">here</a>. I find that I use these sorts of collection operations quite a bit. That being said, the above rule isn't terribly efficient. If you have about 50 of those rules and lots of events of both categories, you will run into some cross-product hell (sort of like a poorly thought out database join). I'll show some ways of making this sort of rule more efficient in an upcoming entry.</p>
<p>Finally, the system now in theory allows better debugging of rulesets. The various views into the working memory have been around for a while. See below for some of my issues.</p>
<p><a href="http://blogs.pathf.com/business_rules/agendaview.PNG" rel="nofollow"  rel="lightbox" title="agendaview.PNG"><img src="http://blogs.pathf.com/business_rules/agendaview_tn.jpg" title="agendaview.PNG" height="200" width="188" alt="agendaview.PNG" border="0" id="urn:zoundry:jid:agendaview.PNG"/></a></p>
<p>A few nits that I'm sure the JBoss Rules team will work out:</p>
<ul>
<li>The system desperately needs better syntax error handling in rule files. Right now the stack traces you get out of the parser/builder are pretty cryptic.</li>
<li>While you can now set breakpoints in the rule files, it doesn't seem that they are recognized by the debugging environment. As of now, you can only set breakpoints on a WorkingMemory fireAllRules call. Not that useful for debugging rule issues. I'm not sure if <a href="http://jira.jboss.com/jira/browse/JBRULES-313" rel="nofollow"  target="_blank">this mod</a> is supposed to address that problem, but regardless, it would be handy to have a fireSingleRule call so one can control the execution of the rule engine more closely.</li>
<li>A real-time audit view to inspect engine events would be handy.</li>
<li>The graphical RETE display would be more useful if the nodes were labeled. A display showing the facts in each node during execution would be too much to hope for, but one can dream.</li>
</ul>
<p>The best thing about this latest version of JBoss Rules is, of course, that I can now start developing non-trivial examples and publishing them without having to constantly caveat that "this feature is present in Blaze and ILog, but not here." An even more interesting question is this: since JBoss Rules is getting close on being a reasonable alternative to some of the commercial products, will what happened in the database arena with mySQL also happen in the BRE arena? Will costs come down, interoperability increase? Will the commercial vendors concentrate on service, support and high end features? Will these same vendors become more open and share more information with the public? I don't think BRE's will ever be as widespread as RDBMS's, but I think the same dynamics might apply.</p>
<p>Some things to look forward to that I hope the JBoss Rules team is thinking about: rule management, specifically rule repositories and deployment management, e.g. revision control for rule sets and deployment of rule modifications to distributed, live production engines; Rule analytics, e.g. analysis of a rule set to see if it contains likely problems (infinite loops, possibly bad logic, etc.), and stats on actual rule execution, performance, etc.</p>
<p><br/>
<p class="zoundry_bw_tags">
<!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com --><br />
<span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/bre" rel="nofollow"  class="ztag" rel="tag">bre</a>, <a href="http://technorati.com/tag/business%20rules" rel="nofollow"  class="ztag" rel="tag">business rules</a>, <a href="http://technorati.com/tag/drools" rel="nofollow"  class="ztag" rel="tag">drools</a>, <a href="http://technorati.com/tag/jboss%20rules" rel="nofollow"  class="ztag" rel="tag">jboss rules</a></span></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2007/04/will_jboss_rule/">Will JBoss Rules 3.1 Do for BRE&#8217;s What mySQL Did for RDBMS&#8217;?</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/08/jboss_rules_wik/' rel='bookmark' title='Permanent Link: JBoss Rules Wiki &#8211; A Business Rules Community of Practice'>JBoss Rules Wiki &#8211; A Business Rules Community of Practice</a></li><li><a href='http://www.pathf.com/blogs/2008/06/gwt-showcase-brms-for-jboss-rules/' rel='bookmark' title='Permanent Link: GWT Showcase &#8211; BRMS for JBoss Rules'>GWT Showcase &#8211; BRMS for JBoss Rules</a></li><li><a href='http://www.pathf.com/blogs/2006/06/business_rules_/' rel='bookmark' title='Permanent Link: Business Rules Resources'>Business Rules Resources</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/Sa55uz6fBWE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2007/04/will_jboss_rule/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2007/04/will_jboss_rule/</feedburner:origLink></item>
		<item>
		<title>BRE Patterns III: Collaboration Cop, Part I</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/vvzQZLnbPWA/</link>
		<comments>http://www.pathf.com/blogs/2007/02/bre_patterns_ii-2/#comments</comments>
		<pubDate>Tue, 06 Feb 2007 05:28:24 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Patterns]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/2007/02/bre_patterns_ii-2/</guid>
		<description><![CDATA[The pattern I'm writing about today -- Collaboration Cop -- is much meatier than the two previous ones, in my opinion. This one is all about transplanting the implicit and explicit business rules of an OO system from its objects...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2007/02/bre_patterns_ii-2/">BRE Patterns III: Collaboration Cop, Part I</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2007/05/bre_patterns_ii/' rel='bookmark' title='Permanent Link: BRE Patterns III: Collaboration Cop, Part II'>BRE Patterns III: Collaboration Cop, Part II</a></li><li><a href='http://www.pathf.com/blogs/2006/05/bre_patterns_i/' rel='bookmark' title='Permanent Link: BRE Patterns I: The Fact Harvest'>BRE Patterns I: The Fact Harvest</a></li><li><a href='http://www.pathf.com/blogs/2006/05/bre_patterns_ii-3/' rel='bookmark' title='Permanent Link: BRE Patterns II: The Tranformer'>BRE Patterns II: The Tranformer</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>The pattern I'm writing about today -- Collaboration Cop -- is much meatier than the two previous ones, in my opinion. This one is all about transplanting the implicit and explicit business rules of an OO system from its objects to an external BRE.</p>
<p>This is a somewhat involved pattern, and I'll provide some more examples and references in part II. Also in part II, I'll run down the differences between the rule classifications that come out this pattern and the ones you commonly see in <a href="http://www.amazon.com/Principles-Business-Rule-Approach-Ronald/dp/0201788934" rel="nofollow"  target="_blank">works by Ross</a>.</p>
<p><strong>Pattern Name: Collaboration Cop</strong></p>
<p><strong>Synopsis</strong><br/>Extract the business logic that is in an OO domain model -- collaboration rules, property rules and controller logic -- and express it as a set of business rules. Activity in the system is triggered by the UI inserting events into the working memory and firing the rules. Objects can be persisted by something like and ORM framework.</p>
<p>Slightly longer version: if you strip away the user interface and the persistence mechamism, a typical OO application is designed around a domain model and controller or service classes that set object collaborations within the domain model in motion in response to external events. The methods of the controller/service classes often correspond to steps in a <a href="http://en.wikipedia.org/wiki/Use_case" rel="nofollow"  target="_blank">Use Case</a>. Embedded in the various domain classes is logic about how object can be modified and accessed, what collaborations can be created or desolved, etc. With this pattern, you extract all the service/controller and validation and collaboration logic into business rules. You populate the working memory with the objects that comprise the context for a Use Case. Finally, in response to an external event, you inject an event object into the working memory and fire the rules that modify the state of the object model (and persist it).</p>
<p><strong>Context<a href="http://blogs.pathf.com/business_rules/BRE3.PNG" rel="nofollow" ><img src="http://blogs.pathf.com/business_rules/BRE3_tn.jpg" style="DISPLAY: inline; FLOAT: right; WIDTH: 200px; HEIGHT: 153px" title="BRE3.PNG" height="153" width="200" alt="BRE3.PNG" border="0" id="BRE3.PNG"/></a></strong><br/>Take the somewhat simplified Use Case where a customer is trying to rent a tape (he's a sucker for punishment and doesn't like DVD's). In a OO system, we would try to create a collaboration as follows (yes, very simplified):</p>
<p><code>customer.addRental(new Rental(title.getTape()));</code></p>
<p>The <code>customer</code> object knows how many active rentals a customer has and knows hat he cannot have more than three. This attempted collaboration would throw an exception to indicate that it is not permitted.</p>
<p>In the Collaboration Cop version we would create an event and insert it into the working memory:</p>
<p><code>VideoStoreEvent event = new VideoStoreEvent();<br/>event.type = VideoStoreEvent.RENT_TAPE;<br/>event.value = "Gone With the Wind";<br/></code></p>
<p><code>IF event.type == <span style="FONT-FAMILY: Courier New">VideoStoreEvent.RENT_TAPE</span> AND title.getTitle() == event.value AND title.isInStock()<br/>AND customer.activeRentals() &lt; 3<br/>THEN<br/>customer.addRental(new Rental(title.getTape()));<br/>externalObjectSet.add(customer);<br/>externalResponse.message = "Rented tape.";<br/>externalResponse.success = true;<br/>ELSE<br/>externalResponse.message = "Unable to rent tape.";<br/>externalResponse.success = false;</code></p>
<p>You can wrap a transaction around the sequence of event injections, then save (using an ORM) all of the modified objects in the <code>externalObjectSet</code>.</p>
<p>-----------</p>
<p>This pattern is complex and powerful, and it's implementation is very much dependent on the capabilities of the chosen BRE, how you choose to deal with concurrency, etc.. In part II, I'll also construct a simple example using JBoss Rules.</p>
<p><br/>
<p class="zoundry_bw_tags">
<!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com --><br />
<span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/bre" rel="nofollow"  class="ztag" rel="tag">bre</a>, <a href="http://technorati.com/tag/business%20rules" rel="nofollow"  class="ztag" rel="tag">business rules</a>, <a href="http://technorati.com/tag/patterns" rel="nofollow"  class="ztag" rel="tag">patterns</a></span></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2007/02/bre_patterns_ii-2/">BRE Patterns III: Collaboration Cop, Part I</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2007/05/bre_patterns_ii/' rel='bookmark' title='Permanent Link: BRE Patterns III: Collaboration Cop, Part II'>BRE Patterns III: Collaboration Cop, Part II</a></li><li><a href='http://www.pathf.com/blogs/2006/05/bre_patterns_i/' rel='bookmark' title='Permanent Link: BRE Patterns I: The Fact Harvest'>BRE Patterns I: The Fact Harvest</a></li><li><a href='http://www.pathf.com/blogs/2006/05/bre_patterns_ii-3/' rel='bookmark' title='Permanent Link: BRE Patterns II: The Tranformer'>BRE Patterns II: The Tranformer</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/vvzQZLnbPWA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2007/02/bre_patterns_ii-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2007/02/bre_patterns_ii-2/</feedburner:origLink></item>
		<item>
		<title>Resources and Announcements</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/FQWRMAVDpeo/</link>
		<comments>http://www.pathf.com/blogs/2006/09/resources_and_a/#comments</comments>
		<pubDate>Sun, 03 Sep 2006 19:51:59 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[RETE]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/2006/09/resources_and_a/</guid>
		<description><![CDATA[It's been a busy month that has taken me away from focusing on Business Rules, but things are almost back to normal and I should have another entry on BRE patterns out this coming week. In the meantime, I thought...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/09/resources_and_a/">Resources and Announcements</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/06/business_rules_/' rel='bookmark' title='Permanent Link: Business Rules Resources'>Business Rules Resources</a></li><li><a href='http://www.pathf.com/blogs/2006/04/exagerated_clai/' rel='bookmark' title='Permanent Link: Exaggerated Claims and the Importance of Hands-on Evaluation'>Exaggerated Claims and the Importance of Hands-on Evaluation</a></li><li><a href='http://www.pathf.com/blogs/2006/04/do_you_really_n/' rel='bookmark' title='Permanent Link: Do You Really Need RETE?'>Do You Really Need RETE?</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>It's been a busy month that has taken me away from focusing on Business Rules, but things are almost back to normal and I should have another entry on BRE patterns out this coming week. In the meantime, I thought I'd share with you two interesting resources that I came across recently.</p>
<p>The first is <a href="http://www.mindswap.org/~katz/pychinko/" rel="nofollow"  target="_blank">Pychinko</a>, a native Python RETE-based business rule engine. This points out that Java, C# and C are not the only languages that can benefit from a business rules approach. In fact, as you'll see in my next BRE patterns entry, I'd argue that object orientation and business rules are a natural fit, regardless of the specific language used. If your requirements call for any sort of embedded scripting, this solution might be worth considering.</p>
<p>I'm experimenting with a new way of finding resources on the Internet. With this new method, I was able to find the second item, a thorough introduction to business rules and RETE over at InfoQ, entitled <a href="http://www.infoq.com/articles/Rule-Engines" rel="nofollow"  target="_blank">Real-World Rule Engines</a>. The article covers quite a bit of territory. Among the topics addressed are:</p>
<ul>
<li>What are rule engines</li>
<li>How do you use them</li>
<li>Architecting with Rule Engines</li>
<li>Managing Rules</li>
<li>Rule Engine Patterns and Anti-Patterns</li>
<li>Governance</li>
<li>Thoughts on rule writing</li>
</ul>
<p>Definitely a good resource for those wanting to get started with business rules engines.</p>
<p>Last, I wanted to pass on the news that James Taylor has moved his blog over to a new url: <a href="http://www.edmblog.com/weblog" rel="nofollow"  target="_blank" title="http://www.edmblog.com/weblog">http://www.edmblog.com/weblog</a>. If you are a regular reader of his blog, you already probably know this. If you aren't a regular reader of his blog, you really should be.</p>
<p class="zoundry_bw_tags">
&nbsp; <br />
&nbsp; <span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/RETE" rel="nofollow"  class="ztag" rel="tag">RETE</a>, <a href="http://technorati.com/tag/business%20rules" rel="nofollow"  class="ztag" rel="tag">business rules</a></span> </p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/09/resources_and_a/">Resources and Announcements</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/06/business_rules_/' rel='bookmark' title='Permanent Link: Business Rules Resources'>Business Rules Resources</a></li><li><a href='http://www.pathf.com/blogs/2006/04/exagerated_clai/' rel='bookmark' title='Permanent Link: Exaggerated Claims and the Importance of Hands-on Evaluation'>Exaggerated Claims and the Importance of Hands-on Evaluation</a></li><li><a href='http://www.pathf.com/blogs/2006/04/do_you_really_n/' rel='bookmark' title='Permanent Link: Do You Really Need RETE?'>Do You Really Need RETE?</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/FQWRMAVDpeo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2006/09/resources_and_a/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2006/09/resources_and_a/</feedburner:origLink></item>
		<item>
		<title>JBoss Rules Wiki – A Business Rules Community of Practice</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/AkoHYDXicPU/</link>
		<comments>http://www.pathf.com/blogs/2006/08/jboss_rules_wik/#comments</comments>
		<pubDate>Fri, 25 Aug 2006 17:01:15 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Drools]]></category>
		<category><![CDATA[JBoss Rules]]></category>
		<category><![CDATA[Patterns]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/2006/08/jboss_rules_wik/</guid>
		<description><![CDATA[The guys over at JBoss Rules are starting to build a little community of practice over in their Wiki. There's a ton of good stuff over there, including a link to this tutorial by Arnaud Blandin that teaches in some...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/08/jboss_rules_wik/">JBoss Rules Wiki &#8211; A Business Rules Community of Practice</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/06/gwt-showcase-brms-for-jboss-rules/' rel='bookmark' title='Permanent Link: GWT Showcase &#8211; BRMS for JBoss Rules'>GWT Showcase &#8211; BRMS for JBoss Rules</a></li><li><a href='http://www.pathf.com/blogs/2007/04/will_jboss_rule/' rel='bookmark' title='Permanent Link: Will JBoss Rules 3.1 Do for BRE&#8217;s What mySQL Did for RDBMS&#8217;?'>Will JBoss Rules 3.1 Do for BRE&#8217;s What mySQL Did for RDBMS&#8217;?</a></li><li><a href='http://www.pathf.com/blogs/2006/06/business_rules_/' rel='bookmark' title='Permanent Link: Business Rules Resources'>Business Rules Resources</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p></p>
<p>The guys over at JBoss Rules are starting to build a little community of practice over in their <a href="http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossRules" rel="nofollow"  target="_blank">Wiki</a>.</p>
<p></p>
<p>There's a ton of good stuff over there, including a link to <a href="http://bpms.intalio.com/content/view/121/87/" rel="nofollow"  target="_blank">this tutorial</a> by <span class="content-author">Arnaud Blandin that teaches in some great detail on how to integrate the JBoss Rules engine into your business process. Even if you're not open to open source or leaning toward a commercial product like Blaze or JRules, JBoss Rules is a great way to get your feet wet and get up the steep BRE learning curve. It certainly helps knowing what the heck a BRE is and what it can do when you are making decisions on how to integrate it into your software ecosystem. (Imagine trying to buy a database if your company has never used a database before. Would you know what to look for and what was important?)</span></p>
<p></p>
<p class="zoundry_bw_tags">
<!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com --><br />
<span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/jboss%20rules" rel="nofollow"  class="ztag" rel="tag">jboss rules</a>, <a href="http://technorati.com/tag/usage%20patterns" rel="nofollow"  class="ztag" rel="tag">usage patterns</a></span> 
</p></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/08/jboss_rules_wik/">JBoss Rules Wiki &#8211; A Business Rules Community of Practice</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2008/06/gwt-showcase-brms-for-jboss-rules/' rel='bookmark' title='Permanent Link: GWT Showcase &#8211; BRMS for JBoss Rules'>GWT Showcase &#8211; BRMS for JBoss Rules</a></li><li><a href='http://www.pathf.com/blogs/2007/04/will_jboss_rule/' rel='bookmark' title='Permanent Link: Will JBoss Rules 3.1 Do for BRE&#8217;s What mySQL Did for RDBMS&#8217;?'>Will JBoss Rules 3.1 Do for BRE&#8217;s What mySQL Did for RDBMS&#8217;?</a></li><li><a href='http://www.pathf.com/blogs/2006/06/business_rules_/' rel='bookmark' title='Permanent Link: Business Rules Resources'>Business Rules Resources</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/AkoHYDXicPU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2006/08/jboss_rules_wik/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2006/08/jboss_rules_wik/</feedburner:origLink></item>
		<item>
		<title>A Performance Comparison of Jess, Drools and MS-BRE</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/3S4L2iWUGy8/</link>
		<comments>http://www.pathf.com/blogs/2006/08/a_performance_c/#comments</comments>
		<pubDate>Wed, 16 Aug 2006 18:36:57 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Benchmarking]]></category>
		<category><![CDATA[Drools]]></category>
		<category><![CDATA[JBoss Rules]]></category>
		<category><![CDATA[Jess]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/2006/08/a_performance_c/</guid>
		<description><![CDATA[I have to apologize in advance. I'm in the middle of squeezing out a book chapter and haven't had time to tackle any of the BRE articles on my writing TODO list. So today I'm going to have to do...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/08/a_performance_c/">A Performance Comparison of Jess, Drools and MS-BRE</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/04/drools_getting_/' rel='bookmark' title='Permanent Link: Drools &#8211; Getting Your Feet Wet with Open Source'>Drools &#8211; Getting Your Feet Wet with Open Source</a></li><li><a href='http://www.pathf.com/blogs/2006/05/drools_30_intri/' rel='bookmark' title='Permanent Link: Drools 3.0 &#8211; Intriguing'>Drools 3.0 &#8211; Intriguing</a></li><li><a href='http://www.pathf.com/blogs/2007/04/will_jboss_rule/' rel='bookmark' title='Permanent Link: Will JBoss Rules 3.1 Do for BRE&#8217;s What mySQL Did for RDBMS&#8217;?'>Will JBoss Rules 3.1 Do for BRE&#8217;s What mySQL Did for RDBMS&#8217;?</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p></p>
<p>I have to apologize in advance. I'm in the middle of squeezing out a book chapter and haven't had time to tackle any of the BRE articles on my writing TODO list. So today I'm going to have to do what I usually hate to do -- become a blog echo chamber. The post I want to alert you to is one posted almost a year ago by Charles Young, entitled <a href="http://geekswithblogs.net/cyoung/articles/54022.aspx" rel="nofollow"  target="_blank">Microsoft's Rule Engine Scalability Results - A comparison with Jess and Drools</a>. The article claims to show that Microsoft's BRE cannot be criticized about not implementing RETE properly based on MS's published test results. That's a long way to go for such an ephemeral point.</p>
<p></p>
<p>I don't recommend the article because of the claims it makes, but rather because it both demonstrates the use of three different BRE's through actual code samples, and it provides an approach to benchmarking and comparing BRE's for scalability and performance. I'm a <a href="http://blogs.pathf.com/business_rules/2006/04/exagerated_clai.html" rel="nofollow" >firm believer</a> in benchmarking BRE's based on your actual use cases rather than on abstract worst-case scenarios like Miss Manners. Read through this blog entry. Even if his approach is flawed, as I believe it is, he deserves full credit for publishing the full code to his test and opening it up to public scrutiny.</p>
<p></p>
<p class="zoundry_bw_tags">
<!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com --><br />
<span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/drools" rel="nofollow"  class="ztag" rel="tag">drools</a>, <a href="http://technorati.com/tag/jboss%20rules" rel="nofollow"  class="ztag" rel="tag">jboss rules</a>, <a href="http://technorati.com/tag/jess" rel="nofollow"  class="ztag" rel="tag">jess</a>, <a href="http://technorati.com/tag/microsoft" rel="nofollow"  class="ztag" rel="tag">microsoft</a>, <a href="http://technorati.com/tag/performance" rel="nofollow"  class="ztag" rel="tag">performance</a>, <a href="http://technorati.com/tag/scalability" rel="nofollow"  class="ztag" rel="tag">scalability</a></span> 
</p></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/08/a_performance_c/">A Performance Comparison of Jess, Drools and MS-BRE</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/04/drools_getting_/' rel='bookmark' title='Permanent Link: Drools &#8211; Getting Your Feet Wet with Open Source'>Drools &#8211; Getting Your Feet Wet with Open Source</a></li><li><a href='http://www.pathf.com/blogs/2006/05/drools_30_intri/' rel='bookmark' title='Permanent Link: Drools 3.0 &#8211; Intriguing'>Drools 3.0 &#8211; Intriguing</a></li><li><a href='http://www.pathf.com/blogs/2007/04/will_jboss_rule/' rel='bookmark' title='Permanent Link: Will JBoss Rules 3.1 Do for BRE&#8217;s What mySQL Did for RDBMS&#8217;?'>Will JBoss Rules 3.1 Do for BRE&#8217;s What mySQL Did for RDBMS&#8217;?</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/3S4L2iWUGy8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2006/08/a_performance_c/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2006/08/a_performance_c/</feedburner:origLink></item>
		<item>
		<title>OpenCyc 1.0 Released</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/O6zLI_Hna0U/</link>
		<comments>http://www.pathf.com/blogs/2006/08/opencyc_10_rele/#comments</comments>
		<pubDate>Thu, 10 Aug 2006 19:24:42 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/2006/08/opencyc_10_rele/</guid>
		<description><![CDATA[OpenCyc 1.0 was quietly released today. It doesn't bill itself as a Business Rule Engine. Instead, from the FAQ: What is OpenCyc? OpenCyc is the open source version of the Cyc technology, the world's largest and most complete general knowledge...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/08/opencyc_10_rele/">OpenCyc 1.0 Released</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/07/framework_watch-4/' rel='bookmark' title='Permanent Link: Framework Watch &#8211; HSE 2.0 Beta Released'>Framework Watch &#8211; HSE 2.0 Beta Released</a></li><li><a href='http://www.pathf.com/blogs/2006/07/gwt_libraries_r/' rel='bookmark' title='Permanent Link: GWT Libraries Released &#8211; XML, SOAP, Crypto, Amazon, etc.'>GWT Libraries Released &#8211; XML, SOAP, Crypto, Amazon, etc.</a></li><li><a href='http://www.pathf.com/blogs/2007/08/ext-js-11-relea/' rel='bookmark' title='Permanent Link: Ext JS 1.1 Released'>Ext JS 1.1 Released</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p></p>
<p><a href="http://www.opencyc.org/" rel="nofollow"  target="_blank">OpenCyc 1.0</a> was quietly released today. It doesn't bill itself as a Business Rule Engine. Instead, from the FAQ:</p>
<p></p>
<blockquote><p></p>
<p><strong>What is OpenCyc?</strong></p>
<p></p>
<p>OpenCyc is the open source version of the Cyc technology, the world's largest and most complete general knowledge base and commonsense reasoning engine. Cycorp, the builders of Cyc, have set up an independent organization OpenCyc.org, to disseminate and administer OpenCyc, and have committed to a pipeline through which all current and future Cyc technology will flow into ResearchCyc (available for R&amp;D in academia and industry) and then OpenCyc.</p>
<p></p>
<p>What is included with the first release of OpenCyc?</p>
<p></p>
<p>Release 1.0 of OpenCyc will include the following:</p>
<p></p>
<ul></p>
<li>6,000 concepts: an upper ontology for all of human consensus reality.</li>
<p></p>
<li>60,000 assertions about the 6,000 concepts, interrelating them, constraining them, in effect (partially) defining them.</li>
<p></p>
<li>A compiled version of the Cyc Inference Engine and the Cyc Knowledge Base Browser.</li>
<p></p>
<li>A suite of "RKF" tools for rapidly extracting knowledge from a domain expert (e.g., a physician or oil drilling specialist), tools which operate by carrying on a clarification dialogue with that individual; hence: tools for answering questions via English dialogue.</li>
<p></p>
<li>Documentation and self-paced learning materials to help users achieve a basic- to intermediate-level understanding of the issues of knowledge representation and application development using Cyc.</li>
<p></p>
<li>A specification of CycL, the language in which Cyc (and hence OpenCyc) is written. There are CycL-to-Lisp, CycL-to-C, etc. translators.</li>
<p></p>
<li>A specification of the Cyc API, by calling which a programmer can build an OpenCyc application with very little familiarity with CycL or with the OpenCyc KB.</li>
<p></p>
<li>A few sample programs that demonstrate use of the Cyc API for application development.</li>
<p>
</ul>
<p>
</p></blockquote>
<p></p>
<p>According to the docs, the inference engine is not RETE but instead a mix of specialized techniques. Also, said engine is not actually open source but instead distributed under a perpetually free license.</p>
<p></p>
<p>I'm going to reserve comment on the usefulness or quality of the software, but the ontology and the knowledge-base are probably worth some study.</p>
<p></p>
<p>Update 1: There are some comments that give a little bit more texture on Cyc from a <a href="http://suo.ieee.org/email/msg06534.html" rel="nofollow"  target="_blank">IEEE mailing list</a>.</p>
<p></p>
<p class="zoundry_bw_tags">
<!-- Tag links generated by Zoundry Blog Writer. Do not manually edit. http://www.zoundry.com --><br />
<span class="ztags"><span class="ztagspace">Technorati</span> : <a href="http://technorati.com/tag/cyc" rel="nofollow"  class="ztag" rel="tag">cyc</a>, <a href="http://technorati.com/tag/inferencing%20engine" rel="nofollow"  class="ztag" rel="tag">inferencing engine</a>, <a href="http://technorati.com/tag/knowledge%20base" rel="nofollow"  class="ztag" rel="tag">knowledge base</a>, <a href="http://technorati.com/tag/opencyc" rel="nofollow"  class="ztag" rel="tag">opencyc</a></span> 
</p></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/08/opencyc_10_rele/">OpenCyc 1.0 Released</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/07/framework_watch-4/' rel='bookmark' title='Permanent Link: Framework Watch &#8211; HSE 2.0 Beta Released'>Framework Watch &#8211; HSE 2.0 Beta Released</a></li><li><a href='http://www.pathf.com/blogs/2006/07/gwt_libraries_r/' rel='bookmark' title='Permanent Link: GWT Libraries Released &#8211; XML, SOAP, Crypto, Amazon, etc.'>GWT Libraries Released &#8211; XML, SOAP, Crypto, Amazon, etc.</a></li><li><a href='http://www.pathf.com/blogs/2007/08/ext-js-11-relea/' rel='bookmark' title='Permanent Link: Ext JS 1.1 Released'>Ext JS 1.1 Released</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/O6zLI_Hna0U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2006/08/opencyc_10_rele/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2006/08/opencyc_10_rele/</feedburner:origLink></item>
		<item>
		<title>Is a BRE Turing Complete?</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/sb7hBCpYfeo/</link>
		<comments>http://www.pathf.com/blogs/2006/08/is_a_bre_turing/#comments</comments>
		<pubDate>Tue, 01 Aug 2006 14:00:00 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/2006/08/is_a_bre_turing/</guid>
		<description><![CDATA[Mark Proctor of the JBoss Rules team gave me the heads up about an interesting debate (here and here) about First Order Logic (FOL) and whether various BRE's do or should support it. One question that has come up is...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/08/is_a_bre_turing/">Is a BRE Turing Complete?</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/05/executives_writ/' rel='bookmark' title='Permanent Link: Executives Writing Spaghetti Code'>Executives Writing Spaghetti Code</a></li><li><a href='http://www.pathf.com/blogs/2007/08/higher-order-ja/' rel='bookmark' title='Permanent Link: Higher Order JavaScript'>Higher Order JavaScript</a></li><li><a href='http://www.pathf.com/blogs/2006/03/first_order_log/' rel='bookmark' title='Permanent Link: First Order Logic and Why Your BRE Should Have It'>First Order Logic and Why Your BRE Should Have It</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Mark Proctor of the JBoss Rules team gave me the heads up about an interesting debate (<a href="http://woolfel.blogspot.com/2006/07/should-rule-engine-support-fol.html" rel="nofollow"  target="_blank">here</a> and <a href="http://www.jboss.com/index.html?module=bb&amp;op=viewtopic&amp;p=3960753" rel="nofollow"  target="_blank">here</a>) about First Order Logic (FOL) and whether various BRE's do or should support it. One question that has come up is whether BRE's can still be said to be Turing Complete? Actually, the two questions -- whether a BRE supports FOL and whether it is Turing Complete -- are quite seperate.</p>
<p><strong>Turing Complete</strong></p>
<p>First the easy question: when is a system Turing Complete? From the Wikipedia:</p>
<blockquote>
<p><em>In computability theory, an abstract machine or programming language is called Turing complete, Turing equivalent, or (computationally) universal if it has a computational power equivalent to (i.e., capable of emulating) a simplified model of a programmable computer known as the universal Turing machine. Being equivalent to the universal Turing machine essentially means being able to perform any computational task - though it does not mean being able to perform such tasks efficiently, quickly, or easily.</em></p>
</blockquote>
<p>So, what is a Turing machine? Again you can look at the <a href="http://en.wikipedia.org/wiki/Turing_machine" rel="nofollow"  target="_blank">Wikipedia</a>, but in a nutshell, it's a tape with an infinite number of cells, a read/write head, a finite alphabet that the head can write to a cell, a finite number of 'states' that the machine can be in, and a finite number of rules that say things like "if you are in state 3 and the symbol on the tape is '0', the write a '1', move the head one cell to the right and change your state to 8."</p>
<p>While this may seem like a silly sort of machine (just try to write a word processor with it), it can do anything, given the right number of states and the right set of rules, that a <a href="http://en.wikipedia.org/wiki/Von_Neumann_architecture" rel="nofollow"  target="_blank">von Neuman</a> style of computer -- essentiall the sort of computer with which you are reading this blog -- can do. It's handy for proving certain theorems about computability and complexity. If you can write any Turing machine with your device, then it is said to be a Universal Turing Machine, i.e. if you can compute it with an algorithm, you can do it with your machine. It should be obvious that a BRE, even without First Order Logic, is a UTM. We can have a fact that tells us what our state is, another fact that tells us where our read/write head is, a set of facts that represent all of the cells we've seen so far, and our rules that govern how our state, head and cells are modified. Therefore a BRE is Turing Complete.</p>
<p>Of course there's a small fly in the ointment. Up above we said that a turing machine had an "infinite" number of cells. Of course your computer can't accomodate an infinite number of cells, since it has a finite amount of memory and storage. This is a rather important point, as it turns out. Anything program running on a modern computer with finite memory and storage is at best a <a href="http://en.wikipedia.org/wiki/Finite_state_automaton" rel="nofollow"  target="_blank">Finit State Machine</a>, basically the most primite of the interesting algorithms. But in principle, a BRE with infinite memory is Turing Complete.</p>
<p><strong>First Order Logic</strong></p>
<p>I'll try to stay a little non-technical here, mostly because all of my math text books are in storage. First Order Logic (or First Order Predicate Logic) is an extension of regular propositional logic with the addition of the universal and existential quantifiers. That means we can write conditions in our rules that are true <strong>for all</strong> facts of a particular type in our fact base or which are true <strong>for at least one</strong> fact. I've <a href="http://blogs.pathf.com/business_rules/2006/03/first_order_log.html" rel="nofollow" >written before</a> why having First Order Logic built into your BRE is a good thing. In short, you can work around your BRE not having it, but you'll lose the performance advantage of your rule execution algorithm in the process, such as RETE. And there are plenty of scenarios where you are looking at an event history of a customer or client that call for FOL.</p>
<p>You can see, however, that our simulation of a Turing machine above never called for a quantifier. Thus even a BRE without FOL is Turing Complete (if it has infinit memory, yada yada). I hope this explanation I hope this entry has been useful and not too geeky. Behind all of the hype behind BRE's, it is sometimes useful to understand what exactly they are and what they can do.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/08/is_a_bre_turing/">Is a BRE Turing Complete?</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/05/executives_writ/' rel='bookmark' title='Permanent Link: Executives Writing Spaghetti Code'>Executives Writing Spaghetti Code</a></li><li><a href='http://www.pathf.com/blogs/2007/08/higher-order-ja/' rel='bookmark' title='Permanent Link: Higher Order JavaScript'>Higher Order JavaScript</a></li><li><a href='http://www.pathf.com/blogs/2006/03/first_order_log/' rel='bookmark' title='Permanent Link: First Order Logic and Why Your BRE Should Have It'>First Order Logic and Why Your BRE Should Have It</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/sb7hBCpYfeo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2006/08/is_a_bre_turing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2006/08/is_a_bre_turing/</feedburner:origLink></item>
		<item>
		<title>The Short Circuited OR Considered Harmful</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/584j6iRlLvM/</link>
		<comments>http://www.pathf.com/blogs/2006/07/the_short_circu/#comments</comments>
		<pubDate>Tue, 25 Jul 2006 14:00:00 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Best Practices]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/2006/07/the_short_circu/</guid>
		<description><![CDATA[In my discussions with James Taylor about using wizards to write rules, I was reminded of some cases where it was necessary to create a wizard for this purpose. They all shared two things in common: the need for justifications...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/07/the_short_circu/">The Short Circuited OR Considered Harmful</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/10/openlaszlo_cons/' rel='bookmark' title='Permanent Link: OpenLaszlo Considered Harmful'>OpenLaszlo Considered Harmful</a></li><li><a href='http://www.pathf.com/blogs/2007/08/css-considered/' rel='bookmark' title='Permanent Link: CSS considered harmful by Ajaxian commentators?'>CSS considered harmful by Ajaxian commentators?</a></li><li><a href='http://www.pathf.com/blogs/2006/04/drools_getting_/' rel='bookmark' title='Permanent Link: Drools &#8211; Getting Your Feet Wet with Open Source'>Drools &#8211; Getting Your Feet Wet with Open Source</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>In my discussions with <a href="http://edmblog.fairisaac.com/" rel="nofollow"  target="_blank">James Taylor</a> about <a href="http://www.realrules.info/?q=node/39" rel="nofollow"  target="_blank">using wizards to write rules</a>, I was reminded of some cases where it was necessary to create a wizard for this purpose. They all shared two things in common: the need for justifications and non-shortcircuited OR's. Let me give you an example.</p>
<p>Let's suppose you are designing a system that decides whether or not to recommend prisoners for early release. Your facts inlcude the prisoners' criminal records, the details of their behavior behind bars, recommendations by prison officials and the district attourney, enrollment in treatment and rehabilitation programs, and mitigating circumstances such as aged parent or infirm spouses or children. You formulate the state's sentencing and release guidelines as business rules and implement them in your vendor platform of choice. When a feed of data comes from the department of corrections, you add it to your database and run it through your rule system which issues recommendations to a board charged with making the final decision. This board makes a judgement call based on the information you provide them.</p>
<p>When they look at your recommendation, they don't just want to see a yes or no, they want to see an <strong>explanation</strong> or <strong>justification</strong>. Something like "Prisoner Joe Smith, #54-56, is not recommended for release because he had at least 3 incidents of misbehavior in the last 6 months and was convicted of at least a Class C felony." Ideally, you'd want to spell out exactly what the issues were:</p>
<blockquote>
<p>Prisoner: Joe Smith<br/>Number: 54-56<br/>Recommended for Early Release: No<br/>Reasons: At least 3 incidents of misbehavior in the last 6 months (stabbing of guard, 4/5/2006; assault of fellow prisoner, 4/22/2006; contraband in cell, 5/17/2006) AND convicted of at least a Class C felony (Criminal Possession of Stolen Property, 6/11/2004)</p>
</blockquote>
<p>Now as a board member, I can look at the prisoner and see that while he was convicted of a nonviolent crime, he looks to have been violent while in prison. If he had just been flagged for contraband, maybe I might consider releasing him.</p>
<p>OK, so justification is useful in this context, as it is in many other fields, like healthcare, insurance underwriting and claims, criminal science, etc. How do we produce a justification with our rule engine? The sad truth is that none of the commercial vendors of forward-chaining BRE's will do that for you automatically. You have to roll your own. One approach is to use the <a href="http://blogs.pathf.com/business_rules/2006/05/bre_patterns_i.html" rel="nofollow" >Fact Harvest pattern</a> to construct and build a <code>ReleaseRecommendation</code> object. This fact would tell us whether a particular prisoner was recommended for release (true or false) and all of the conditions that contributed to this recommendation. It might contain a list of all of the misbehavior's over the last 6 months and the crime for which he was convicted.</p>
<p>Here we come to the first reason for using a wizard to write rules: if you are testing a particular condition in the 'IF' part of your rule and then updating your <code>ReleaseRecommendation</code> object with the details of that same condition in the 'THEN' part of the rule, <strong>you're essentially recapitulating the condition in the action part of the rule</strong>. Aside from being a pain in the neck, it's also a maintenance problem. Every time you update a condition, you have to make sure to update the corresponding action. If you don't, Charles Manson gets released by accident -- or, rather, because of your bug. It voilates the DRY principle (Don't Repeat Yourself). One way of handling this is to have your wizard generate the rule for you, with both the condition and action parts. Now you make one change and the rule is generated in a way that is guaranteed to maintain consistency.</p>
<p>The second reason for using a wizard has to do with the short-circuited OR of the title. If our rule above actually tests for</p>
<blockquote>
<p><em>has had at least 3 incidents of misbehavior in the last 6 months OR is a drug addict</em></p>
</blockquote>
<p>then what happens with our rule? If you've programmed much, you know that most languages use what is known as "short-circuited OR," i.e. if you are testing A OR B and A evaluates to true, then B is never tested. If you are depending on side effect of B (such as the building of a list of incidents, etc.), you can forget about it ever happening. The 'is a drug addict' part of the condition is never tested. To make things worse, if we are constructing a justification, we have to test in the action which parts of the OR clause in the condition actually evaluated to true. Imagine now a complex condition with lots of OR, NOT's, AND's and parentheses. Yuck.</p>
<p>A way around this mess is to break apart the OR clause into seperate rules and accumulating them in the <code>ReleaseRecommendation</code> object. The drawback, of course, is that now we have to create several rules where before we had only one. Again, generating these rules with a wizard is a more or less elegant way out.</p>
<p>If anyone has a niftier solution to justification or non-short-circuited OR, I'm more than happy to hear about it.</p>
<p>Update 1: Michael Chermside correctly points out in the comments that it would be more elegant to have a justification engine that worked directly with the BRE's internals. I agree. Unfortunately, none of the forward-chaining BRE's I've worked with have very good support for justification or supply hooks into their internals to support the building of a justification engine through AOP or something equivalent. If you work with an open source engine like JBoss Rules, you can build in your own justification logic.</p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/07/the_short_circu/">The Short Circuited OR Considered Harmful</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/10/openlaszlo_cons/' rel='bookmark' title='Permanent Link: OpenLaszlo Considered Harmful'>OpenLaszlo Considered Harmful</a></li><li><a href='http://www.pathf.com/blogs/2007/08/css-considered/' rel='bookmark' title='Permanent Link: CSS considered harmful by Ajaxian commentators?'>CSS considered harmful by Ajaxian commentators?</a></li><li><a href='http://www.pathf.com/blogs/2006/04/drools_getting_/' rel='bookmark' title='Permanent Link: Drools &#8211; Getting Your Feet Wet with Open Source'>Drools &#8211; Getting Your Feet Wet with Open Source</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/584j6iRlLvM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2006/07/the_short_circu/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2006/07/the_short_circu/</feedburner:origLink></item>
		<item>
		<title>Why Your Engine Should Support Programmatic Rule Generation</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/Fk9pFWUtJJE/</link>
		<comments>http://www.pathf.com/blogs/2006/07/why_your_engine_1/#comments</comments>
		<pubDate>Sun, 23 Jul 2006 17:36:26 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/2006/07/why_your_engine_1/</guid>
		<description><![CDATA[I've published an article over at the RealRules Blogzine on programmatic generation of rules, i.e. why and under what circumstances this makes sense. Check it out.
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/07/why_your_engine_1/">Why Your Engine Should Support Programmatic Rule Generation</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/06/prova_son_of_ma/' rel='bookmark' title='Permanent Link: Prova &#8211; Son of Mandarax (Backward Chaining Rule Engines)'>Prova &#8211; Son of Mandarax (Backward Chaining Rule Engines)</a></li><li><a href='http://www.pathf.com/blogs/2006/07/what_do_you_mea/' rel='bookmark' title='Permanent Link: Your Business Rule System is a Fool'>Your Business Rule System is a Fool</a></li><li><a href='http://www.pathf.com/blogs/2006/03/_happy_new_year/' rel='bookmark' title='Permanent Link: Happy New Year and Business Rule Books'>Happy New Year and Business Rule Books</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p></p>
<p>I've published an article over at the <a href="http://www.realrules.info/" rel="nofollow"  target="_blank">RealRules Blogzine</a> on programmatic generation of rules, i.e. why and under what circumstances this makes sense. <a href="http://www.realrules.info/?q=node/39" rel="nofollow" >Check it out</a>.</p>
<p></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/07/why_your_engine_1/">Why Your Engine Should Support Programmatic Rule Generation</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/06/prova_son_of_ma/' rel='bookmark' title='Permanent Link: Prova &#8211; Son of Mandarax (Backward Chaining Rule Engines)'>Prova &#8211; Son of Mandarax (Backward Chaining Rule Engines)</a></li><li><a href='http://www.pathf.com/blogs/2006/07/what_do_you_mea/' rel='bookmark' title='Permanent Link: Your Business Rule System is a Fool'>Your Business Rule System is a Fool</a></li><li><a href='http://www.pathf.com/blogs/2006/03/_happy_new_year/' rel='bookmark' title='Permanent Link: Happy New Year and Business Rule Books'>Happy New Year and Business Rule Books</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/Fk9pFWUtJJE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2006/07/why_your_engine_1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2006/07/why_your_engine_1/</feedburner:origLink></item>
		<item>
		<title>Your Business Rule System is a Fool</title>
		<link>http://feedproxy.google.com/~r/BusinessRules/~3/kptyi46u6YQ/</link>
		<comments>http://www.pathf.com/blogs/2006/07/what_do_you_mea/#comments</comments>
		<pubDate>Thu, 20 Jul 2006 13:00:00 +0000</pubDate>
		<dc:creator>Dietrich Kappe</dc:creator>
				<category><![CDATA[Business Rules Engines]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Consistency]]></category>

		<guid isPermaLink="false">http://www.pathf.com/blogs/2006/07/what_do_you_mea/</guid>
		<description><![CDATA[He who knows not, and knows not that he knows not, is a fool - shun him. He who knows not, and knows that he knows not, is a child - teach him. He who knows, and knows not that...
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/07/what_do_you_mea/">Your Business Rule System is a Fool</a></p>



Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/03/_happy_new_year/' rel='bookmark' title='Permanent Link: Happy New Year and Business Rule Books'>Happy New Year and Business Rule Books</a></li><li><a href='http://www.pathf.com/blogs/2007/08/commandment-iv/' rel='bookmark' title='Permanent Link: Commandment IV: Keep Business Rules Simple Unto All The Rules of Your Life'>Commandment IV: Keep Business Rules Simple Unto All The Rules of Your Life</a></li><li><a href='http://www.pathf.com/blogs/2006/06/business_rules__1/' rel='bookmark' title='Permanent Link: Business Rules Management and Testing &#8211; Avoid the &#8220;Mystery Box&#8221;'>Business Rules Management and Testing &#8211; Avoid the &#8220;Mystery Box&#8221;</a></li></ol>]]></description>
			<content:encoded><![CDATA[<blockquote><p><em>He who knows not, and knows not that he knows not, is a fool - shun him.<br/>He who knows not, and knows that he knows not, is a child - teach him.<br/>He who knows, and knows not that he knows, is asleep - wake him.<br/>He who knows, and knows that he knows, is a wise man - follow him.</em></p></blockquote>
<p>The above is either an Arabic, Persian or Chinese proverb. I known not, so take your pick. But you could learn something from it for your business rules project.</p>
<p>Even after you've gone through the trouble of pulling your business rules out of existing applications and processes and centralizing them in a rule repository, you could still face problems of a logical or informational variety. You're business rule system may not have the necessary data, or it may have wrong data, or it may have the wrong kind of facts. The system may further not have all the right rules, or some bad rules or it may even come up with some unpleasant conclusions you didn't expect at all. In short, it may be a fool, a child, asleep or even a wise man, all at once, and even a few other choice epithets not included in the above proverb.</p>
<p>To make sure your business rule system behaves well, there are a few specific factors you should consider. I'll blog about them in the next few weeks, digging a little deeper and proposing some remedies along the way:</p>
<ul>
<li>
<p>Data (or Fact) Consistency - If you've got Joe being both 16 and 45 years old, you've got a problem. If that situation seems absurd to you, I tip my hat. You're clearly one of the chosen few whose data is consistent across all of your firms databases. <img src='http://www.pathf.com/blogs/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  The kinds of data inconsistencies can go much farther, such as a 5-year-old having a husband, or a dead man requiring a liver transplant. The solutions to these data consistency problems are for the most part very unglamorous techniques from the world of data modeling.</p>
</li>
<li>
<p>The Wrong Kinds of Facts - If you've ever design OO software or designed a database, you know what I'm talking about. If your entities are the wrong kind, the wrong size, or incomplete, you will kill yourself writing awkward code. These entities and associated behaviors are like your nouns, verbs and adjectives. Pick the wrong words and your sentences are hard to write. If you capture only the final bill in a system and not the details of the transaction that incurred the bill, you may still be able to extrapolate the transaction information, but you have to work harder to do it. Too much hard work and the system limits rather than enables your ability to describe your business rules.</p>
</li>
<li>
<p>Rule Consistency - What if given a clean, consistent set of facts, your rule set allows you to arrive at A and Not A -- "Joe is a minor" and "Joe is an adult?" With a few hundred or a thousand rules in your set, this problem may be hard to discover. (I'd add rule execution order independence to this category.) In fact, tracking down rule inconsistencies can be a bit tricky, with a couple of not quite satisfactory solutions available.</p>
</li>
</ul>
<p>We'll leave off from things like <a href="http://en.wikipedia.org/wiki/Decidability_(logic)" rel="nofollow"  target="_blank">decidability</a>, as they probably don't have much bearing on BRE's, and cross product matching, as that's really more of a performance issue. I would advise you to be prepared, however, for your cauldron of rules and facts to sometimes deliver you some unexpected results. If you've done more than just 1 + 1 = 2, they can surprise you and perhaps grow past your own abilities. You've built a child and taught it to be a wise man -- or maybe it's just a fool that's mouthing off.</p>
<p><br/><br/></p>
<p><hr>
<a href="http://www.pathf.com/">Pathfinder is a software development firm. Hire us to build complex software that's easy to use.</a>
<br/><br/><a href="http://www.pathf.com/blogs/2006/07/what_do_you_mea/">Your Business Rule System is a Fool</a></p>


<p>Related posts:<ol><li><a href='http://www.pathf.com/blogs/2006/03/_happy_new_year/' rel='bookmark' title='Permanent Link: Happy New Year and Business Rule Books'>Happy New Year and Business Rule Books</a></li><li><a href='http://www.pathf.com/blogs/2007/08/commandment-iv/' rel='bookmark' title='Permanent Link: Commandment IV: Keep Business Rules Simple Unto All The Rules of Your Life'>Commandment IV: Keep Business Rules Simple Unto All The Rules of Your Life</a></li><li><a href='http://www.pathf.com/blogs/2006/06/business_rules__1/' rel='bookmark' title='Permanent Link: Business Rules Management and Testing &#8211; Avoid the &#8220;Mystery Box&#8221;'>Business Rules Management and Testing &#8211; Avoid the &#8220;Mystery Box&#8221;</a></li></ol></p><img src="http://feeds.feedburner.com/~r/BusinessRules/~4/kptyi46u6YQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.pathf.com/blogs/2006/07/what_do_you_mea/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.pathf.com/blogs/2006/07/what_do_you_mea/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 4.850 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-02-08 23:44:48 -->
