{"id":145,"date":"2015-06-19T14:21:53","date_gmt":"2015-06-19T14:21:53","guid":{"rendered":"http:\/\/carleton.ca\/nmai\/?page_id=145"},"modified":"2026-02-10T10:24:56","modified_gmt":"2026-02-10T15:24:56","slug":"magenta-2","status":"publish","type":"page","link":"https:\/\/carleton.ca\/nmai\/research-projects\/magenta-2\/","title":{"rendered":"Magenta"},"content":{"rendered":"\n<section class=\"w-screen px-6 cu-section cu-section--white ml-offset-center md:px-8 lg:px-14\">\n    <div class=\"space-y-6 cu-max-w-child-5xl  md:space-y-10 cu-prose-first-last\">\n\n            <div class=\"cu-textmedia flex flex-col lg:flex-row mx-auto gap-6 md:gap-10 my-6 md:my-12 first:mt-0 max-w-5xl\">\n        <div class=\"justify-start cu-textmedia-content cu-prose-first-last\" style=\"flex: 0 0 100%;\">\n            <header class=\"font-light prose-xl cu-pageheader md:prose-2xl cu-component-updated cu-prose-first-last\">\n                                    <h1 class=\"cu-prose-first-last font-semibold !mt-2 mb-4 md:mb-6 relative after:absolute after:h-px after:bottom-0 after:bg-cu-red after:left-px text-3xl md:text-4xl lg:text-5xl lg:leading-[3.5rem] pb-5 after:w-10 text-cu-black-700 not-prose\">\n                        Magenta\n                    <\/h1>\n                \n                                \n                            <\/header>\n\n                    <\/div>\n\n            <\/div>\n\n    <\/div>\n<\/section>\n\n<p><strong>Magenta<\/strong> is a small package of Java sourcecode distributed under the GPL. It can be used as a framework for developing Agent systems. It is a re-implementation in Java of the original Magenta agent framework, developed by <a href=\"http:\/\/carleton.ca\/nmai\/people\/babak-esfandiari\/\">Babak Esfandiari<\/a> in Smalltalk. The Magenta Pages are maintained by Aloke Mukherjee.<\/p>\n\n\n\n<h2 id=\"project-page\" class=\"wp-block-heading\"><a href=\"http:\/\/sourceforge.net\/projects\/magenta\/\" target=\"_blank\">Project Page<\/a><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Magenta&#8217;s Sourceforge project page &#8211; news, releases and CVS access<\/li>\n<\/ul>\n\n\n\n<h2 id=\"downloads\" class=\"wp-block-heading\">Downloads<\/h2>\n\n\n\n<p>Go to <a href=\"http:\/\/carleton.ca\/nmai\/resources\/#project downloads\">Resources page<\/a><\/p>\n\n\n\n<h2 id=\"guts\" class=\"wp-block-heading\">Guts<\/h2>\n\n\n\n<p>Hopefully this will serve as a guide not just to diagnosing and understanding Magenta&#8217;s anatomy but also for performing radical surgery upon its defenseless and shivering corpse.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>[<a href=\"http:\/\/magenta.sourceforge.net\/magenta\/magenta\/ComManager.java\" target=\"_blank\">source<\/a>] [<a href=\"http:\/\/magenta.sourceforge.net\/magenta\/docs\/magenta\/ComManager.html\">doc<\/a>] ComManager<\/li>\n\n\n\n<li>[<a href=\"http:\/\/magenta.sourceforge.net\/magenta\/magenta\/ComManagerThread.java\" target=\"_blank\">source<\/a>] [<a href=\"http:\/\/magenta.sourceforge.net\/magenta\/docs\/magenta\/ComManagerThread.html\">doc<\/a>] ComManagerThread<\/li>\n\n\n\n<li>[<a href=\"http:\/\/magenta.sourceforge.net\/magenta\/magenta\/EventManager.java\" target=\"_blank\">source<\/a>] [<a href=\"http:\/\/magenta.sourceforge.net\/magenta\/docs\/magenta\/EventManager.html\">doc<\/a>] EventManager<\/li>\n\n\n\n<li>[<a href=\"http:\/\/magenta.sourceforge.net\/magenta\/magenta\/ObjectManager.java\" target=\"_blank\">source<\/a>] [<a href=\"http:\/\/magenta.sourceforge.net\/magenta\/docs\/magenta\/ObjectManager.html\">doc<\/a>] ObjectManager<\/li>\n\n\n\n<li>[<a href=\"http:\/\/magenta.sourceforge.net\/magenta\/magenta\/GdmoObject.java\" target=\"_blank\">source<\/a>] [<a href=\"http:\/\/magenta.sourceforge.net\/magenta\/docs\/magenta\/GdmoObject.html\">doc<\/a>] GdmoObject<\/li>\n\n\n\n<li>[<a href=\"http:\/\/magenta.sourceforge.net\/magenta\/magenta\/AgentProxy.java\" target=\"_blank\">source<\/a>] [<a href=\"http:\/\/magenta.sourceforge.net\/magenta\/docs\/magenta\/AgentProxy.html\">doc<\/a>] AgentProxy<\/li>\n\n\n\n<li>[<a href=\"http:\/\/magenta.sourceforge.net\/magenta\/magenta\/Agent.java\" target=\"_blank\">source<\/a>] [<a href=\"http:\/\/magenta.sourceforge.net\/magenta\/docs\/magenta\/Agent.html\">doc<\/a>] Agent<\/li>\n\n\n\n<li><a href=\"http:\/\/carleton.ca\/nmai\/research-projects\/magenta-2\/protocol\/\">Protocol<\/a> formats for messages between Agents<\/li>\n<\/ul>\n\n\n\n<p>&#8211; overview: list and briefly describe components,<br>\ninterrelationships, typical flow of communication, applications<\/p>\n\n\n\n<p>The ComManager, ObjectManagerand EventManager&nbsp;are the three most important classes for a Magenta Agent. If we make an analogy between an Agent and a human then these components correspond to body parts as follows:<\/p>\n\n\n\n<p>The ComManager&nbsp;(which contains the helper class ComManagerThread) acts as both the mouth and the ears of the agent. As the Agent&#8217;s mouth: it is responsible for communicating messages to other agents and listening for the response. As the agent&#8217;s ears the ComManager&nbsp;is responsible for receiving messages from other agents and handling them intelligently.<\/p>\n\n\n\n<p>The ObjectManager acts as the agent&#8217;s brain. It contains a database which is the storehouse for the agent&#8217;s knowledge of objects in its environment. Most of the messages received by the ComManager are handled here in the agent&#8217;s brain.<\/p>\n\n\n\n<p>The EventManager acts as a kind of nervous system which senses changes in the environment (i.e. the objects in the ObjectManager) and triggers an automatic notification to other interested agents.<\/p>\n\n\n\n<p>These three objects are encapsulated within an&nbsp;Agent. In a typical communication flow an agent&#8217;s ComManager receives a message which is parsed and dispatched to the appropriate ObjectManager API (create, delete, set, get). The ObjectManager then performs the requested operation and returns the result back to the requesting agent. Through an observer-observable relationship the EventManager is automatically notified of changes in the ObjectManager. The EventManager then causes eventreport messages to be dispatched to observer agents.<\/p>\n\n\n\n<p>The other key Magenta class is the&nbsp;GdmoObject. Based loosely on the &#8220;Guideline for Definition of Managed Objects&#8221; standard (put a link here), a&nbsp;GdmoObject&nbsp;is the top class from which all Magenta managed objects must inherit. The&nbsp;GdmoObject&nbsp;class contains a few attributes common to all objects (name, path, instantiated) as well as encapsulating the code which causes the EventManager to be notified when a&nbsp;GdmoObject&nbsp;set or get method is called.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>com manager: tcp vs. rmi, describe apis (send\/processMessage), protocol,<br><br>what is cmip?<\/li>\n\n\n\n<li>event manager: observer\/observable, apis (notify)<\/li>\n\n\n\n<li>object manager: reflection, data structure for tree, apis (add,<br><br>delete, get, set), addressing, object types &#8211; what is Gdmo<\/li>\n\n\n\n<li>management application: apis (processNotification), gui\/cli<br><br>implementations<\/li>\n\n\n\n<li>issues: tcp vs. rmi, autodiscovery, connection vs. connectionless, passing<br><br>info in notifies,<\/li>\n<\/ul>\n\n\n\n<h3 id=\"common-tasks\" class=\"wp-block-heading\">Common Tasks:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>how to add new magenta objects (i.e. Printer, Computer, etc.) with<br><br>their own set, get methods<\/li>\n\n\n\n<li>how to extend Agent (i.e. n-queens, gui, cli)<\/li>\n<\/ul>\n\n\n\n<h2 id=\"projects\" class=\"wp-block-heading\">Projects<\/h2>\n\n\n\n<p>Some examples to get you started (i.e. confused):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/carleton.ca\/nmai\/research-projects\/magenta-2\/climanager\/\">CLIManager<\/a><\/li>\n\n\n\n<li>GUIManager<\/li>\n\n\n\n<li>NQueensProblem<\/li>\n<\/ul>\n\n\n\n<p>All Magenta users are welcome to add links or new pages below describing their courageous attempts to write useful applications using the Magenta framework or, more courageous still, their modifications and enhancements to it&#8230; (magenta can be enhanced? sacrilege.)<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/carleton.ca\/nmai\/research-projects\/magenta-2\/magenta-web-interface\/\">MagentaWebInterface<\/a><\/li>\n\n\n\n<li>MagentaServer<\/li>\n<\/ul>\n\n\n\n<h2 id=\"bugs\" class=\"wp-block-heading\"><a href=\"http:\/\/carleton.ca\/nmai\/research-projects\/magenta-2\/bugs\/\">Bugs<\/a><\/h2>\n\n\n\n<p>Another way you can contribute. <a href=\"http:\/\/carleton.ca\/nmai\/research-projects\/magenta-2\/bugs\/\">Here<\/a> is a place to report things that don&#8217;t work, things that don&#8217;t work the way you&#8217;d like, or things that don&#8217;t even exist but ought to. (preferrably Magenta-related, but hey, let your imagination run wild)<\/p>\n\n\n\n<h2 id=\"news-and-updates\" class=\"wp-block-heading\">News and Updates<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>December 16, 2001<\/strong>: up2p-client 0.20 and Magenta 0.20 released<\/li>\n\n\n\n<li><strong>October 03, 2001<\/strong>: Version 0.11 imported, and released<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Magenta is a small package of Java sourcecode distributed under the GPL. It can be used as a framework for developing Agent systems. It is a re-implementation in Java of the original Magenta agent framework, developed by Babak Esfandiari in Smalltalk. The Magenta Pages are maintained by Aloke Mukherjee. Project Page Downloads Go to Resources [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":27,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_cu_dining_location_slug":"","footnotes":"","_links_to":"","_links_to_target":""},"cu_page_type":[],"class_list":["post-145","page","type-page","status-publish","hentry"],"acf":{"cu_post_thumbnail":false},"_links":{"self":[{"href":"https:\/\/carleton.ca\/nmai\/wp-json\/wp\/v2\/pages\/145","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/carleton.ca\/nmai\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/carleton.ca\/nmai\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/carleton.ca\/nmai\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/carleton.ca\/nmai\/wp-json\/wp\/v2\/comments?post=145"}],"version-history":[{"count":3,"href":"https:\/\/carleton.ca\/nmai\/wp-json\/wp\/v2\/pages\/145\/revisions"}],"predecessor-version":[{"id":228,"href":"https:\/\/carleton.ca\/nmai\/wp-json\/wp\/v2\/pages\/145\/revisions\/228"}],"up":[{"embeddable":true,"href":"https:\/\/carleton.ca\/nmai\/wp-json\/wp\/v2\/pages\/27"}],"wp:attachment":[{"href":"https:\/\/carleton.ca\/nmai\/wp-json\/wp\/v2\/media?parent=145"}],"wp:term":[{"taxonomy":"cu_page_type","embeddable":true,"href":"https:\/\/carleton.ca\/nmai\/wp-json\/wp\/v2\/cu_page_type?post=145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}