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.