- From: Arnaud Le Hors <lehors@us.ibm.com>
- Date: Thu, 12 Feb 2015 07:21:56 -0800
- To: "henry.story@bblfish.net" <henry.story@bblfish.net>
- Cc: public-socialweb@w3.org
- Message-ID: <OF7B0BFF40.4EE21BDE-ON88257DEA.00541A97-88257DEA.00546773@us.ibm.com>
Henry,
I'm sorry you're getting mixed signals. I for one disagree with Harry's
unproven claim that addressing two deliverables with one spec would
require rechartering. So, I advise not to spend more time on discussing
whether a rechartering is necessary or not.
I think Sandro has it right. The assumption is that two protocols are
necessary. If it happens that we find out that one can do both so much the
better but we won't know that until we figure out what's needed for each
of them.
Best regards.
--
Arnaud Le Hors - Senior Technical Staff Member, Open Web Standards - IBM
Software Group
From: "henry.story@bblfish.net" <henry.story@bblfish.net>
To: Evan Prodromou <evan@e14n.com>
Cc: public-socialweb@w3.org
Date: 02/11/2015 09:49 PM
Subject: Re: 2 APIs and the charter
> On 12 Feb 2015, at 03:54, Evan Prodromou <evan@e14n.com> wrote:
>
> On 2015-02-11 08:53 PM, Sandro Hawke wrote:
>>
>> I agree with your reading of the charter, etc, but I think it still
makes sense to imagine two distinct APIs.
>> [...]
>>
> Sandro,
>
> Very well said.
>
> I think having only a client-to-server API is an interesting exercise
that doesn't scale well. It gets particularly tricky if you support
following. Either you have:
> • a polling mode where clients repeatedly fetch the feeds
of every person the user "follows" and merges them into a single "inbox"
feed on the client side, or
> • the client has to write every update to every
follower's server-side inbox feed each time the user updates.
> In either case, it gets really unwieldy at scales of dozens of
followers, much less the tens of thousands you see on a site like
identi.ca or the millions you see on a site like Twitter. Fan-out,
retries, and exponential backoff become pretty hard to manage from a
smartphone application.
>
> On top of that, you need to have a universal authentication system that
allows Alice, with an account on serverA, to write data as Alice on
serverB (and to read data, if you have any kind of privacy controls).
Probably client-side certs, I'd imagine from Henry's perspective, but
that's a hard sell.
>
> -Evan
That is an interesting interpretation of the charter, along with those by
Erik Wilde, and Sandro Hawke that preceeded. Here are some comments.
1) That LDP is mentioned in the « Federation Protocol » does not fit very
well with the above reading. I can see how one can use LDP to develop an
API for a « server » Actor to request to be updates about changes to a
resource on another machine, but that is an incredibly specific and
unusual application of LDP. It is much more likely that LDP would be used
for what the charter calls the « social API ». So that is just another
piece of evidence that the Charter is confusing.
Given these inconsistent readings of the charter, and the
inconsistencies in the charter, it seems to me that the charter cannot be
brandished as a unambigous guide how we must proceed, as it has been
recently.
2) Optimizations:
What is efficient will depend on the type of Social Web Server.
a) Personal Server:
If it is for example a piece of software running on a machine designed
for an individual/family such as the Freedom Box [1], then one server will
need to go and fetch the data for all its users in any case. Opening
thousand or 10 of thousand connections is totally feasible without memry
overload if you use the C select call [2] - which is how the crawlers
were written at AltaVista. The equivalent in Java is the NIO framework,
which is used by libraries such as Netty (the core of Jboss). And of
course modern functional languages such as Scala with Actor programming
frameworks such as http://akka.io make it much easier to program these
very efficiently. These are now well known to JavaScript programmers as
asychronouns frameworks. To sum up: a Freedbom Box should be able to open
10 thousand connections and only use up 4 threads.
Notice that here there is of course no reason why the iPhone client
should be making those connections, which would of course have it run out
of battery quite quickly. But by specifying an API as client/server in the
sense of a specification of the communication along the wire - it would
of course be the role of the Freedbom Box to fetch remote resources in the
background.
b) enterprise server: we can discuss the issues involved here
What the existence of a) indicates is that there should be an API that
covers all the user stories, and an optimisation API for larer structures,
and plain and simple optimisations. But if this is the case then the user
stories is not the place to distinguish the APIs.
3) This does not mean that a notification system would not be very useful
too (even for a FreedomBox), as a way of avoiding « client » polling (
where the « client ». can be the FreedomBox ) It is true that a
notification system will really only work well when the machine making the
request notification is always on - so I can see why one could think of it
as a « server » protocol.
4) For authentication and Web Access Control issues I don’t suppose the
group is about to build a new authentication protocol. That seems like it
should be the work of a separate group. We just have to assume we have it
available.
By the way X509 Client Certificates work just as well for « servers » as
for « clients ». In fact is is a lot easier to use authentication on the «
server » because there the developer has full access to all the features
of the TLS stack.
So in conclusion:
I don’t see that we really have a way from the charter to be able to
sort user stories into ones that would fit the « social API » and ones
that would fit « the federated api ». Apart from the inconsistencies in
the charter it seems that the second API is more of an optimisation API
which should not be visible from the user stories.
Also we need to find a way to use "client/server" in a way that does not
clash with most internet engineering tradition. What is needed is a word
for machines that are always on, and machines that are close to the human
actor, and that may easily be off for a while. Then we will find that all
our APIs ( if more than one is needed ) are client/server, but that some
APIs are for machines that are always on.
Henry
[1] http://en.wikipedia.org/wiki/FreedomBox
and a short video by Eben Moglen author of the GNU public licence
http://vimeo.com/20034456
[2] http://linux.die.net/man/2/select
Social Web Architect
http://bblfish.net/
Received on Thursday, 12 February 2015 15:23:19 UTC