Neil's Place

June 16, 2003

8:05 PM Oh well.

Looks like my former employer has turned pure evil. For those who don't know, here's the pattern used:

  • Hire new president to help become profitable.
  • Partner with large US company.
  • Hire new president to help become profitable.
  • Realize large US company provides no value and break deal.
  • Hire new president to help become profitable.
  • Partner with large US company

Comments ( 18 )

June 13, 2003

2:33 PM Getting and Putting Semantic Information

Below, I'm going to discuss how I think information can be retrieved and edited using a Semantic Web/Microcontent Client.

One of the things about RDF is that things (resources) are identified by a URI. While it is sometimes the case that that you can enter the URI into a browser and get some RDF-XML out, this isn't always true. There are many resources identified by an HTTP URI which aren't actually accessible at that location. Some XML namespaces are like this as well. I find this disturbing as using http:// at the beginning implies that the URI has something to do with HTTP. In fact, the XHTML namespace might as well be mailto:html@w3.org. Actually, it should probably be something starting with urn:

Anyway, because resource URIs in RDF don't indicate where information can be found, I need some consistent way to find RDF data based only on the resource. It's possible that such a thing has been suggested by someone already. I'd imagine something like the following.

http://www.xulplanet.com/ndeakin/weblog?id=urn:ndeakin:jun10-1

In this case, the resource 'urn:ndeakin:jun10-1' would be retrieved from the URL 'http://www.xulplanet.com/ndeakin/weblog', which would be some script which looks to see if knows about the resource and returns information about it, or returns nothing if not found.

The user's client (say a Semantic Web Client or Microcontent Client), would recognize the URL form, and could decide what to do based on user settings. For instance, if the resource was already known by the client, it would get the new data and add it to the existing data. Or, the client could modify the URL, based on some user setting, to retrieve from:

http://blogdex.media.mit.edu/weblogs?id=urn:ndeakin:jun10-1

This gets the same resource from a different source, which might return additional info about trackbacks and so forth. The example that actually got me started into the Semantic Web is like this:

http://www.imdb.com/Title?id=urn:movie:FindingNemo

The client could handle this directly, or it could transform into the following four separate requests (the sites don't actually exist, I've made them up):

GET http://www.disney.com/pictures?id=urn:movie:FindingNemo
GET http://www.showtimes-for-vancouver.com/Movie?id=urn:movie:FindingNemo
GET http://www.pssg.gov.bc.ca/film_class/about?id=urn:movie:FindingNemo
GET http://www.movietrailers.com?id=urn:movie:FindingNemo

This would gather general movie info, local showtimes, the localized rating and the trailer all combined together. Of course, I wouldn't expect Disney to actually allow this kind of thing, but it's just an idea. The client would combine the data from all four sources and present them into a single UI to the user. Here comes something even more interesting. What if I changed my Weblog request above to:

PUT http://www.xulplanet.com/ndeakin/weblog?id=urn:ndeakin:jun10-1

The only change is that the HTTP request type is now PUT instead of GET. This request would allow me to post information about the resource to my weblog. Hmmm, but what about if I wanted to post about a movie? I'd probably do this:

PUT http://www.xulplanet.com/ndeakin/weblog?id=urn:movie:FindingNemo

Notice the similarity to those examples above. The resource is the same, but I'm doing a PUT instead of a GET and the URL is different. Let's say now that Jack, who works for Showtimes for Vancouver, wants to upload the showtimes for the movie Finding Nemo for the week. First, he'd enter the resource ID for the movie into his client, the same kind of client everyone else uses (actually, he'd use a search facility that converts movie titles into IDs). The client might translate the ID into a request:

GET http://www.imdb.com/Title?id=urn:movie:FindingNemo

This returns various info about the movie, presented to Jack in a dynamic UI. Jack has customized the UI for the work he does at Showtimes for Vancouver. Although other users would just see general movie info, Jack sees a Showtimes Entry Area. Of course, this might be pre-filled from the data coming from the theatres that supply the showtime information. (which is just a request to their site with the same resource ID.) Jack enters data and hits the Upload button, which makes the following request:

PUT http://www.showtimes-for-vancouver.com/Movie?id=urn:movie:FindingNemo

Then, when a user makes the four request list from earlier, he would see the updated showtimes. Remember, no URLs were entered -- the client figured them out based on user settings and previous requests. Jack entered only a movie title, uploaded showtimes, and then users may view the info using the movie title. Also note, in this example, Showtimes for Vancouver doesn't have a Web site, just Jack entering movie showtimes.

Of course, all this requires that companies start using RDF for everything, and this system makes it harder for them to slap enormous logos and long license agreements on everything, so it probably won't ever happen. But then again, I'd rather build things for the user, which is why I'm interested.

Comments ( 7 )

June 8, 2003

11:19 PM My first attempt

mpt links to Gerv's early attempt at programming. I too am one of the ones that can say my first attempt was writing a text adventure, way back when I was 10 years old.

I implemented a rather random text adventure in Commodore 64 Basic, and I called it 'Advenure II'. What makes it interesting is that I accidently spelled it wrong when saving it, so it is forever known as Advenure II with no T. Also unusual, is that at the time, I didn't know of any game called Adventure, so the game was a sequel to something that didn't exist. As well, I don't remember playing any text adventures before then either, so it's possible I re-invented the genre myself.

The game was pretty primitive and random. At the beginning you had two choices, either A or B. If you chose A, you got into a boat, and a version of 'Michael, row your boat ashore' played which I'd copied the code for out of some book (which might have been the C64 user manual). If you chose B, you started "WALKING HOME FROM SCHOOL AND SUDDENLY, YOU FALL INTO A PIT." After falling in the pit, you find it filled with alligators and you have to escape on one of four vines.

After the boat trip or vines, the game is pretty random. The game might say you can go south or east, but really either way takes you to a random room. There wasn't any end to it, but there were several ways to die, of course.

I still have the disk I saved it on, but unfortunately I have no means in which to read it.

Comments ( 31 )

June 7, 2003

3:37 PM Searching for Actors

OK, I spent an hour or two, and threw together an icon view for actors for Topicalla. I didn't even have to change the client in any way.

Comments ( 0 )

June 5, 2003

7:39 PM Macromedia Central breaks my law

I just viewed a presentation on Macromedia Central, linked from Anil Dash's site. It seems to be a launching tool for Flash applications, with a bit of UI for connecting them together. Reminded me a bit of Mozilla Firebird's Extensions system, which also supports installling applications that do Web services, and sharing data and so on, as the presentation describes are features. Macromedia Central also seems to want in on the Watson/Sherlock territory.

However, it breaks Neil's Fundamental Law of Products: Never trust a product with marketing materials that contain the word synergy.

Comments ( 32 )

June 4, 2003

2:10 PM Some Mozilla Docs

Creating XPCOM Components - the upcoming book is available online.

Transitioning a Mozilla package to Mozilla Firebird

Comments ( 6 )

June 3, 2003

9:54 PM New Project Created

I've created a mozdev project for the Semantic Web stuff I'm doing. Nothing much to see yet, although you can look at the code and try compiling it yourself if you like. The client uses XUL and XBL and so on. It also uses a custom native XPCOM component written in C++. I used RH8.0 Linux gcc 3.2 to compile. Since I don't have any other compilers, I can't test if it works anywhere else. I'll write some actual documentation soon.

Comments ( 19 )

June 2, 2003

9:00 PM Haystack Comments

I just tried the long-awaited initial release of Haystack. In case you don't know what that is, it's an information client that allows one to organize and find information in almost infinite ways. For instance, Haystack allows one to set a reminder to prepare for the word 'the' contained in an annotation you made to a textbox label in the search panel for a mail folder. Which is a feature that, if it had existed long ago, would have prevented the fall of the Roman Empire.

OK, I'll ignore that Haystack is very slow and that the release notes contain the text '768 megabytes [of RAM] strongly recommended', and focus more on what it actually does and the technology behind it.

When you first launch Haystack, it takes about 5 minutes to do various sundry tasks. Like set up various default settings and compile a bunch of scripts. It only does this once, though, so subsequent launches are faster. The first thing I noticed when the main window opened was my name in the upper left corner. Hey, I thought, what magic! It knows who I am! On the left side is a bunch of links for various tasks. In the middle is a pile of news about SARS and West Nile Virus (hmmm, must know where I live too). It also displays the weather around MIT. I couldn't figure out how to customize it to display more local weather.

More operations are performed by right clicking on things. In Haystack you can right click on ANYTHING and get a context menu with 100 items on it. The menu has an item for each logical concept you clicked on. So, for instance, if you clicked on some text in a list, you might get commands for text, commands for things in lists, commands for lists as a whole, commands for what the list is in, and so on. Some commands seem to apply to everything, such as Annotate and Remind, whereas others such as Find Synonyms only apply to words.

Haystack never appears to open a second window for anything. Instead, when more information is need to carry out a command, a box appears on the left side of the window. This is a bit jarring as it's not always noticeable, so it often seems that a command had no effect.

Haystack uses lots of RDF. In fact, I think it's pretty much all RDF. Thus, an annotation is just a bit of RDF attached to something. Thus you can annotate anything, including a mail message, a news item, a list, or even a specific word. You can do the same with reminding and a number of other tasks.

Because of these things, the UI tends to look quite different after you've clicked on a few things. Boxes of tasks appear on the left side, the middle area changes often, and occasionally something happens on the right panel as well.

UI-wise it falls into the same problem as many web sites, including almost all big Web portals. It can do lots of things, but the UI tries to show too much of these things at once. Instead, a good UI should focus on only one thing -- what the user is currently doing. News web sites have this problem too. When viewing an article on a news site, only half of the display is used for the article, the rest displays weather, stock tickers and links to sign up to newsletters, none of which are actually relevant to what the user is doing. Of course, since news sites were doing this before the Web really took off, people thought this was normal UI, and learned to just ignore the bits along the four edges of a page.

In Haystack it's hard to tell what you're doing at any given time. It's also not clear whether it's possible to do more than one thing at once.

Anyway, that's what I thought after using it for half and hour or so. I'll look more into it to see if I can see how to use it better, and perhaps look more into how it works.

Comments ( 6 )