![]() |
|||||||
![]() |
|||||||
|
|
|||||||
|
August 26, 2011
name of the bot Our next task is to pick a name for our first StoryBot agent, which might seem an unimportant choice, though in practice it matters quite a lot, at least to me. StoryBot is the marketing name for the overall system. The individual agents created with StoryBot have their own names. Our long-time bot in Immuexa’s IRC channel is named Waverly, which has served us well for half a decade. While the name “Waverly” would be very appropriate for an education bot, given its similarity to our education nonprofit, Waveplace, I’m ready for a fresh start, so Waverly is history. Another bot name I’ve used briefly is Smilla, named after the lead character in a great novel, but mostly for its similarity to Storymill. Though I did use that name for the initial example, I’m just not feeling it today. I want another name. Just now I was scouting around and briefly considered Zeno, given the symbolic connection to the Greek philosopher (not the acne treatment). While naming it after the father of dialectic would certainly be appropriate, and while the connection to Hofstadter dialogues is also nice, as I type this I’m thinking that Zeno feels like I’m trying to hard. Perhaps Zeno will be another bot, but not the first one. Instead I’m thinking of another old favorite, this one the name of an illustration we made back in 2005: Sibley … Sibley is a friendly name, with a clear phonetic connection to StoryBot. As a character, Sibley the great blue heron has a personal connection for me to southwest Florida, the site of so many Gravity ideas from the early nineties. Also, as we are now entering the fall migration season, choosing a bird feels right, particularly since we’re working again with Hawk Mountain Sanctuary (though I don’t think they’ve seen many herons up there). And lastly, we’ve already got an illustration for the bot! So Sibley it is. Now to get her to talk. Posted in storybot | No Comments »
August 25, 2011
hello, world A long-standing tradition among software developers while learning a new programming system is to first display the message “hello, world.” While something so simple might seem pointless, there’s actually a lot that must go on before that, usually wiring up a development environment, creating the project, and writing the minimum amount of code. Hello world programs are about getting the plumbing right. Often programmers use a variation of “hello, world” such as the OLPC/Sugar team, which displayed, “Hello, (children of the) world,” which I quite like. I’ve already decided on my “hello, world” phrase, something that has personal significance to me. The next decision is what programming language and core tools to use. Many developers are religious in their advocacy of a particular language or tool. I’m more pragmatic. My chief concerns are: 1) are there lots of people using it, so I can find help; 2) are there lots of specialized tools I can use with it; and 3) can I get up to speed quickly without wasting time learning to walk again. Given these three criteria, there’s only one choice for me. Java has been the most popular programming environment for decades, with nearly all colleges teaching it as their primary language, which means lots of specialized Java tools are available, many more than other systems. I’ve also been using Java for 14+ years, so I can jump right in and get results. Would I like to use Python or Ruby or Squeak? Sure. Programmers like learning new languages, and I’m no different. But when making these sorts of decisions, I’m much more conscious of avoiding gotchas and sinkholes which inevitably come from switching systems. My goal is to stay productive, which is even easier with all the changes to the Java platform in recent years. So with that choice behind me, it’s time to fire up my favorite development tool (IntelliJ IDEA), create a new project, set up the version control (Subversion), and write some code. For the record, I’m using a MacBook Pro that’s more than three years old, which is ample. Off I go … (two hours later) A very good start. I’ve created Java interfaces and base classes for agents, channels, prisms, and messages, along with an application wrapper that starts an agent and gets it running. The mechanisms for im/mu/ex processing and prism/channel maintenance are all finished. My code is in Subversion and I’ve got a Maven project all set-up. In other words, I’ve done pretty much all the plumbing-only stuff. Now to try it. I open the Mac terminal and type “storybot” … teefal$ storybot You may begin. teefal$ Posted in storybot | No Comments »
August 24, 2011
blank page design When hearing a new idea presented, most people compare it to what they know and ask things like, “Have you used Wolfram|Alpha, or Cyc, or chatterbots?” Most would start by researching such projects, comparing features and approaches, getting inspiration. Personally, I prefer “blank page design”, trying to empty my mind of all influences, including my own past designs, so I can get to the core of things and limit my assumptions. So let’s start. We know from the previous two posts that I’m creating StoryBot, a cognitive agent, with three essential capabilities: im, mu, and ex. Two of these operations, im and ex, involve communicating outside the agent, so we’ll need some conduit, some method for getting input and sending output. Rather than talk of websites and IM clients, I’ll ignore such real world concerns and simply talk of channels (which has nothing to do with the fact that I’m now watching the original Star Trek series). An agent communicates with the outside world through channels. It’s a bit like an author trapped in a small room with only a mail slot in one wall. Ever so often, a piece of paper gets slipped through the slot. The author reads the paper, writes a response, and slips it back through the slot. The author has no idea what or who is getting the response. For all she knows, her response could be displayed on the Time Square billboard or read aloud to a kindergarten class. Her response could be used to make a movie or build an electric car. Such is the life of an agent . . . it knows only mail slots, or channels. Using such a simple abstraction allows us to make all sorts of channels that work equally well with each agent. We’ll have an IRC channel, a web application channel, a Skype channel, a Facebook channel, etc. By using this abstraction, we can isolate such particulars from our core design. Now that I’ve got a useful abstraction for im and ex, I’ll focus on mu. The defining attribute of mu is “change” … information comes in, gets changed somehow, and then goes back out. Reminds me of a favorite quote by Gregory Bateson: “Information is any difference that makes a difference.” It also reminds me of prisms, since they receive, change, and send light in pretty cool and clear ways. So our central mu abstraction will be the prism, which you can think of as a kind of sub-agent that changes information on behalf of its agent. To return to the mail slot room example, imagine that prisms are other people in the room that help the author. So when a letter comes through the slot, the author (agent) gives it to the helper (prism), who then makes their own response and hands it back to the author. Already I’m second guessing things, wondering if there’s any useful distinction between agent and prism, or between agent and channel for that matter. This likely has to do with my old designs creeping back, affecting my blank page brain. For now, agent, channel, and prism are useful as starting points. Time to write some code. Posted in storybot | No Comments »
August 23, 2011
cognitive agents So let’s start our StoryBot talk by defining some terms. First off, what is a “cognitive agent”? What makes it different from other programs? For our purposes, an “agent” is an autonomous self-contained software system that receives input in some manner (IM), processes this input by consulting its internal context (MU), and creates a response (EX). The name of my 13 year old software company comes from this 24 year old abstraction (and word): IM – impression, perception, things going in Immuexa is the process of perceiving, creating, and expressing. During my years working on Gravity, these three short words represented the fundamental components of the architecture. Now, you might say, “Well that describes all computer programs and people!” and you’d be right. The usefulness of im/mu/ex lies not with the external view, but how this pattern replicates itself “all the way down” in a many similar to a fractal. But I’m getting ahead of myself. For now, just know that an agent is something that im’s, mu’s, and ex’s. By “self-contained,” I mean that each agent is a black-box to the person or system interacting with it. There’s no telling what happens between im & ex. The word “autonomous” means that each agent works independently of any system that contains it. The same agent can be wired to a website, iPhone, IRC channel, or group of other agents. So what about “cognitive”? How do cognitive agents differ from simpler software agents, such as mailer daemons? Well, this is a much bigger question, so I’ll simply give a quick example here. The simplest non-cognitive agent: <nosmo> What is your name? A complex cognitive agent: <smilla> How can I help? Smilla is “more cognitive” than Nosmo. And more useful. Posted in storybot | No Comments »
August 22, 2011
next bold move
Between 1987 and 1994, I designed and built Gravity and Colony, greatly anticipating the World Wide Web (Web 1.0), though my designs went much further, which is why they never took off. They weren’t as simple, as infectious, as the Web, so I sat things out while watching the dot-com gold-rush from the sidelines. Between 2003 and 2005, we continued my old designs and built Tidepool and Storymill, anticipating what would become Flickr and Facebook (Web 2.0). Again, if we had focused simply on the web-side of things, if we had stayed simple, we could have ridden that great second wave of the Web, though didn’t. In all these years, there’s been one major piece of my Gravity dreams that still hasn’t caught on, that’s still waiting to make someone a lot of money. For twenty-four years, I’ve called it the “cognitive revolution,” the one that will make Web 1.0 and 2.0 look like a mere prequel to the main event. At it’s core, Gravity was about cognitive agents, little interconnected benevolent leprechauns that did your bidding in surprisingly useful ways. Starting today, I’m stepping back into the ring to help make Web 3.0, this time building StoryBot™, a general purpose cognitive agent that can be bundled into any desktop or web app. I’ll start by teaching StoryBot about educational resources, which given my Waveplace and Squeakland experiences in the last four years, will hopefully yield some genuine interest and funding. My hope is to help solve the trickiest of problems: flexible, context-driven, educational resource selection and assessment that avoids rubber-stamping our children towards Stepford futures. I’ve spent years talking about the problem. I’ve spent years thinking about the solution. Now to build it.
Posted in storybot | No Comments » |
|||||||
![]() |
|||||||
|
"Big Fractal Tangle" is a phrase used by Tim Berners-Lee at ISWC 2003
to describe his vision of the Semantic Web (used with permission) "Tidepool" and "Storymill" are trademarks of Immuexa Corporation. Website design copyright © 2003-2004 by Immuexa. |
|||||||