|
|
Friday, January 3, 2003 |
|
Actually I'm also building up my own chronofile. As a first step I will aggregate all my UserTalk code I've written since 1992. I almost can't believe it. It's really a lot of fun to reinstall Frontier 2.0 and Frontier 3.0 root files. Thanx to heaven that Fronier at its core is also a database. More or less it seems that I've stored every single UserTalk based project I ever did. One of the newer ones; it was done between 1997 and 1998 fits very well to the the stories I've posted during the last days.
Magic Cap and TeleScript inspired me for many years ( finally they still do it).
So one day I decided to build a community based website that should worklike many, many web-connected PDA mockups. Top fullfil this mission I reimplemented the most important metaphers of the Magic Cap OS. The GUI was realized as a simple web browser interface an the necessary webapplication was scripted in UserTalk. These days I was reminded of this project when I found the first screenshots which were designed by Claudia Mueller from the ORF ON art department in accordance to my concept and related to my prototypical code. But don't get fooled: this was never a real ORF or Coca Cola Project. I just used these brands to attract people.
If you look carefully on these pictures you will immediately realize the similarities with the Magic Cap GUI even though I'd tried hard to to keep the whole project as webby as possible. These are just three pictures of a project that kept me busy for years. Till today it's the main asset for my personal motivation and inspiration as programmer. I don't know why but it was never necessary for me to finally implement the whole ideas. It's something that goes constantly round and round in my brain. It's a ongoing project that shapes every development I do. If there is a part of this Magic Cap mockup project that finally came into existance then it will be the my Agent Engine. It's just 2 weeks ago that I've extended this engine to support JavaScript. The following posting from 2001 still decribes the basics of this piece of software very well. It has taken me so much time and work to keep track with all the technological innovation taking place on the web at the moment. My head is so terrible filled up with all these acronyms you simply have to be fluent with. RSS, XML-RPC, SOAP, IM,Jabber, etc... . But that's not enough all this kept me constantly busy. It's not an easy task to follow all the new implementations in userlands codebase. so i almost forgot that at its core the web is less about innovation and technology than about new and borderless ways to communicate and socialize. so it should be no surprise that it became less and less funny and interesting for me to develope with userland frontier. with every single day frontier mutated more into the the direction of beeing just another boring web development system. Finally i decided to go back to lisp and prolog , preparing myself to do really cool webstuff, completely off mainstream. than something strange happened. i woke up in the middle of the night after vivid dreaming and realized how easy it would be to develop artificial intelligence stuff with usertalk. replace list-processing through table- and outline-processing and you are almost there. implement some simple algorythms for rule-based coding, forward- and backward-chaining, a mechanism for building decision-trees , pattern matching and unification and here we go. I followed the examples of David Hu's excellent book : C/C++ for Expert Systems and after just 3 days i had a marvelous working AI-framework. During the last week i started to explore this framework and possibilities in finding more facts about alle the interesting people contributing to the userland community. To accomblish this task i started coding a very special rule-base whre every rule is at the sametime a fully functional agent with the following structure.
At its core every rule (agent) is a piece of mobile code that unifies many typical AI - codestructure like frames, slots, object orientation, blackboard-processing, cellular automata stuff and much more. Simply put every agent is identified by its unique name and consists of a precondition, a task, a postcondition and a so called transcondition table. I 've choosen this representation because of the enormous felxibility it offers to me to mobilze my codebase. every agent should be as self centered as possible because this code will be forced to travel to the outer linits of digital space. ok. very, very simply put every agent is a single processing cell within a big cellular automata code matrix. this means every agent is either active or inactive. this means each agent is either in an off- or on-state. On means that the agent is ready to be processed and off means that the agent has either been successfully processed or has been inactivated by another agent. So there is one mainthread traversing the whole agent-table looking for agents waiting for their execution. But thats not enough. Cause every agent has to be rendered by the inference-engine before its able to be executed its also possible to code my agents with other Open-Scripting-Architecture compliant languages. Actually I support Usertalk, Applescript and Javascript. The very special task each agent has to fulfill is described within its task-table. but this task code will just be executed if the code inside its precondition table holds true. afterwords when the task code hase also been executed sucessfully executed the inference-engine runs finally the postcondition-code. normally the postconditioncode is used only for trurning on and off other agents. The reason for this behaviour is that sometimes specific agents need other agents fulfilling their tasks before the can try to fulfill their own task. following this rules a precondition code is able to switch other agents state to on and its own agent state to off. this makes sure that agents just run when the contect is right. With the transcondition-table every agents has its own universal datastore . there it stores all the data that are necessary for its own codeprocessing, stores all the results of its execution and stores also data that other agents could need for their execution. The following two pictures show you the inner structure of an agent that automates requests to the google search-engine via xml.
The first of the two pictures shows you how a typical agent resides inide the agents-table and the second picture gives you an overview about the structure of the whole agent. As you can see in the agents _Precondition i assure that radio userland is running as server. if this would not be the case the inference-engine would stop processing the agent. if that's not the case the engine executes the code of the main task. one of the specialities of this agent-structure is that it is very similar to a software-object that stores all the necessary information for its execution inside of its transcondition. in this specific example the task codes relies heavily on the data inside of its transcondition-table. i am talking especially about the serachTermList. In this case the searchTermList is a product of the interaction of two agents meeting each other. When on meets another agent they exchange or better synch the data of their transcondition tables. in my example the GoogleXmlAgent meets the RadioUserXmlAgent. Both agent share the searchTermList with each other. But what the hack are they doing.? the RadioUserXmlAgent runs continously and observes which radio userland-users are actually online. the tracks their names stores them as google-search-terms in a table end synchs this table with the GoogleXmlAgent. The GoogleXmlAgent takes these names out of the searchTermList and scores every user concerning predefined keywords. This way the agents help me to find people who have similar interests to me myself. on the other the the GoogleXmlAgent uses its requests to collect metainformation about the radio userland users. it uses regex to create a specific wordindex for every person. to create ths index the GoogleXmlAgent takes the serach-results for a given username and starts to visit the first 10 links delivered by the search-engine. GoogleXmlAgent follows these links and creates a unified textprofile for a given user. The results of the operation of these agents are really amazing. The next pictures shows you the results inside the transconditiontable of the GoogleXmlAgent. The pictires shows the run whre i explored the relation of the users to my interest-keyword publishing. I also tried keywords like radio, manila, usertalk, blog etc. This gave me a pretty clear picture about the interests inside of the userland community. Nevertheless its also its also eye-opening how diverse and colorful the interests of userlanders are. i had never thaought how many bright people have interest especially in radio userland. enjoy the next three pictures. Pretty cool. That's exactly the reason why i call this synergetic intelligence because this type of coding meant a brakthrough in combining the best of computing power with human intellect.
Very interesting is the use of the me-keyword which helps me to keep the agent code more rewadable. when the inference-engine renders the agentcode the me keyword is replaced through the detailed path leading to the agents _transcode objects. If I wouldn't do this the agent-code would be pretty ugly and unreadable. Compare the next two pictures und you will immediatly understand what I am talking about. Picture one shows how i code the agent and picture two shows how the inference-engine renders the code before the execution.
From the beginning of the project it was one of my main interests to show that with radio userland we have achieved the first time the possibility to enrich a digital environment with useful and well functioning agents that deliver exactly what they are build for in a very transparent fashion. meanwhile my agents really travel from one server to the next inside of my LAN. Amazing. It seems to me that telescript became sudden a reality. When I started render my agents into to outlines and serializing them into opml it was just a very small step to send them via XML-RPC from one radio server to another. everything works so smooth and was done so easily that i am constantly surprised and a liitle bit confused and overwhelmed by the possibilities this system offers every frontier developer. Sure this is just a prototype, a rough scetch and there are many things i have to deploy further. but anyway frontier rules.
|
|
So, Bruno Haid calls me a man who would be back back from something. Wow, that's interesting! Beside this I'm still struggling with DHTML..... But I'm not doing this without a reason. Everytime I intend to develop something new for me personally ,I start looking immediately to find a contractor who is willing to pay for my developments. The nice thing about this is that it really works. My new obsession with DHTML roots back to my intense exploration of using my private blog as an up to date chronofile. From my point of view it's pretty cool to reconsider some of Bucky Fullers ideas while using such advanced technologies like weblogs. And on the same time it has to be said that weblogs are still very insufficient as an equivalent chronofile collection. obviously the biggest disadvantage is the way day by day blogs present their infos. It's pratically impossible to view info assets from different days of different months or years inside on browser window side by side. exactly this would be necessary. I think that this might also be the reason that todays blog seem to be so completely anti-historic. to many blogs are much to focused on the present. somehow it's very disturbing.
All this makes me also think about what makes a weblog valueable. is it really just the amount of pageviews or the amount of crossreferences like all this new blog-community-metrix-aggregators want to make us believe. Or isn't it more about the relation how you combine your own ideas and works with external ideas via links ? "Out of my belly" I would say that one should target a 50:50 percent mix of home-grown content and external linked information. It can't be enough just to link in very original ways to content which has been produced somewhere else. All this has first to be filtered through your own mind and has to be compared to your own experiance. This turns information into some kind of knowledge; sometimes maybe. |










