1 00:00:00,000 --> 00:00:04,064 [http://altruists.org/ff404] Right, this is going to be a very highly compressed talk; 2 00:00:04,605 --> 00:00:06,907 the last time I gave this talk it was 90 minutes! 3 00:00:09,478 --> 00:00:12,811 (I was giving it to an audience who were not sure about what is XML.) 4 00:00:14,535 --> 00:00:19,251 OK, I'm going to give you the 'big picture' first of all: 5 00:00:19,310 --> 00:00:20,053 The 'big picture' is... 6 00:00:20,554 --> 00:00:26,054 Social software, but not in one place with all the data. 7 00:00:26,205 --> 00:00:31,627 You have your data on your server, with your public/private keypair... 8 00:00:32,000 --> 00:00:38,854 so you can contact me directly, so we could make a decentralised network of XML machines. 9 00:00:39,000 --> 00:00:40,206 That's what I'm making here. 10 00:00:42,304 --> 00:00:45,854 And I want to say, this is not distributed programming. 11 00:00:45,920 --> 00:00:50,256 This is not a whole load of machines which are all operating one program... 12 00:00:50,314 --> 00:00:53,359 because your machine is doing your things... 13 00:00:53,430 --> 00:00:55,706 with your software on it, with your data, with your friends. 14 00:00:55,789 --> 00:01:03,833 What is F2F the architecture...? It's P2P plus keys, so you know who is contacting you. 15 00:01:04,196 --> 00:01:07,160 The identity is based on strong cryptography. 16 00:01:07,239 --> 00:01:10,634 So, is the web distributed programming? 17 00:01:10,720 --> 00:01:13,199 Well, each website is doing its own thing... 18 00:01:13,274 --> 00:01:16,691 but what's it giving you?... You're just getting a page. 19 00:01:16,751 --> 00:01:19,843 That's a piece of text, that's not good for semantic web. 20 00:01:19,897 --> 00:01:24,234 That's not intended to program, that's not a two way thing. 21 00:01:24,287 --> 00:01:25,612 It's a bit of a stretch. 22 00:01:25,658 --> 00:01:27,236 It's like a dumb terminal. 23 00:01:27,318 --> 00:01:31,770 So, clients are sending data, we've done this. 24 00:01:31,844 --> 00:01:34,591 You go to Google, you're making a POST request or ... 25 00:01:34,352 --> 00:01:37,254 you're making a GET request, but it's a pretty dumb request. 26 00:01:37,338 --> 00:01:41,944 Google is doing some clever things, but you don't see that... 27 00:01:42,047 --> 00:01:44,000 you just get a piece of text back again. 28 00:01:45,267 --> 00:01:48,734 So, look at that in terms of programming... 29 00:01:48,780 --> 00:01:51,761 Then, OK, I don't have a mouse, but you can see... 30 00:01:51,839 --> 00:01:55,377 we've got code, which we know, we write programs, 31 00:01:55,454 --> 00:01:58,096 and arguments which are untrusted... 32 00:01:58,097 --> 00:02:03,097 that's the data which are passed to the program. 33 00:02:04,110 --> 00:02:08,412 By design, you don't want people writing code and running it on your machine, do you...? 34 00:02:08,473 --> 00:02:12,194 Well, if you know who they are, you might want that. 35 00:02:12,260 --> 00:02:17,532 So, this is normal programming, it separates out arguments from code. 36 00:02:17,614 --> 00:02:22,184 I'm going to say, if I'm going to send something to somebody... 37 00:02:22,261 --> 00:02:23,310 I might want to say, "OK, here's the data." 38 00:02:23,711 --> 00:02:27,811 I might want to say, "I can't access the data, but this is how you get the data... 39 00:02:27,872 --> 00:02:30,544 because you've got permissions". 40 00:02:30,628 --> 00:02:36,563 So data is no longer separate from code. It doesn't have to be. 41 00:02:36,645 --> 00:02:39,250 They have a common format, it's called XML. 42 00:02:39,698 --> 00:02:44,334 So what is running on these machines is basically an XML machine. 43 00:02:44,428 --> 00:02:49,270 It takes input XML, outputs XML so you can network them together. 44 00:02:49,969 --> 00:02:52,800 So a site can dynamically script another site. 45 00:02:53,112 --> 00:02:58,612 We're going beyond "Oh, I'm going here, I'm getting a piece of HTML, I'm bringing it back." 46 00:02:59,074 --> 00:03:03,074 You can chain the requests between the sites. 47 00:03:03,297 --> 00:03:04,628 So, how to program it? 48 00:03:05,194 --> 00:03:10,553 There is one XML item, with a URI that identifies it uniquely. 49 00:03:10,996 --> 00:03:14,460 So, the virtual machine says... 50 00:03:14,850 --> 00:03:16,704 "OK, I can process that, here's some XML as a result". 51 00:03:16,810 --> 00:03:19,472 Whether it crashes or whatever, it only gives XML... 52 00:03:19,571 --> 00:03:22,227 because the output of one is the input of another. 53 00:03:22,313 --> 00:03:24,465 I wasn't sure who knows XSLT... 54 00:03:24,546 --> 00:03:28,977 but XSLT is a W3C standard language from a long time ago... 55 00:03:29,061 --> 00:03:33,122 for transforming an XML document into another XML document. 56 00:03:33,176 --> 00:03:34,703 It is side-effect free. 57 00:03:34,960 --> 00:03:36,575 I will show you the Hello-World service, 58 00:03:36,651 --> 00:03:38,934 So, we have a Hello-World identifier, 59 00:03:39,017 --> 00:03:42,265 the server says "OK, Ja, das kann ich machen"... 60 00:03:42,352 --> 00:03:46,202 so it locates that as an XSLT transform... 61 00:03:46,403 --> 00:03:48,989 So it goes through the script, that's the output. 62 00:03:49,067 --> 00:03:55,505 That's how you make a function call in an ordinary language... 63 00:03:55,566 --> 00:04:00,025 and you're passing in parameters as static data. 64 00:04:00,292 --> 00:04:02,264 You know how that works. 65 00:04:02,565 --> 00:04:06,248 A more transparent alternative is to use XML. 66 00:04:06,552 --> 00:04:08,015 So, why is that helpful?... 67 00:04:08,342 --> 00:04:12,835 Well, the XML input document is the request. 68 00:04:13,162 --> 00:04:17,795 If you can see how that's going to work, that's how to program in this language. 69 00:04:18,099 --> 00:04:21,893 When you're nesting calls - we've written programming languages like this - ... 70 00:04:22,239 --> 00:04:25,073 the deeper ones get transformed first. 71 00:04:25,379 --> 00:04:30,239 So, you're passing XML, by default - you can change it - but by default... 72 00:04:30,561 --> 00:04:33,074 the deeper service requests are processed first. 73 00:04:33,438 --> 00:04:36,707 So that gets replaced with the output of the service. 74 00:04:37,634 --> 00:04:41,125 So when the outside one has only got static content... 75 00:04:41,426 --> 00:04:45,071 that becomes the deepest servicereq, that gets processed. 76 00:04:49,936 --> 00:04:58,404 In an XML pipeline, the output of one transform becomes the input of the next transform. 77 00:04:58,517 --> 00:05:04,864 So by specifying any XML document, you can do any XML pipelining. 78 00:05:04,935 --> 00:05:12,695 So, the last piece to add because XSLT is transforming one XML document into another XML document... 79 00:05:12,761 --> 00:05:13,874 it's side effect free. 80 00:05:13,975 --> 00:05:16,496 But hey, we want to write some data, I want to read some data... 81 00:05:16,556 --> 00:05:19,659 I want to open an HTTP connection and secure it... 82 00:05:19,753 --> 00:05:24,498 so we have some services which are hard coded, so it's not using XSLT. 83 00:05:24,608 --> 00:05:28,455 That adds the bits which XSLT was missing. 84 00:05:28,544 --> 00:05:30,004 That's the summary:- 85 00:05:30,110 --> 00:05:33,474 Your F2F server is an XML virtual machine... 86 00:05:33,573 --> 00:05:36,069 that forms a decentralised network with your data... 87 00:05:36,164 --> 00:05:40,801 and networks only with your friends and you can do any XML pipelining. 88 00:05:40,913 --> 00:05:47,997 The base language is XML and you can write software for it. 89 00:05:56,974 --> 00:06:01,871 I'll have to look at the recording and think about this again. 90 00:06:01,962 --> 00:06:07,416 That was pretty quick! 91 00:06:07,937 --> 00:06:15,246 Thank you very much. I hope you enjoyed it.