Last week I mentioned that I had a new project that I wanted to do a series on. Before I get into what the project is, I might as well give some background as I'm not sure I can describe what I want to do perfectly. Anyway, I like cartoon shows. That's an understatement really. My wife would say that I love cartoons. I mean in my opinion Cowboy Bebop has one of the best intro songs of all time, Butters is the greatest pimp ever (do you know what I am saying?), and The Monarch from Venture Brothers is my personal hero.
However there are a couple shows out there that have actual actors that I enjoy. One of those shows is Eureka. I don't know why but I love the quirky humor even if it is a bit formulaic. If you've seen the show Eureka, most likely you've seen the "character" S.A.R.A.H. And for those who have not seen the show, the character is the house that the main character (Carter) lives in. The house that he lives in has an AI (Sarah) that controls things for him. And before you jump to conclusions, I don't want to recreate the AI. Well not completely anyway...
Much of what Sarah does is either home automation or acting as a "chat bot". While I'm interested in the system that I want to create doing some home automation and talking to the user, I'm more interested in having it help to manage someone's life. For instance, watching a couple episodes I saw Carter tell Sarah to put on the game and on comes a baseball game. There are times when she reminds him of things he needs to do that day. He asks her to look up information online and she brings it up for him to view. However it seems limited on the show as to what she interfaces with. I want to take that to an extreme.
In the project that I'm working on, I want a system that can gather information from any source really. An application that can access everything from email to RSS feeds to twitter (or even other types of sites like NewEgg, Kongregate, etc.). I would want it to keep track of my calendar, tasks, etc. Basically help me with my digital life. I also want the application to be able to interact with the end user in a number of ways including the web, voice, etc. Well eventually I want it to do that. For now I just want a system that I can plug in new items as I create them and have it be able to use them (not to mention have it easy to extend). I mean if I can get it to aggregate my email, RSS, etc. to begin with that would be a start.
So how do I plan on going about creating this system? Well the way I see it, the system is divided into a couple of different sections:
- I/O Manager - The inputs and outputs need to be independant of one another. For instance I may type a message to the machine or click on something or even say something and the system should be able to respond in whatever manner I would like (in fact it could respond in multiple ways at the same time). So basically I need something to control that connection. And under this we would divide it into two sections.
- Input - Basically the portion of the system that accepts input and processes it for use by the rest of the system. This needs to be a system that accepts plugins so it can accept anything from touch to text to speech (whatever I may want to add).
- Output - However we want to communicate the information to the end user, which once again will require a plugin system as there may be multiple ways in which I want it to interact and in fact there may be multiple ones of the same type (multiple text boxes, lists, etc.).
- Service Manager - Really this would be a collection of services that we would use to get our response. Note that each of these services would be divided into different categories based on various actions. For example we would have one service that would search our email to match text, one would send an email, etc. As such they would have to connect to the input as well as the output of the system.
- Task Manager - This would be similar to the service manager but instead of being active, these are more passive actions. For instance these would be items that update your RSS feeds and checks if there is new email every couple of minutes. Basically they would only need access to the system's output and would never really get much in the way of input (other than an update to the configuration).
- Session Manager - There may be multiple people accessing the app at one time and it needs something that will keep each session seperate.
- Chat bot/AI/learning system (the brain) - The system needs to be able to differentiate between certain things. For example I may ask it on information on a movie. It needs to be able to pull up a list of movies that are similar to what I asked. If I then ask it to play the movie. It needs to be intelligent enough that it knows that it should play the movie and not search for information on said movie. And if it screws up, it needs to learn from the mistake. Basically it needs a brain to tie the various managers together. This needs to be divided into a couple other systems such as an information cache (anything that is saved across sessions), some sort of state machine, etc. And just like the other portions, this should be plugged in, allowing for multiple different systems to be swapped in and out.
There are other systems that are needed (settings, etc.) but these are the big ones that I've thought of. If you can't tell, this is going to be one of those "experiment" style series where I don't know what will actually come out of it or if I'll even succeed in what I want to do (I mean I know what I would like to build, but I'm pretty sure it will morph over time). As I code the project, I'll make posts here describing what I've done and why. And as always, I'll post the code (and start up a project on codeplex when it gets to a decent point). Hopefully someone gets something out of it and if not, well hopefully you'll stick around for my more random bits of code. I will say that I've already hit my first issue, I have no idea what to call the system. It's not a CMS, it's not a home automation system, it's not quite an aggregator either... I've searched for something like this out there and I've found nothing quite like this. So for now I'm simply calling it a LMS or life management system until someone can tell me what the hell I'm creating...
On another note, there are a couple new things about the website update that I did last week. First, you should now see a link that says Twitter Feed at the top. So if you'd prefer to follow the website on twitter, feel free. I'll never post anything there myself but it should update you when there is a new post here. Also, comments are turned on again now that I have some spam protection, which the spammers have already beaten it would seem. Anyway I've talked enough so have fun and happy coding.
b9abe6c5-bba2-4b20-9a92-5e66c85edce2|0|.0