Friend of a Friend (FOAF) IRC Chat Logs for 2005-04-07

This is an automatically generated IRC chat log made by the logger bot from the Friend of a Friend (FOAF) IRC chat at irc://irc.freenode.net/foaf (also known as server irc.freenode.net channel #foaf if that URI does not work for you).


Friend of a Friend (FOAF) Logs > 2005 > 2005-04 > 2005-04-07 (Latest) (Search)

12:54:20 <Esaj_> Esaj_ is now known as Esaj

15:10:26 <Cloud_> Cloud_ is now known as Cloud

15:32:55 <balbinus6> balbinus6 is now known as balbinus

18:07:30 <JimJibber> JimJibber is now known as JibberJim

18:13:02 <crschmidt> libby: oops, apologizes for misreading DOAP bulliten board

18:13:50 <libby> s'ok, we just get the final decision is all

18:14:09 <libby> probably worth creating another more general one on the foaf wiki

18:14:17 <ldodds> url?

18:14:43 <crschmidt>http://esw.w3.org/topic/SemanticWebDOAPBulletinBoard

18:15:16 <ldodds> oh ta, the esw wiki changes somehow slipped out of my rss reader.

18:15:25 <libby> we're teying to simplify the waywie collect apps and demos together in swbp wg

18:15:44 <libby> so we want dioap files for semweb apps and demos specifically

18:15:48 <libby> doap

18:15:58 <libby> a more general page woudl be cool

18:17:31 <ldodds> what do you class as "RDF, RDFS and OWL applications"?

18:17:35 <ldodds> are editors, query tools included?

18:18:45 <libby> yep :)

18:19:02 <ldodds> ok, cool

18:19:04 <libby> very much so

18:19:50 <ldodds> is there an RDF version of that bulletin board available somewhere?

18:20:16 <ldodds> IIRC my XSLT hack doesn't work on MoinMoin (html too broken)

18:20:21 <crschmidt> yeah

18:20:28 <crschmidt> jim's got stuff to do it for the FOAF bulliten board

18:25:20 <crschmidt> bleh, esw's HTML output is more friendly than FOAF

18:25:51 <libby> not currently anything, should be....

18:26:50 <crschmidt> ^ns rdf

18:26:51 <julie> The URL for the rdf namespace is http://www.w3.org/1999/02/22-rdf-syntax-ns#

18:27:03 <crschmidt> ^ns rdfs

18:27:03 <julie> The URL for the rdfs namespace is http://www.w3.org/2000/01/rdf-schema#

18:29:31 <crschmidt> one liner for generating from FOAF or DOAP bulliten board on FOAF wiki:

18:32:25 <crschmid1> crschmid1 is now known as crschmidt

18:32:30 <crschmidt> echo '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"><rdf:Description>' > temp;w3m -dump_source http://rdfweb.org/topic/FOAFBulletinBoard | grep external | perl -pe 's/.*?external" href="(.*?)"/\1\n/g' | grep http |perl -pe 's/^(.*?)$/<rdfs:seeAlso rdf:resource="\1" \/>/' >> temp; echo "</rdf:Description></rdf:RDF>" >> temp

18:33:24 <crschmidt> oh, that uses w3m: can equally use wget -O -

18:34:58 * bengee reads the adtf inclusion criteria

18:38:35 <libby> it's still vague bengee

18:39:05 <libby> basically you're fine if it's free/open source in some version and it uses/creates rdf or owl

18:39:20 <libby> note that these are not finalized yet. i should put a inote to that effect

18:40:09 * libby hurries to do that

18:40:22 <bengee> I was wondering if being an ADTF project could be auto-detected or something. The semanticweb.org site could be used to create/host adtf doap descriptions...

18:41:44 <bengee> I could prolly offer you to create a custom adtf-a-matic template there, too. would be happy to get some stuff in the store..

18:43:01 <libby> interesting bengee :)

18:43:17 <libby> all this needs more thought really ...we need to discuss it in our taskforce

18:47:16 <bengee> should be possible to query for adtf demos when the criteria were RDFy (e.g. "all doap:Projects with a doap:license of foo, and a download-page")

18:48:34 <libby> the aim is that we just pick the ones we think are suitable for the task force's collection, and then others can put them in a facetted browser or whatever

18:48:46 <libby> a subgoal being to persuade people to create doap files :)

18:50:41 <libby> hm, the booklet on http://esw.w3.org/topic/SemanticWebBestPracticesTaskForceOnApplicationsAndDemos could be hacked to put things in the wiki of course

18:51:13 * libby delighted you can put almost any old js crap in bookmarklets - didn;t realize how cool they were. like loops

18:52:12 <bengee> bookmarkcraps ;)

18:52:20 <JibberJim> bookcrapmarks!

18:52:41 <crschmidt> hey jim, how are you doing the FOAFBullitenboard thing?

18:52:54 <JibberJim> er, some regexps like you

18:53:14 <libby> and in fact, better still, we hack chris's firefox extenssions so a click on the button puts it in teh wiki for you

18:53:32 <crschmidt> hm, can you do that?

18:53:37 <crschmidt> Can javascript POST things?

18:53:41 <danbri> Here's an extension idea...

18:53:49 * libby goes to put together new mac mini

18:53:59 <libby> I hink you can more or less do what you want with extensions

18:54:18 <JibberJim> yes javascript can post things

18:54:19 <danbri> dredger... scoop up rss feeds and foaf files directly as you navigate, without asking the user about saving them

18:54:45 <danbri> can extensions communicate? it could feed into Sage, Piggybank, Libby's and Chris's stuff...

18:55:08 <crschmidt> Well, I personallly think piggybank would be much more useful if it could do that anyway

18:55:22 * crschmidt kind of dreads heading back into extensionland, javascript is scary

18:55:41 <kasei> heh

18:56:20 <danbri> do you know if the moz .js debugger makes much difference w.r.t. speed of writing extensions?

18:56:48 <JibberJim> speed of writing?

18:59:37 <danbri> pain of development, i mean

18:59:41 * danbri finds http://kb.mozillazine.org/Dev_:_Extensions

19:00:51 <crschmidt> danbri: well, not much to compare it against, is there? only firefox has extension, and it also always has the debugger...

19:02:03 <crschmidt> whoa, http://kb.mozillazine.org/Dev_:_Extensions is useful

19:06:11 <crschmidt> Didn't know it was possible to not have to restart firefox when testing extensions

19:06:35 <JibberJim> well if you like a debugger, venkman is pretty good.

19:06:37 <danbri> which bit explains that?

19:06:48 <danbri> libby was restarting it 3 times per edit, swearing as she went...

19:07:53 <crschmidt> "nglayout.debug.disable_xul_cache = true. Disables the XUL cache so that changes do not require a restart (more)."

19:08:23 <crschmidt> (you have to do some dicking with it first, setting the locations of files manually, can't just install a new one while it's running, but you can edit the files it uses)

19:13:03 * bengee wonders if there are any common FunctionalProperties other than foaf:primaryTopic..

19:13:26 <crschmidt> ^q select ?t where (?t rdf:type owl:FunctionalProperty)

19:13:27 <julie> irc:software, http://www.purl.org/net/ontology/beer.owl#hasAlcoholicContent, http://www.purl.org/net/ontology/beer.owl#hasOriginalWortContent, irc:topic, cyc2004:guid, irc:hostname, foaf:gender, foaf:primaryTopic, irc:username

19:13:43 <crschmidt> ... foaf:gender is a functionalproperty?

19:14:03 * bengee trying to avoid to smush on datatype props

19:15:07 <bengee> the beer ones are booleans, I guess?

19:16:46 <bengee> primaryTopic should do then for a first test..

19:17:10 <sh1m> sh1m is now known as sh1mmer

19:22:33 <crschmidt> I'm not sure what a FunctionalProperty is supposed to be, I guess

19:23:08 <crschmidt> Should be "A Subject has one and only one value for any property which is a FunctionalProperty", I guess/

19:25:21 <bengee> does julie have an "un-smusher" or are the subjects/objects overwritten?

19:25:58 <crschmidt> Overwritten

19:28:56 <danbri> dateOfBirth is functional

19:28:59 <bengee> so if you wantd to clean up the store, would you remove single triples then, or remove all triples from a given source, or is there any other common practice?

19:29:01 <danbri> for eg

19:29:11 <danbri> or the idea is anyway

19:29:16 <danbri> things that have at most one true value

19:29:33 * crschmidt nods.

19:29:45 <bengee> if dob were functional, why did I give up on my three-prop proposal then? ;)

19:30:00 <crschmidt> bengee: I haven't done anything with it yet. I've turned it over in my head a lot

19:30:07 <crschmidt> the only thing I've ever done so far is remove single triples

19:30:10 <bengee> I see

19:30:19 <crschmidt> But I'm thinking about something that would remove all triples into or out of a given subject

19:30:30 <crschmidt> ^q select ?p where (?p foaf:nick "danbri")

19:30:31 <julie> http://www.cs.umd.edu/~golbeck/daml/golbeckFOAF.rdf#danbri, http://kasei.us/about/foaf.xrdf#danbri

19:30:42 <crschmidt> ^q select ?p where (?p foaf:name "Dan Brickley")

19:30:45 <julie> (r1095214475r19), http://www.ideaspace.net/users/wkearney/foaf.xrdf#danbri, http://kasei.us/about/foaf.xrdf#danbri, (r1095208694r13)

19:30:59 <crschmidt> So I could so, for example, "delete http://www.ideaspace.net/users/wkearney/foaf.xrdf#danbri"

19:31:25 <crschmidt> and delete the fact that wkearney knows danbri, and all the things attached to that copy of danbri

19:31:38 * crschmidt wonders why wkearney didn't include a sha1sum for danbri in that file

19:33:04 * bengee wonders what's wrong with that rdf..

19:34:05 <crschmidt> which?

19:34:18 <bengee> that wkearney one

19:34:53 <crschmidt> nothing in particular, although it makes my path finder fail, because there are two danbris: one that only wkearney knows, and one that everyone else knows (which is the kasei.us uri)

19:35:18 <bengee> ah, 'k

19:35:53 <crschmidt> well, it would succeed eventually, but i ran it for 30 minutes and gave up, because it had to search all the paths from libby, which number in the thousands

19:35:54 <bengee> hm, yeah, removing unsmushable resource descriptions is a use case I haven't considered yet..

19:36:11 <crschmidt> the only problem with wkearney's is that it won't *ever* be smushable

19:36:20 <crschmidt> unless I add a triple manually... why didn't I think of that before?

19:36:40 <bengee> esp. as he assigned a URI to danbri ;)

19:37:36 <crschmidt> ^addturtle <http://www.ideaspace.net/users/wkearney/foaf.xrdf#danbri> foaf:mbox <mailto:danbri@w3.org>.

19:37:37 <julie> Model size increased by 1 to 2123720 via turtle statements.

19:37:40 <crschmidt> There we go

19:37:45 <crschmidt> now i can smush a danbri away! hooray!

19:37:51 <kasei> hahaha

19:37:56 <kasei> crschmidt++

19:38:18 * crschmidt is kind of evil, but that's okay

19:38:50 <crschmidt> ^q select ?p where (?p foaf:name "Dan Brickley")

19:38:50 <julie> (r1095214475r19), http://kasei.us/about/foaf.xrdf#danbri, (r1095208694r13)

19:38:56 <crschmidt> woot

19:39:08 <crschmidt> now i've gotta do it for those blank nodes too. that's more difficult

19:40:53 <crschmidt> kasei: hm, one of those is your fault

19:41:04 <crschmidt> [http://kasei.us/about/foaf.xrdf#simonprice], [http://xmlns.com/foaf/0.1/knows], (r1095214475r19)

19:41:44 <crschmidt> oh, hmph.

19:42:27 <crschmidt> old data, i think

19:42:28 <kasei> hrm... i'll look into cleaning my end up (including getting rid of the uri)

19:43:01 <crschmidt> I don't seem to see a simonprice knows danbri nodei n that file anymore

19:43:09 <kasei> neither do I

19:43:15 <crschmidt> oh, silly me

19:43:19 <crschmidt> it doesn't *have* to be in that file

19:43:31 <crschmidt> but simonprice-the-bnode became simonprice-the-kasei-uri

19:44:07 <crschmidt> yep, looks like that's what happened, and at some point, simon price had danbri listed with an mbox as a literal, rather than a resource

19:44:16 <crschmidt> (r1095214475r19), [http://xmlns.com/foaf/0.1/mbox], "mailto:danbri@w3.org" <-

19:44:22 <crschmidt> which, clearly, won't smush

19:46:10 <crschmidt> ^q select ?p where (?p foaf:name "Dan Brickley")

19:46:10 <julie> (r1095214475r19), (r1095208694r13)

19:46:32 <crschmidt> (slowest way ever of cleaning up a megatriple database)

19:47:09 <kasei> i don't know about that. you could be doing it without julie :)

19:47:19 <crschmidt> heh

19:47:24 <crschmidt> except i have nice query functions in my wrapper

19:47:32 <crschmidt> so, it wouldn't make much difference :)

19:47:57 <crschmidt> The primary reason for my wrapper is to make it so I can just m = get_model(), and not have to look up the Storage() init params, which I always forget

19:48:17 <kasei> me too.

19:48:33 <crschmidt> ^available http://www.digitalskunk.com/blog/

19:48:34 <julie> Query returned no results

19:48:47 <kasei> steve davie

19:49:05 <crschmidt> ^q select ?r where (?p foaf:homepage <http://www.digitalskunk.com/blog/>) (?p rdfs:seeAlso ?r)

19:49:14 <julie> Query returned no results

19:49:26 <kasei> ^name obigabu

19:49:27 <julie> Steve Davie

19:49:33 <crschmidt> hm.

19:49:54 <crschmidt> er. looking at the wrong person.

19:49:57 <kasei> that should totally be connected.

19:49:57 * crschmidt needs greg, not steve :)

19:50:01 <kasei> although there's no seeAlso

19:50:16 <crschmidt> oh, greg is you

19:50:40 <crschmidt> weird, the second bnode is pretty uninformative: must have picked it up somewhere and not spidered the seealsos or something

19:51:35 <crschmidt> ^q select ?r where (?p foaf:homepage <http://www.digitalskunk.com/blog/>) (?p rdfs:seeAlso ?r)

19:51:35 <julie> Query returned no results

19:51:44 <crschmidt> ^q select ?p where (?p foaf:name "Dan Brickley")

19:51:44 <julie> (r1095214475r19)

19:51:46 <crschmidt> there we go!

19:51:59 <kasei> hmm?

19:52:07 <crschmidt> only one danbri now :)

19:52:21 <kasei> ooh. right. nice.

19:52:27 <bengee> yay! on to the next name ;)

19:52:41 <kasei> only a few hundred thousand left.

19:53:18 <crschmidt> hey, there's not even 200,000 people!

19:53:23 * crschmidt gestures to his blog

19:53:42 <kasei> really?

19:53:43 <crschmidt> Total foaf:Persons: 129,932

19:54:15 <crschmidt> man, my recent flickr pictures are odd

19:54:38 <kasei> i guess my recent spidering got a bit out of hand.

19:54:58 <crschmidt> 1. local ice cream shop, 2. E&R cleaners truck, for some random reason, 3. deep fried green beans from lunch today, 4. jess at lunch, wearing the "there's no place like 127.0.0.1" shirt

19:55:20 <crschmidt> kasei: it's really easy to head overboard once you hit LJ

19:55:36 <crschmidt> There's a very good reason I limit my spider to only go out two levels

19:55:38 <kasei> yes it is

19:56:01 <kasei> i like having the firehose of data to play with, though :)

19:59:10 * bengee gives his FP smusher a try..

19:59:34 <crschmidt> bengee: so, are you just tossing older triples or something?

19:59:43 <bengee> hm, "merging 0 resources"

20:00:01 <bengee> I just make sure that nothing is smushed. no need for an undo, huh?

20:00:22 <crschmidt> I mean, you can't take two subjects and say they're the same... oh, I suppose you can take two objects and say they're the same

20:00:34 <crschmidt> hm - shouldn't foaf:based_near be an FP then?

20:00:56 <crschmidt> You can only be based_near one location at a time...

20:01:07 <kasei> no!

20:01:12 <bengee> nearestAirport, perhaps

20:02:04 <kasei> you can be near lots of things at the same time

20:02:16 <kasei> I would assume the spec says as much, although I'm not sure.

20:04:52 * bengee manually creates some primaryTopics for a resource..

20:08:55 * bengee re-smushes on a document describing two no ifp sharing libby bnodes..

20:09:34 <bengee> aha, "merging two resources"..

20:10:05 <crschmidt> I think foaf:knows should be an FP

20:10:06 <crschmidt> :)

20:10:13 <crschmidt> "I can only know one person, damnit!"

20:10:27 <crschmidt> (would make my model a lot smaller... paths easier to calculate...)

20:10:42 <JibberJim> as long as it's wn:beer

20:10:45 <bengee> guess that makes you a "poor lonesome OWLboy"..

20:11:38 <kasei> it would be a very tall, narrow graph

20:12:02 <JibberJim> hmm, very wide, very short graph here :-)

20:12:21 <kasei> heh

20:25:23 * bengee can't believe that the smusher works. not sure if it'll scale, though..

20:25:41 <crschmidt> pfft. scaling.

20:26:34 <bengee> hehe

20:27:51 <crschmidt> howdy zwnj/benham

20:31:49 <Mutiny> smusher?

20:32:02 <Mutiny> sounds interesting. :)

20:32:10 <crschmidt> .g rdf_smush

20:32:12 <zwnj> crschmidt: hi

20:32:22 <phenny> rdf_smush: sorry, no results were found.

20:32:26 <crschmidt> hm

20:32:52 <bengee> .g smushing

20:33:05 <phenny> smushing: http://rdfweb.org/topic/Smushing

20:33:51 <crschmidt> .g rdf-smush redland

20:33:55 <crschmidt> was what i was pointing towards

20:34:03 <bengee> ah

20:34:08 <phenny> rdf-smush redland: http://crschmidt.net/svn/rdfpython/trunk/rdf-smush.txt

20:34:33 <Mutiny> ahhhhh!

20:34:47 <Mutiny> i just had to write some code to do the same thing, interesting it's got a name. ;)

20:35:16 * crschmidt keeps meaning to write one in Python, just so he can tweak it, since he doesn't understand C

20:35:29 <crschmidt> all the hard work is in Redland stuff anyway, so I don't expect it'd be much slower

20:35:36 <Mutiny> just using InverseFunctionalProperties?

20:36:00 <crschmidt> yep

20:38:16 * danbri wonders if dave would be interested in bundling rdf-smush as a standard redland utility, so it could have script wrappers built w/ the other redland stuff

20:44:06 * libby watches 'hackers' with some hilarity

20:44:28 <crschmidt> hackers is wonderful :)

20:44:36 <libby> "use your best viruses to buy us some time!!!"

20:44:38 <crschmidt> (hilariously inaccurate, but still wonderful)

20:45:56 * danbri wires a spybot virus to libby's irc cyberinbox

20:46:32 <libby> damn you!!!!

20:49:34 <Mutiny> hack the planet! haaaack the plaaaaneeeeeet!

20:50:01 <libby> hacking makes lightning bounce from one machine to another - cool!

20:50:06 <JibberJim> hmm - http://rdf4food.asemantics.org/AccomoDation the "plan" link is a 404

20:50:20 <libby> yeah...I can't fix atm

20:51:22 <libby> heheh. just had the "hack the plaaaaneeettt!" moment

20:51:34 <crschmidt> They're Trashing our rights! Trashing! trashing!

20:52:38 <mattmcc> Heh. They ran that on one of the cable networks on Sunday.

20:52:46 <Mutiny> that was like angelina jolie's first movie, too.

20:52:56 <libby> they all look so young...

20:53:44 <Mutiny> this WAS 95 after all.

20:53:59 <crschmidt> hm, never got kasei's email on the list

20:54:14 <libby> dunno what http://imdb.com/name/nm0000498/ is doing with those plaits

20:54:22 <Mutiny> it'll be happy day when matthew lillard gets hit by a bus.

20:55:07 <libby> he was ok in scraem

20:55:35 <crschmidt> i liked cereal killer!

20:56:05 <Mutiny> he's definately not a versatile actor at all.

20:56:41 <mattmcc> What always seemed weird to me was Jonny Miller going from that to Trainspotting.

20:56:51 <Mutiny> i like the #1 thing under imdb's list for 'goofs' on Hackers.

20:56:51 <Mutiny> Goofs for

20:56:52 <Mutiny> Hackers (1995)

20:56:52 <Mutiny> * Factual errors: Generally ill-informed and ridiculous to the extreme regarding the capabilities and characteristics of computers, technology, and phone systems.

20:57:01 <libby> +1 mattmcc

20:57:07 <libby> zac fixed http://www.asemantics.com/n/images/planz.png

20:59:06 <crschmidt> "The game being played in the arcade is a high-quality prototype of the Playstation game "Wipeout" by Psygnosis. It is done on a high-end SGI server and allowed the development team to try out tracks and gameplay, before porting it to the Playstation. As a result, there are features and graphics in the movie that do not exist in the actual game, including the "high score smashing" sequence."

20:59:12 <crschmidt> Didn't know that

21:03:50 * dajobe returns from watching hackers, what a laugh

21:04:11 <crschmidt> have you people not seen it before?

21:05:28 <dajobe> I've forgotten it already

21:05:46 <mattmcc> Yeah, it had that effect on a lot of people.

21:05:58 <crschmidt> heh, heh

21:07:34 <zwnj> crschmidt: seems foaf-current.png doesn't work online

21:09:33 <crschmidt> zwnj: foaf-current.png isn't current

21:09:40 <crschmidt> hasn't been for quite a while

21:11:57 <dajobe> you can parse svg easier than in http://crschmidt.net/blog/archives/51/parsing-svg-metadata/

21:12:26 <dajobe> set parser feature scanForRDF to true

21:12:41 <crschmidt> ah

21:12:51 <crschmidt> I don't know how to set a parser feature

21:13:03 <crschmidt> is it just a string?

21:13:16 <dajobe> key: uri string, value string

21:13:30 <crschmidt> yeah, but I don't know what the uri I'm supposed to use is

21:13:36 <dajobe> true

21:13:49 <dajobe> I'm looking to see if I'd documented it, and no I didn't

21:14:48 <dajobe> set feature key: uri http://feature.librdf.org/raptor-scanForRDF value: 1

21:15:30 <crschmidt> asesome

21:15:32 <crschmidt> er

21:15:33 <crschmidt> awesome

21:15:55 <dajobe> if you read rapper -f help you can see what the others are

21:17:13 <crschmidt> does that work in non XML docs too?

21:17:24 <dajobe> no

21:17:32 <dajobe> I was thinking about adding a parser for that

21:18:04 <dajobe> to scrape things like CC metadata out of <!-- <rdf:RDF ... > -->

21:23:11 * crschmidt updates post to reflect the fact that Dave was way ahead of him

21:23:30 <dajobe> can't blame you for not knowing an undocumented feature

21:24:11 <crschmidt> well, now it's slightly more documented :)

21:27:50 * bengee looks for a better word for "un-smush"..

21:28:38 <crschmidt> dajobe: while we're talking documentation: q2 = RDF.Query("- - -", name="triples") is in the pydoc, but the "name" param doesn't seem to be in in the init function: is that supposed to be query_language, or is it a deprecated example?

21:29:37 <dajobe> ah, wrong example

21:29:50 <dajobe> it's query_language now

21:30:00 <crschmidt> is there a "triples" query_language anymore?

21:30:20 <dajobe> inside redland yes, but it's pretty useless and was just for testing things

21:30:52 <crschmidt> hm, q2 = RDF.Query("- - -", query_language="triples"), q2.execute(m) doesn't seem to return any results

21:31:36 * dajobe shrugs, must have rotted

21:31:43 * crschmidt nods

21:55:32 * bengee has a de-smusher :)

22:00:18 <kasei> bengee: what does that do?

22:02:36 <kasei> oh. he left.

22:12:50 <zwnj> is there any {orkut,360,etc}-to-foaf library around?

22:13:13 <danbri> orkut ppl were playing with one

22:13:20 <danbri> and there are various orkut scrapers/crawlers

22:13:31 <danbri> but nothing obvious to use right now for that purpose

22:13:46 <danbri> the foafnet list has some examples of what orkut were looking to expose

22:13:55 <danbri> i think they have their hands full currently re scalability

22:41:26 <zwnj> danbri: thanks

22:41:39 <zwnj> what about clients for blog/foaf/etc?

22:42:09 <zwnj> i mean a real application that also works offline


The IRC chat here was automatically logged without editing and contains content written by the chat participants identified by their IRC nick. No other identity is recorded.

Alternate versions: RDF Resource Description Framework Metadata and Text

Provided by Dave Beckett. Hosted by Useful Information Company.