Hi! it's almost April so since we update our spec (which is our main product) in April and in October, let's start rounding up what we want to change in the spec this time. here are a few ideas:
1) - format of the lrdd link:
right now we do:
<Link rel="remoteStorage" template="https://example.com/storage/{category}/" auth="https://example.com/auth.html" api="CouchDB" />
but it has been brought to our attention that inventing link attributes like that is not really allowed. Also i think we don't need the '/{category}/' in the template, i think we can dictate that the template should always end in that, so that we don't have to specify it. so then I think it would be more correct to say:
<resource class="remoteStorage">
<Link rel="version" href="https://www.w3.org/community/unhosted/wiki/RemoteStorage#CouchDB-12.04" />
<Link rel="storage" href="https://example.com/storage" />
<Link rel="auth" href="https://example.com/auth.html" />
</resource>
notice how the string 'CouchDB' became a link that points inside the spec doc by calling it 'version' instead of 'api'. this way, we're also documenting authoratively what we mean by this webfinger entry, and we're making sure we can version it. makes this all a bit more sensible i think. comments welcome!
2) - read-only access
this was an idea from Garret. basically in OAuth, the scope would specify whether it's either read-only or read-write access that we're requesting (see also point 9 about the syntax of this). i think that's a nice addition and should be not too hard to implement for people. comments welcome!
3) - per-category data formats. Right now we're doing this here https://github.com/unhosted/website/wiki/categories we should move this to the w3c wiki, and mention it in the spec. So far the spec only prescribes how providers should behave. i think we can add a paragraph stating that RPs are expected to obey the per-category data format specs. comments welcome!
4) - adding an ACLs. i'm against this. we already have the 'public' category for allowing other people to read directly from your storage without your mediation. i see no need for allowing other people to write to it. the only thing you can do with that is either sending a message to someone (which is a separate issue, see below), and "writing on someone's wall". if someone wants to write, they can write on their own wall. they can then message me, and my friends saying 'hey, look, i wrote this'. but there's no need to use my storage for your data. and if we keep it this way, then everything is simpler. it's clear who should pay for disk quota, it's clear who is responsible for publishing something, it's clear who is authorative to say who can read something, and it's clear who is authoritive to delete something. comments welcome!
5) - 'inbox'. i'm not sure about this one. i'm certain we need messaging (again, see below). but if the recipient is not online, then the message can wait on the sender's side. that's what skype does. the message is delivered as soon as both contacts coincide online at the same time. a nice side-effect of this is that when the message is delivered, the recipient can reply in real-time (because you know the sender is online at the moment the message is delivered). i guess it depends on the type of application. if we see there is a concrete need for this in concrete applications, then we can add it in the next version, but i wouldn't add it in this one. comments welcome!
6) messaging - i propose adding xmpp-over-websockets. what i'm not sure about is whether that would then require all remoteStorage providers to hire an erlang engineer. also, i think we can do the same thing as with WebDAV, just say that it's one of the options for messaging, and allow multiple ones as long as it's reasonable to ask a client-side app to implement all of them. i'll write a separate thread about this.
7) fakefinger - we have been using fakefinger on Libre Docs. It's basically just unhosted's own central user database where /if/ you don't have webfinger (this is only a fallback of last resort), you create a record pointing to your remoteStorage, on the basis of BrowserID. I think it's time to write down what we're doing there. we could also add other alternatives to webfinger, like swd and xmpp disco and maybe dev-identity will propose a 'persona profile' standard at some point, although i doubt whether that's actually useful for anything. people should just implement webfinger, always. i'll write a separte thread about this.
I’m highly _for_ an inbox.
"What Skype does" is really annoying. People shouldn’t be pressed to
be online at the same time, forcing real-time communication as a
supposed nice side-effect.
A concrete need _is_ messaging. The spec will be valid until October,
in the meantime we will rely either on
* temporary hubs on the app side (like for Libre Docs) – which is not
purely client-side
* people being online at the same time, which is simply not acceptable
If we wait for it until the next version, communication apps are
effectively blocked for now.
So, in your mind...do you think that messages are generic ? and so notifications, messages, & chat, basically all forms could share the same low level service ? That form should be XMPP, as an extensible protocol, in my opinion...it's decentralized, and the idea of XMPP on top of WebSockets is really the future movement.
If we could integrate this with remote storage, that would be
beautiful. Yes email works, but we could do better, right?
Cheers,
Michael
I agree messaging is very important if we want to make a creative
non-trivial app, so here's a promising messaging protocol that I
recently stumbled upon: http://about.psyc.eu/.
If we could integrate this with remote storage, that would be
beautiful. Yes email works, but we could do better, right?
Cheers,
Michael
guys here have some nice web client and xmpp component both with coffeescript node etc. component uses pubsub for creating personal and topic channels, i've also seen some geo nodes under development etc. =)
I agree messaging is very important if we want to make a creative
non-trivial app, so here's a promising messaging protocol that I
recently stumbled upon: http://about.psyc.eu/.
If we could integrate this with remote storage, that would be
beautiful. Yes email works, but we could do better, right?
- listing category names
- listing category contents
- per-category subfolders under 'public'
and also nice to have:
- for symmetry and also usefulness we might as well add 'folders'
inside the categories whose content you can list.
- read-only access to categories
to indicate a storage implements these new possibilities, we can
announce api types 'simple-12.04', 'webdav-12.04', 'couchdb-12.04'.
and OAuth scopes would then be ':r', to read all categories, ':rw' to
read/write all categories, and then per-category '<category>:r',
'<category>:rw'.
and then '<category>:rw' would be needed to write to public/<category>.
the api of remoteStorage.js would then also either get extra methods
get/set/remove-PublicItem, or and extra parameter which may default to
'private'. we'll see.
I would also rewrite the spec into two parts:
- one generic one describing Personal Data Services in general, and
our use of webfinger/swd and OAuth2.
- one describing the actual functionality of the storage, and its
possible REST APIs
Then we can later write a 'sockethub' spec that reuses the PDS spec,
and is just another personal data service that an unhosted web app can
discover and connect to.
is that ok for everyone?
Cheers,
Michiel
You said:
- per-category subfolders under 'public'
When we talked I thought we agreed on the other way around – »public«
subfolders per category
Also, minor
'simple-12.04', 'webdav-12.04', 'couchdb-12.04'.
Should be 2012.04, it’s already hard to understand with Ubuntu version numbers.
OAuth specifies space-separated, we have just been doing it wrong.
>
> You said:
> - per-category subfolders under 'public'
> When we talked I thought we agreed on the other way around – »public«
> subfolders per category
Yeah but now i'm not so sure if it's necessary or even beneficial to
throw the whole folder structure around. it's also easier to implement
the way it is now, with only one place where public access is allowed
(one policy exception), and not unlimited numbers of small places
(lots of small policy exceptions). also, the public data will in
general not be human-readable so i think if you make a file manager
(as an unhosted app or hosted on the storage, like ownCloud has) then
it might be ok to have one special 'public' folder instead of having
them show up everywhere and having to click through 'private' to get
to the data you're looking for.
>
> Also, minor
> 'simple-12.04', 'webdav-12.04', 'couchdb-12.04'.
> Should be 2012.04, it’s already hard to understand with Ubuntu version numbers.
ok we can do that. actually i'm thinking now whether we should use a
version number instead because with the modular spec we won't have to
do scheduled updates anymore. we could also use -0.4 because it's the
4th iteration of the spec, and then plan to leave it at this version
forever, unless we find some serious problem (like now, the fact that
you can't write a migration app and that you can't protect one
category of public items from other categories)
Ok.
>>
>> You said:
>> - per-category subfolders under 'public'
>> When we talked I thought we agreed on the other way around – »public«
>> subfolders per category
>
> Yeah but now i'm not so sure if it's necessary or even beneficial to
> throw the whole folder structure around. it's also easier to implement
> the way it is now, with only one place where public access is allowed
> (one policy exception), and not unlimited numbers of small places
> (lots of small policy exceptions). also, the public data will in
> general not be human-readable so i think if you make a file manager
> (as an unhosted app or hosted on the storage, like ownCloud has) then
> it might be ok to have one special 'public' folder instead of having
> them show up everywhere and having to click through 'private' to get
> to the data you're looking for.
Private stuff would be directly in the category folder, and »public«
would be a special folder inside the category. I agree that having
both a »public« and »private« folder inside each category would be
stupid.
From a mental model it makes more sense to have the public stuff be
part of the category, because being »public« doesn’t say anything
about the document. It’s nonsensical as a group, next to the other
topic-based categories. We should correct it now while we still can.
>
>>
>> Also, minor
>> 'simple-12.04', 'webdav-12.04', 'couchdb-12.04'.
>> Should be 2012.04, it’s already hard to understand with Ubuntu version numbers.
>
> ok we can do that. actually i'm thinking now whether we should use a
> version number instead because with the modular spec we won't have to
> do scheduled updates anymore. we could also use -0.4 because it's the
> 4th iteration of the spec, and then plan to leave it at this version
> forever, unless we find some serious problem (like now, the fact that
> you can't write a migration app and that you can't protect one
> category of public items from other categories)
Yeah, whatever is best there. The version numbers of the APIs won’t
increase with the remoteStorage / remoteStorage.js versions, right?