June 2005 Archives

I'm currently working on what a computer scientist could call an artificial intelligence autonomous multi-agent configuration management system. There are many such systems out there and they are handy when you have a bunch of a computers to keep configured in a changing environment. These systems also helpt to maintain those configurations in case someone tries to break them. For example, CIS currently uses a system call cfengine to maintain it's configuration. In general, for every configuration file we have it managing, if I change that configuration file, cfengine will make sure that the changes are undone in an hour or so. We also use cfengine to do things like kill processes that shouldn't be running, start processes that have died, etc. I'm working on my system for a slightly different purpose (though, it's possibly my system could eventually supersede cfengine in the department).

Anyway, I want to explain the terms "artificial intelligence" and "autonomous" and "multi-agent" for non-computer scientists. Autonomous is easy, it runs without direct human supervision. I was surprised to learn that all that is required for something to be autonomous is this. I thought it would mean that the program was able to make independent decisions or something, but it does not. It merely means, "runs automatically and doesn't need a human to direct it." This means that most modern computers have autonomous agents running on them to monitor disk usage, protect the system from viruses, automatically download email, and check for processes that have "Stopped Responding."

The term "multi-agent" means that there are multiple agents running together (and probably that they cooperate towards a common purpose). An "agent" is just a program (or it could be a human that helps) that does something. The way AI computer scientists throw the term around, you could probably call your web browser an agent if it does anything on it's own (like check to see if there are any new updates for installed plugins).

The, ironically, stupidest term in this set is "artificial intelligence," aka AI. This seems like a name computer scientists came up with in the 60's for a field they were pursuing in which they thought we'd have Robby the Robot by 1990. This was hubris. Basically, they fleshed out some economic theories and created a few new search algorithms and eventually created a field named "machine learning," which is less misleading if not more impressive name for a field. The goal of the field of AI can pretty much be summed up in a word picture: An AI system is supposed to figure out how to climb to the highest peak possible in a very short amount of time, but without being able to see very far through fog. The way this is generally done is by looking for the upward leading slope and following it. When all the slopes lead down, you assume that you've reached the top of the tallest peak. Which, of course, is nonsense, because it might be if you take three steps down and to your left you find an upslope that goes even higher. Furthermore, what if you start in the wrong mountain range?

The further you get into AI, the more you find that it's just more tricks for trying to find a way around the fog. What if we drop several AIs and search from multiple starting points? What if can pierce the fog a little deeper? AI is very, very simple in the basics and the field grows in tedium the deeper you get. It doesn't produce any real intelligence in programs, it's just provides a few more tools for getting answers a little faster when you have limited information (for example, if you're playing chess, it's impossible to work out all the possible moves you and your opponent can make, so you look ahead as far as you can and try to make a good judgement on that basis).

Since I mentioned it, I'll finish with "machine learning." Machine learning seems like the most interesting field in AI. However, the results of machine learning aren't as impressive as one could hope and so the utility is limited. Currently, the most popular tool in machine learning is the Bayesian filter, which is just a way of saying that a guy named Bayes invented a way of statistically analyzing data so that you could make better decisions as you collect more statistics. If you use the Junk filter on your favorite email program, it's probably a Bayesian filter. On the simplest level, these programs work by collecting statistics about what makes a good email and what makes a bad one. In general, the simplest of these is what words can be found in the email. Generally, an email that contains the name of a major prescription drug will be more likely to be spam, while anything that includes the name of one of my favorite development tools is probably not. This is why you have to tell it that something is junk or something is not. It uses that classification to determine on which side of the ledger to count each of the words or phrases found. I imagine that Google does this on a number of levels (for example, ever mispell a word in a search on Google? As I understand it, Google picks word suggestions based upon words it's seen on the billions of web pages it's examined, not based upon any human collected dictionary. Thus, it can even suggest spellings for words that name products or companies that Google employees have never heard of.)

However, this sort of thing isn't perfect because a Bayesian system can't understand English grammar. Even so, humans can make the mistake of misfiling something as spam or not (called false positives and false negaties in machine learning lingo). Bayes systems are among the best available.

Anyway, I thought I would try to explain a few things to the beginning computer scientist or to the layperson because I'm not a fan of being thought of as a wizard with computers. There's nothing more special about my knowledge except that it is extremely specialized. I can't fix my truck, I am barely capable of fixing things around my house, and I have no expertise in most fields. In fact, I don't really understand how transisters or silicon chips work. That's beyond my understanding and I even took a basic course on it once. Anyway, lately I've become a bit tired of people thinking I know magic. This stuff isn't magic, but then as Arthur C. Clarke put it, "Any sufficiently advanced technology is indistinguishable from magic."

I finally got a new release of Contentment out yesterday. I've been working on this for almost two months as I'd created bunches of nasty bugs with a few big changes I'd made recently. I've got to start using the inards of Subversion a little better (temporary branching would have made this a much smaller problem).

Anyway, with this new release the Contentment web site is again running the latest version of the software and has the latest documentation available online. Now that Contentment is working again and that I've gotten the VFS system to a very nice point, I'm going to start porting this blog and such to it. Once done, Contentment should be very nice and I'll probably start promoting it a bit more.

The latest version uses File::System as the basis for the VFS, which is much more advanced that the previous VFS system. I hope to expand the use of this system in the next release to allow for arbitrary SPOPS objects to be used as backends for the VFS.

This version also features a hooks system, which is used to implement session and context creation and also the transformation and filtering system (or rather the request has hooks that these systems are added on to). This means that themes, transformations, filters, etc. can be replaced or removed if someone doesn't like them. I think I will place the caching system here as well. Furthermore, I think the filter and transformation systems will utilize the hooks rather than the rather stupid module loading system used now. The file typing system (both for input types and for output types) will also be reimplemented using the hooks system.

Those are the two biggest changes as of this release besides the bug fixes allowing the system to actually work now. I will try to make releases more frequently in the future and will try to break the system less often. (And I need to port the old aggregator so that the Contentment web site can pull these blog entries...)

I have a few friends in the career of "design" and they simply cannot comprehend my affinity for my favorite editor, Vim. Now, I have proof for them that I'm not an idiot! A recent Slashdot article has pointed me to a blog by Paul Tyma discusses the usefulness of the keyboard as for exclusive use for those of us who spend most of their day manipulating text.

I write programs for a living and, dang it, I don't really need my mouse a lot of the time. My most common use of the mouse is when I need to browse the web. Otherwise, I can Alt-Tab/Apple-Tab/Apple-` my way around and use key strokes to do my most critical tasks. Anyway, Tyma is right on...except, his objection to the claim that Emacs was created to scare children is right out. Emacs was created not only to frighten children but also as a means of illegal torture for enemy non-combatants.

About this Archive

This page is an archive of entries from June 2005 listed from newest to oldest.

May 2005 is the previous archive.

July 2005 is the next archive.

Find recent content on the main index or look in the archives to find all content.