W3C home > Mailing lists > Public > public-socialweb@w3.org > January 2015

Re: API thoughts

From: ☮ elf Pavlik ☮ <perpetual-tripper@wwelves.org>
Date: Fri, 30 Jan 2015 13:06:59 +0100
Message-ID: <54CB73E3.8060305@wwelves.org>
To: Amy G <amy@rhiaro.co.uk>, James M Snell <jasnell@gmail.com>
CC: Sandro Hawke <sandro@w3.org>, "public-socialweb@w3.org" <public-socialweb@w3.org>
I started capturing things on our wiki

I also hope we can put this topic on an agenda for our next face to face!

On 01/29/2015 01:27 AM, Amy G wrote:
> Hi all,
> My perspective on this is to some degree a combination of what James and
> Sandro have described, with an extra layer. My main concern is that
> discussion orientates around 'real people' interacting on the web via their
> online presence. It's not usually that straightforward. I'm not sure if
> this is directly relevant to a SocialAPI, but I think it might be worth
> discussing in more detail. My instinct tells me it would be useful for
> machines to be able to understand, or at least better cope with, some more
> nuanced aspects of human identity behaviour (as people are going to
> circumvent real name policies etc regardless of what the t&c say), but I
> definitely don't have all the answers or necessarily a good description of
> the problem. It may turn out that this is just overcomplication.
> People organise their online identities in different ways. James is happy
> to map "jasnell@us.ibm.com", "jasnell@gmail.com" and "
> http://www.twitter.com/jasnell" to himself, and perhaps just uses different
> services, or different accounts on the same service, to separate (eg) work
> vs personal. The consequences of context collapse may be minimal - eg.
> someone searching "James Snell IBM" and finding a personal twitter account:
> no big deal.
> Imagine Bob, a software engineer by day. He too, has "bob@bobswork.com", "
> bob@gmail.com", "http://www.twitter.com/bob" and "
> http://www.twitter.com/therealbob" (the latter for more intimate personal
> tweets). Bob writes and performs original music in his spare time, under
> the stage name "Joe". "Joe" has a YouTube account, "http://youtube.com/joe",
> with a large following of fans. His fans follow him on twitter at "
> http://twitter.com/joe" and read his blog at "http://joe.tumblr.com". When
> Bob is "Joe", he exaggerates some of his attributes, omits some, and
> fabricates others.
> So Bob has multiple accounts on different services, but he wouldn't want -
> or need - to map them all to Bob.
> For this kind of thing, I think it's important to add an extra layer to the
> 'identity stack' and consider Personas as first-class citizens of the web.
> Thus we have:
> Bob the 'real person' - an Agent.
> Bob-work - a Persona.
> Bob-personal - a Persona.
> Joe - a Persona.
> Accounts are held by Personas, and a Persona can hold many Accounts within
> and across services as necessary.
> A Persona may or may not be traceable to an Agent. Bob may be happy to
> aggregate Bob-work and Bob-personal, but wants to keep Joe completely out
> of the mix. Bob has no need to connect Joe to his 'real world' self; Joe
> doesn't need a bank account or a passport or to get married. If Joe gets
> approached by a record label, this might change but for now, as far as
> online interactions go, Bob != Joe. Bob-personal may even follow Joe on
> twitter, as if a fan. And the last thing we want is some software to infer
> Bob is Joe, without Bob's consent.
> People have many reasons for creating distinct and separate, and sometimes
> well-developed, versions of themselves online, whether to construct a
> humourous character with the help of their friends, to explore a side of
> themselves they can't express IRL, to scam people out of money/affection,
> to interact with a very specific community, due to vaguely held notions of
> privacy-protection.. and so on.
> The full model is:
> *Agent*: an abstract concept - I just prefer this term, but I think it's
> similar to James' Identity - for organisations, groups, bots, etc as well
> as people; specifically some entity with agency that can be tracked to the
> 'real world'.
> *Persona*: also an abstract concept - some version or subset of an Agent (
> *not* a subclass).
> *Account*: As associated with a particular service (as Sandro described).
> *Profile*: A document describing the holder of an Account and/or
> information about the Account (also as Sandro described). I agree that the
> identifier for the account is probably the URL for the profile. Which in
> the case of social networks tends to be a combination of the domain of the
> service hosting the account, and a user name (http://username.tumblr.com or
> http://twitter.com/username).
> A link between an Agent and a Persona is *optional*, but could be
> one-to-one, one-to-many, many-to-one or many-to-many. And a Persona can
> hold many Accounts. Each Account has a Profile.
> Explicit links between Agents and Personas could be necessary for some
> activites, eg. to collect your Google Adsense revenue, Google needs to know
> your 'real world' bank details, or when you invite someone to stay on
> Couchsurfing they need to know they can meet you face to face and have your
> address.
> I guess my point is that social software can't assume the same things about
> an online Persona as about a 'real world' person (Agent). Whether this
> would need accounting for, or how, in a social API I'm not totally sure
> though.
> Amy
> On 28 January 2015 at 20:54, James M Snell <jasnell@gmail.com> wrote:
>> On Wed, Jan 28, 2015 at 11:02 AM, Sandro Hawke <sandro@w3.org> wrote:
>>> On 01/28/2015 12:28 PM, James M Snell wrote:
>>>> Some thoughts on the Social API...
>>>> At the core, the majority of the social APIs reviewed reduce down to a
>>>> handful of relatively simple concepts. Let me see if I can effectively
>>>> classify them.
>>>> 1. We have any number of Social Artifacts. These are distinct
>>>> resources that represent various kinds of Things: People, Groups,
>>>> Organizations, Various kinds of content, Responses of various types,
>>>> etc. If you look at the Activity Streams Vocabulary, you can see that
>>>> we already have many (if not most) of these Artifacts already
>>>> identified.
>>> sounds reasonable
>> No one has ever accused me of being "reasonable". I'll have to try
>> harder next time ;-)
>>>> 2. There are a couple of specific Social Artifact that are considered
>>>> central to social systems: that of an Identity and a Profile. The
>>>> Identity represents the authenticated individual. The Profile
>>>> represents a description of the Individual. Secondary to the Identity
>>>> is the Persona. A Persona is some scoped aspect of the Identity. For
>>>> example, "jasnell@us.ibm.com" represents one of my Persona's.
>>>> "jasnell@gmail.com" represents another, as does
>>>> "http://www.twitter.com/jasnell". These are separate Personas mapped
>>>> to the same Identity. A Profile can describe an Identity or a Persona.
>>>> Persona's are themselves a type of Identity.
>>> I agree with the basic distinctions you're making, but...
>>> I'd frame it like this: there are people and accounts.   In normal
>> usage, we
>>> often assume a 1-1 relationship between people and accounts, and that's
>> how
>>> most systems are designed to work.   In practice, however, people
>> sometimes
>>> have multiple accounts and occasionally multiple people share one
>> account.
>>> (In some systems, one or both of those is against the Terms-of-Service,
>> but
>>> I think we'd agree it still happens.)
>>> A profile is the visible-to-others data about an account.
>> Agreed. I purposefully drew out the larger distinction between
>> Identity/Persona/Profile as a way of framing the discussion. I don't
>> like just calling it "people" and "accounts" because we may be dealing
>> with non-rational entities as well. There are many possible actors
>> that can play.
>>> In general, computers probably should just be thinking about accounts,
>> not
>>> people.  When they start to connect up the different accounts that people
>>> use, and make inferences about the people behind those accounts, they
>> often
>>> do the wrong thing, because those accounts are often separated for
>> reasons
>>> that are too subtle to be well-modeled by the computer.   (This is the
>>> account I don't want my boss to know about, this is the account I don't
>> want
>>> my kids/parents to know about, etc....)  There may be times where for
>>> specific reasons it makes sense to connect accounts, though.
>>> If you want to model people (what you're calling "Identity"), as opposed
>> to
>>> just using accounts, I'd like some very compelling use cases.
>> The key case here is that there is a solid and obvious trend towards
>> linking multiple accounts together. For instance, when I create an
>> account in one system, it may ask me to link my social service
>> accounts from Facebook, Twitter, Github, wherever. These are separate
>> Persona's that I, as a user, am being asked to associate with one
>> another. It's my choice to do so. The "Identity" is more of an
>> abstract concept in this case... a linking concept that ties the
>> various Personas together. It does not need to be explicitly modeled
>> in the software but it still exists in the conceptual model.
>>>> We can formalize this
>>>> using:
>>>>    :Identity a owl:Class .
>>>>    :Persona a owl:Class ;
>>>>      rdfs:subClassOf :Identity .
>>>>    :Profile a owl:Class .
>>>>    :hasPersona a owl:ObjectProperty ;
>>>>      rdfs:domain :Identity ;
>>>>      rdfs:range :Persona .
>>>>    :describes a owl:ObjectProperty ;
>>>>      rdfs:domain :Profile ;
>>>>      rdfs:range :Identity ;
>>>>      owl:inverseOf :describedBy .
>>>>    :describedBy a owl:ObjectProperty ;
>>>>      rdfs:domain :Identity ;
>>>>      rdfs:range :Profile ;
>>>>      owl:inverseOf :describes .
>>> I kind of like the trick of having the identifier for the account (aka
>>> persona) also be the URL for the profile.  I'd also make that the root
>> URL
>>> for the user's webspace.   EG http://tantek.com/  or
>>> http://sandhawke.livejournal.com/
>>> I know some people don't like that, though, so maybe we can't collapse
>> the
>>> three.    Still, it's painful to have the identifier for the
>> account/persona
>>> not be either of those two URLs.    If it's not one of those, what is it,
>>> and how can we make sure people understand it and use it correctly?
>> I agree that it would be ideal to collapse these but I don't believe
>> we can get away with it entirely. For instance, within IBM we have a
>> corporate "Intranet ID" which is essentially our work email addresses.
>> We use these ID's to log in to various services internally, including
>> our internal deployment of our Connections product. We have a couple
>> of different systems that provide a Profile that describes an
>> individual. The Connections Profile is distinct from our Corporate
>> Employee Directory profile although there is a trend towards combining
>> the two. In this case, the two profiles have distinct URL identifiers
>> separate from our "Intranet ID" identifier.
>> Using the rough sketch model I describe above, an instance of this
>> would look like:
>> <mailto:jasnell@us.ibm.com> a :Identity, :Persona ;
>>   describedBy <http://directory.example.org/?id=jasnell@us.ibm.com>,
>>           <http://connections.example.org/profiles?id=abc123> .
>>  <http://directory.example.org/?id=jasnell@us.ibm.com> a :Profile ;
>>   describes <mailto:jasnell@us.ibm.com> .
>> <http://connections.example.org/profiles?id=abc123> a :Profile ;
>>   describes <mailto:jasnell@us.ibm.com> .
>> Now again, this is just a rough sketch model to help frame the
>> conversation. I'm not arguing that this is how we have to model the
>> API... only that these are the conceptual elements we need to be
>> thinking about.
>>> Maybe this is out-of-scope, but it's hard to think about a social API
>>> without some of these notions.
>>>> 3. The various kinds of Actor's we have defined as part of the
>>>> Activity Streams Vocabulary are all types of Identities.
>>> Link?    None of the occurrences of the word "actor" at
>>> http://www.w3.org/TR/2014/WD-activitystreams-vocabulary-20141023/ seem
>>> relevant.
>> That draft is out of date. Hopefully the updated draft will post
>> tomorrow. Until then, look here:
>> http://jasnell.github.io/w3c-socialwg-activitystreams/activitystreams2-vocabulary.html
>> .
>> Note also, in the rough sketch model I outlined, :Persona is a
>> subclass of :Identity. When I say "Identity" I mean to cover what you
>> are calling accounts as well.
>>>> 4. All of the other Social Artifacts are owned by an Identity.
>>> -1    Everything needs to be associated with accounts ("personas"), not
>>> people ("Identity").  Otherwise you quickly end up with things associated
>>> with the wrong account, and then my personal work ends up owned by my
>>> employer, etc.
>> See previous comment :-)
>>>> 5. All Social Artifacts can be organized into Collections.
>>>> 6. Collections are themselves a type of Social Artifact.
>>> Not sure what that means.   Too vague.    But sure....
>> Consider a photo album. The album is a collection composed of
>> individual artifacts but can itself be viewed as an Artifact. It can
>> be shared, liked, commented on, etc.
>>>> 7. Identity, Persona and Profile are all types of Social Artifacts
>>>> that can be owned by an Identity (an Identity can either own itself or
>>>> be owned by another Identity).
>>>> Given these presumptions, the Social API needs to provide a means of
>>>> discovering basic information about an Identity, including:
>>>> A. Discovery of any Persona's associated with the Identity
>>>> B. Discovery of any Profile's describing the Identity
>>>> C. Discovery of any Social Artifacts owned by the Identity
>>> (again, let's stay away from Identity)
>>>> Further, the Social API ought to allow the owner of a social artifact
>> to:
>>>> D. Create, Modify or Delete the Artifact
>>>> E. Permit other Identities to View the Artifact
>>> accounts.    as your boss, I'm likely to grant access to certain files to
>>> your employee account, not your personal account which I know you
>> sometimes
>>> like your kids use.
>>> etc....     (I'll ignore this issue for the rest of this email)
>>>> F. Permit other Identities to Create, Modify or Delete the Artifact
>>> It's a bit radical, but I love the POSSE idea that you only create or
>> modify
>>> things in your own space.   It simplifies some of this quite a bit
>> (although
>>> it brings up other complications).
>> I agree that POSSE is good but it does not reflect the reality of many
>> existing social systems. Take Facebook, for example: when you post,
>> are you posting to your own space or to a shared space? Likewise with
>> Twitter, Github, Connections, etc. I have no problem with supporting
>> POSSE in general but it cannot be the only point of view we take.
>>>> G. Permit any Identity to Perform Actions relative to the Artifact
>>>> (Like, Unlike, Share, Comment, Annotate, etc)
>>> Are those "actions" any different from creating new Artifacts?
>> Not likely.
>>>> H. Provide a means of recording which Actions have been performed
>>>> relative to an Artifact.
>>>> There are at least two key flows to consider:
>>>> 1. I have an Identity, I need to discover information about this
>>>> Identity, potentially including what Artifacts are owned by this
>>>> Identity and what Actions I can take on those Artifacts. (e.g. is
>>>> "acct:joe@example.org" the same as "http://example.org/joe" ? Does
>>>> "joe" have a blog? Can I comment on those blog entries? etc)
>>>> 2. I have an Artifact, I need to discover what Identity owns this
>>>> artifact and what Actions I can take on the Artifact. (e.g. can I
>>>> "Like" it? can I "Share" it? can I "Comment" on it? etc)
>>> Thinking of these as just data queries and data create/update works
>> pretty
>>> well for me.
>> +1
>> - James
>>>> >From here it should be straight forward to construct an API. I'll post
>>>> a few thoughts on that a bit later on.
>>> I love how the mail system still inserts the ">" before your line
>> starting
>>> "From", because of the how poorly the mbox format was defined ~35 years
>> ago
>>> (as I recall -- not going to get distracted by looking it up).
>>>         -- Sandro
>>>> - James

Received on Friday, 30 January 2015 12:07:31 UTC

This archive was generated by hypermail 2.3.1 : Thursday, 8 December 2016 15:48:20 UTC