Wednesday, October 23, 2002

Is there anybody out there?
7:09:37 PM      

We should be taught not to wait for inspiration to start a thing. Action always generates inspiration. Inspiration seldom generates action.
- Frank Tibolt

I suppose that is how skunk works projects get started. Seriously though, I think Frank is right. Sometimes you just need to put pencil to paper, or fingers to keyboards, and get something started. Oftentimes the inspiration will come later.

It reminds me of my old friend Bob Zimmerman. Bob had Adult Attention Deficit Disorder, something he used to his advantage. Bob was a very good coder, but could not focus on a problem long enough to design a solution. His approach was to start developing lots of solutions until one worked. One colleague remarked that with Bob's approach "one starts with the solution and the problem slowly begins to emerge".

The quote also reminds me of an old-line manager that used to walk between the rows of application developers' desks saying things like "I only want to see elbows and a**holes out here". Crusty, but effective.
6:21:27 PM    Google It!  

One thing I really like about Zoe is the way it indexes my email. I would like it to go beyond that. Most of my communication is via email or my weblog. What if Zoe could index my weblog entries also? Since it already knows RSS this does not seem like a fantastic stretch.

I suppose I could generate email from my weblog postings easily enough, but I think I would prefer that Zoe provide the ability to subscribe to, and index, specified RSS feeds. In this way I could also index particularly interesting feeds that I subscribe to. Voila! A nice index/search engine for postings of interest to me.
6:18:20 PM    Google It!  

I am almost afraid to comment on this one. I will just excerpt and link to it instead!
EJB Bashing

Listen to the EJB's go Pop[Thinking In .NET]

6:10:09 PM      

An interesting post from Larry Brien...
John Lam has written a cross-language "weaver" for adding aspects (as in aspect-oriented programming) into .NET languages. Aspects allow one to compose behavior based on the method signature of a target program. In that sense, they're similar to .NET's native attributes. The difference is that attribute behavior is restricted to programs that interpret that attribute, while aspects inject the behavior into the flow of an existing program. Thus, with attributes, programs like NUnit 2.0 can say "Which methods in this assembly are marked as test methods? Okay, call them all." While with attributes, one can say "Generate trace output for every method call that returns an integer." See my September 2001 review of AspectJ in Software Development (although note that I didn't write that it was "the first aspect-oriented compiler," which I believe is incorrect). [Thinking In .NET]

6:08:06 PM      

Oh yeah, I also disabled the WeblogNeighborhood. Again, nice tool but I use it infrequently.
6:04:01 PM      

A note on Radio performance: Some time back I observed that Radio was steadily chewing up memory throughout the day. A few other people observed something similar. After 24 hours it was common to see Radio's memory usage exceed 100M. Yesterday I decided to clean things up a bit more thorougly then I had bothered to before. I ripped out the ODBC extension (something I hadn't used in more than a year). I also disabled several tools: staticSites (not really needed anymore), radioPoint (I like it, but can enable it when I need it). I also killed an agent related to Radio's MP3 playing days.

Today Radio is consuming just 20M since startup 10 hours ago. Since the startup quickly goes from 14M to about 18M, I figure this is not too bad. Sure wish I could pin it down to something specific. Hmm... I just checked and usage zoomed up to 25M while I was writing this post. Then I went into Radio and ran window.dbstats() and saw usage drop to 16M. I guess it flutters around a bit. Still, I am pretty happy.
5:48:00 PM      

I love my job. I love it most when I get to use Radio as part of it.
5:37:29 PM    Google It!  

Why Would Anybody Want Versioned Configuration Data?
An example. One particular event that gets fired just before a sale is completed is called "Produce Turnaround Documents". A set of forms that become part of the contract need to be produced, signed, etc. The rules for what forms to be produced depend on the state in which the sale takes place and the configuration of the product sold. Naturally, the business community wants control over this. They can use an algorithmic rule (as previously described) to return a list of form names to the event controller (a piece of application code that is firing business events). However, as ernie will tell you, forms get revised all the time and are provided with a new form number effective on a specific date. Hardcoding the desired form numbers in the business rule itself would result in a maintenance headache.

A better approach is to let the business rule specify the form types to be produced. (perhaps using an application-defined enumerated type). The event controller could then use the types as a key to look up the particular form number that is in effect for the state on this date. That "look-up" structure (a fairly simple table except for the effective date aspect) should also be under the business client's control. That is where the Versioned Configuration Data Editor fits in. It is just another type of rule, but table look-up as opposed to algorithmic.
5:03:08 PM      

Cool things I have added to my Business Rules Sandbox...
  1. The generated event handler includes a time stamp.
  2. There is a separate bundle structure for each rule in the generated event handler.
  3. The generated event handler now includes a simple testing harness bundle.
  4. The generated event handler accepts multiple input parameters.
  5. The rules use english terms for logical operators (e.g. "or" as opposed to "||") - OK, Radio gave me that one as a freebie!
  6. Versioned configuration data (see the next post for an explanation).

4:53:54 PM      

Paydirt! My boss saw my Radio-based Business Rules Sandbox demo and really liked it. It doesn't hurt that Radio presents such a "live" environment to work in. At any rate, he wants our client to see the demo tomorrow. I sure wish I could do some form of IntelliSense in Radio. At this point that is the only major feature missing from my demo.
4:48:49 PM      

What is Authorete? Is this stuff usable in a space where several hundred thousand online business transaction are processed each day and each business transaction will trigger multiple rules-based events? I am not a believer, but am willing to be convinced.
1:33:30 PM    Google It!  

My skunk works project, the Business Rules Sandbox is paying off. George loves it - this was his first time seeing Radio's outliner in action, I think he is in love! Today I showed it to Jim and Bruce - two people who have been pushing very hard for a commercial rules engine - and they seem to like it also. The important part is that we have demonstrated a means for tech-savvy business clients to write code that directly influences the behavior of the application at an acceptable level of risk to the application's performance. Further, they can version the behavior in such a way that we can go back in time to apply a process as it previously existed (an important concept in the insurance business).
10:30:57 AM