David, Holy tortoise, what have I started? Seriously, this is very interesting because ESME's focus for a while has been on interactions where one endpoint is not necessarily a human, and in processing these interactions. The formula of events and rules for processing them provides ultimate power by being able to mix and match and even compose chains of routing and processing transformations. The fact that you have found an important practical application of this is undoubtedly exciting.
This power makes it possible to create synergies (oh noes, I'm using marketing-speak) with other software components. My current company is using Apache Camel in a project and there are many similarities and areas where Camel and ESME could work together well. As an aside, the Camel project seems to be into Scala as well, and it has as a committer the same guy who stirred some buzz by saying "I can honestly say if someone had shown me the Programming in Scala book by by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I'd probably have never created Groovy.". I believe that "Beginning Scala" would have done the trick as well, but I digress. And yes, the power of composition also means there are security and stability issues. As another example, it's fairly easy to create an action by accident, which recursively generates events which apply for the same action and loops, flooding the timeline with messages. It seems that most of the important features which were a personal itch to scratch in ESME are already in place. This means that after squashing a couple of bugs and documenting I could conceivably refocus on G2 (but I do want to know more details) and let the UI masters work their magic. There's one major thing, which I'm currently working on and want to get done. It's related to the vision of easy discovery which was one of the inspiration for ESME an year ago. To continue with the animal analogies, what's hot about Twitter trends is one of the things which has made bees successful for millions of years. When a bee finds a more suitable place to relocate the nest, it comes back to the colony and dances a little dance, which describes how to find the place. Other bees would randomly get convinced by the dancer and go out to explore this place of interest. If they find it worthwhile, they would come back and do the dance themselves. Eventually, when enough dancers appear in front of the bee nest, the swarm would decide where to relocate. Thus the collective mind would find out unerringly something which no individual bee knows with certainty. If we replace bees with humans and bee dancing with retweeting, you have the exact same model which makes social networks so popular. Bees retweet messages. We could get much more useful knowledge if we aggregate the information. This is what drives Amazon recommendations and Google suggestions. In the context of ESME we are using aggregated information in tags, but we could learn much more. I am currently trying to implement a simple actor collecting popularity statistics of certain events in the course of a certain time period. My current idea is to use it for tracking popularity of resent messages (retweets) and links clicked- we can easily do the latter in ESME, since there's an embedded URL shortener service, which redirects the request. In the context of David's suggestion for assembling custom applications, sorted collections of data also make sense. Being able to create a rule, which collects statistical information is quite valuable for time billing and project management. What have I spent most time on? What are the most resource-intensive projects? Which projects have the biggest gap between available and necessary resources? To get back to databases, sorting and aggregation functions are important selling points of databases. OK, that's enough rambling for one day. Does any of this make sense? Have fun, Vassil
