From: Tucker I S. <ts...@MI...> - 2000-05-21 19:42:44
|
Hello Hive users, We have been planning to get out a stable release of Hive for the last several days, but numerous last minute bugs have delayed it. Right now, there is only one item left on our list, but unfortunately, both Raffi and I need to work on a demo for DL this Wednesday, and won't be able to get to this last bug until then. Thus, we are releasing what we have as a devel release, with a known bug being that there is a thread locking problem on startup that can keep hive from booting. We will get this bug fixed soon after the demos end. If it doesn't boot at all on a certain computer, a workaround that *may* help (however ugly it may be) is to set the debuglevel to notice, either on the command line with the --debuglevel=notice or in the HiveCellDescription file with the <DebugLevel>notice</DebugLevel> tag (see below for more details). - Hive Devel Team Release Notes for Hive-20000521: Hindenburg Contents: I. Overview of current status II. New demos built with Hive III. Details of the major changes since the previous version IV. Incompatibilities with Release 19991210 V. What's ahead for Hive I. Overview of current status It's been nearly half a year since our last stable release, and big changes have been taking place. Now that it's finally stabilized, Hive is much smaller, faster and more efficient than it ever has been. In fact, with code-god Raffi essentially completed with his renovations of the internals, the core classes of Hive (Cell, AgentMonitoringAgent, AgentMessagingShadow, etc.) are in a supremely well tuned state, and will not be going through any more large changes in the foreseeable future. In addition, Hive has seen its user-base grow, and is now the infrastructure of choice for many new demos in both the Agents Group and the Wearables group here at the Media Lab. Finally, all of Hive has been renamed from edu.mit.media.hive to net.hivecell.hive. Should be easier on the wrists.... In another renaming spree, the net.hivecell.hive.xml package has been renamed to net.hivecell.hive.description, and the classes that make up the package have also been renamed: XMLDescription -> Description XMLDescribable -> Describable XMLDescSet -> AgentSet A new class, RemoteDescribable, has also been added to avoid needing to test a local Describable object for RemoteExceptions when getting and setting a description. There is a perl script, PackageRenamer.pl, that will do the name conversion for you. It can be found on the www.hivecell.net web-site in the download section. On a personal note, Hive's leading developer, Raffi Krikorian, won the Fano award for being the most outstanding UROP at MIT because of his work on Hive. He's been doing an unbelievable job, and it shows. Hive has really come far since the last release because of the massive amount of time and effort he's put into it. Both of us (me being Tucker) will be away this summer, and any releases (after the next one in a few weeks) will be small bugfixes, not any attempts of answering research type questions. Raffi will be taking a leave of absence next term (he desperately needs a break from school), but I will still be around, and I'm in the process of trying to recruit more UROPs to keep Hive moving. Maybe we'll still see some check ins from Raffi when he's bored. II. New demos built with Hive InShop (http://agents.www.media.mit.edu/groups/agents/projects/impulse/inshop/) Intelligent agents manage a customer's shopping list as they wander around a grocery store, and suggest recipe options based on ingredients they have already bought, and lets them know what to buy to make certain recipes. Hive allows several different types of agents to easily cooperate and share information, and also allow possible-but-not-yet-implemented features (such as a map of the store) to be easily added later. WAPPointments This is a collaborative scheduling demo, which compares your appointment book with those of your friends to see if you will be in the same place at the same time, and suggests a meeting place if so desired. streetWise (http://agents.www.media.mit.edu/groups/agents/projects/impulse/streetwise/) This demo uses Hive as a framework for allowing agents with location awareness to communicate with other agents specified by the user. These agents are in communication with one another, and let the user know when he is around places and things which are of interest to him. III. Details of the major changes since the previous version 1) Probably the largest change in the release is the complete re-write of the message handling system, also by Raffi. Previously, each agent spawned a thread to handle messaging to other agents through RMI, which was a time consuming and inefficient process. This also could eat up a large number of ports, depending on how many agents were messaging each other. Now, a single shadow, AgentMessagingShadow, handles event communication between agents on different cells. This means only one dedicated port is required to talk between any two given cells, and if a message is being sent to more than one agent, it is only transmitted once, and forwarded multiple times by the AgentMessagingShadow. This allows Hive to send more than 500 events per second, up from about 50 or so previously. 2) The second largest change is the switch from RDF to XML as the internal mechanism for storing Agent's description and configuration information. What these means to developers/users is that agent descriptions/config files are much easier to write, due to the simpler syntax of XML. In addition, there are now way more functions in the description package for querying agents and sets of agents based on their descriptions. Many of these new features are not being used anywhere (yet), so check the javadocs for net.hivecell.hive.description.* to see what the new package can do. Highlights include the ability to dynamically modify an agent's description, print out the description in XML, query a description based on XML attributes, and support for querying AgentSets (formerly XMLDescSets) that used to be available only to through the Cell's queryAgents method. 3) Debug improvements: Ability to set specific debug levels by class. This means you can block all messages less severe than, say, warnings for all classes except one, for which you can show all notices. In addition, debug messages can be sent to an arbitrary stream, allowing for the easy creating of log files. Also, a pre-processor has been written to insert file and line number everywhere it finds a debug statement. This will allow us to get full Debugging information even in a JIT, as well as avoiding the overhead of throwing and catching exceptions to parse the information out. However, no one currently on the Hive team knows how to integrate it into the Makefile, so any suggestions would be appreciated :) Also added the printStackTrace() method in case the debug output will show the entire stack trace instead of just file and line. 4) Cell.java code cleanup: Exceptions are being thrown in a more consistent manner. Also, the multiple hive startup files are now stored in the config section of the cell's description, ~/.hive/HiveCellDescription. See the file HiveCellDescription.sgml in docs for a complete listing the new startup format. Shadow startup and management is handled similarly to the agents (see below), so there are now two new inner-classes that replace the functionality of ShadowDB.java and AgentGateKeeper.java. Thread handling has been cleaned up a lot, so the intermittent lockups during boot should be a thing of the past. 5) There is also vastly improved infrastructure for handling shadows. There is no longer a shadowDB; agents and shadows are now managed the AgentTable and the ShadowTable in the Cell, and in addition, lazyShadowInstantiation has been removed. Thanks to Raffi, there is now a complement to rmic for compiling stubs for shadows. This means that Hive doesn't need to expose all the methods of a shadow to agents. Functions that should only be called by the cell can be hidden, as the agent only sees a stub. 6) Agent startup is now more controlled, and Hive can make more promises on the state the agents are in during the stages of their creation. Blank descriptions are created for agents by default when they are instantiated, so an agent's description is never null. An AgentSetupException must be thrown if an agent realizes it can't be created in its doLocalSetup, instead of calling diePlease(). This will need to be changed in any existing agents. 7) Shiny New AgentMonitoringAgent: This fixes the cache coherency problems sometimes experienced in the previous versions of Hive, and provides better data synchronization. In addition, this agent now has a much simpler remote interface. 8) ExternalInterfaceShadow: This shadow in the apps package is the first stage of the infrastructure that allows Hive to communicate with non-Hive devices by sending meesages over an XML stream. This is used in the InShop demo for communicating with a PalmPilot, which doesn't have a JVM. In the far distant future, all messaging will be done through XML streams in the AgentMessagingShadow. Then, non-hive devices would be able to be integrated with hive simply by talking the standard hive protocol. Until then though, this shadow provides a means for letting non-Java devices to communicate with Hive. 9) The RMI registry is now exposed, so non-Hive RMI objects can use RMI to communicate with Hive. This does for RMI what the ExternalInterfaceShadow does for messaging (see above). Daniele de Francesco built an agent that also exposes itself through the registry, so that it can communicate with hive over RMI without using Hive. IV. Incompatibilities with Release 19991210 This is a (hopefully) complete list of the changes that will break existing agents, either at compile time, or when they start up. If you find an incompatibility that isn't listed here, please send it to hiv...@hi.... 1) Agents using RDF need to be converted to use the XML description package. The differences between the two packages are outlined in the docs, descriptions.sgml. 2) Different Exceptions are being thrown by Cell.java, so some try/catch blocks will need to be added to get old agents to compile. 3) diePlease() in doLocalSetup causes problems. It needs to be changed to throw new a AgentSetupException 4) edu.mit.media.hive and references to the edu.mit.media.hive.xml package will need to be changed to the new net.hivecell.hive namespace, and references to the edu...hive.rdf or edu...hive.xml will also need to be changed to the description package. A perl script, PackageRenamer.pl, that will do the name conversion for you can be found on the www.hivecell.net website in the downloads section. 5) Due to the new AgentMessagingShadow, new cells may have a problem sending events to old cells, and RMI between this version and old versions will not work at all. V. What's ahead for Hive Next Release: 1) Hive Classloader - By building a tree of classloaders, we hope to solve the version compatibility problem that currently prevents agents from different versions of Hive working together reliably. 2) More security - Mainly focused on protecting the Cell from malicious agents. Protecting the agent from malicious Cells is a hard problem! 3) Better Control of debug output from the CellDescription - in the Cell's description, it will be possible to specify the level of debugging output based on a class by class basis, not just for the entire cell. 4) debugPreProcessor integrated into the Makefile - Any takers? Beyond the next release: 1) No more ExternalInterfaceShadow, instead the AgentMessaging shadow will use XML instead of a serialized stream, and inter-cell event communication can happen thorough that. Thus, non-hive devices can talk to hive using the same standard protocol that hive uses to talk to hive. |