#social 2017-05-14

2017-05-14 UTC
tantek, JanKusanagi and tcit joined the channel
#
sandro
ben_thatmust, tantek, I have root on as2.rocks, but it seems to disabled at the hosting/os level.
jankusanagi_ joined the channel
#
sandro
(reached Evan, he says he'll fix it tonight)
#
sandro
Just thinking about the difference in client-server protocols between mastodon and ap. Huge difference: AP is extension neutral; you could have an AP server that handles posts with details it didn't understand; not so with Mastodon.
#
sandro
But it's a very interesting test case what it does with fields it doesn't understand. Hm.
#
Gargron
sandro: this is on purpose, it's really hard to design a good UX around completely arbitrary payloads
#
aaronpk
Gargron++
#
Loqi
gargron has 2 karma
#
sandro
Gargron, I'd propose the UI only displays what it knows how to handle. Everything else gets ignored. And new things can say "if you understand me, then ignore X, since its the fallback for me". This is extensibility; without it, the system is basically as constrained as the silos are.
#
sandro
(and there's a baseline of what every UI is suppose to implement, so you don't have to offer a fallback for everthing.)
#
aaronpk
I do think there's a difference between fallback and extensibility
#
sandro
Really? I don't think extensibility can practically be deployed in a decentralized system without fallbacks. Without fallbacks, using an extension is a painful choice, because you're excluding a huge chunk of your audience.
#
sandro
For example, if I want to survey my followers, I can either post a link to a survey website, or use an in-post survey extension. With fallback, I can do both and reach everybody. I'd probably have to be brave or foolish to use the extension, in its early days, because I wouldn't be reaching many people
#
sandro
hey cwebber2 :-)
#
cwebber2
sandro: you can at least display it as "sandro posted an activity of unknown type", and teach your users about types ;)
#
cwebber2
joking, kind of
#
cwebber2
this is actually kind of what happens in pump.io currently iirc, it'll just say "something was posted" but not go into the details
#
sandro
yeah, that clearly doesn't actually work in the real market. polyfills (fallbacks) are what have allowed modern browsers to finally start evolving.
#
cwebber2
sandro: you could always try rendering it as the most basic Object type
#
cwebber2
but you may be missing the whole reason the person posted it :)
#
sandro
You have to empower the person posting it to craft a suitable fallback they're comfortable with, other wise they're never going to use anything new for something that is actually important.
#
cwebber2
well we do kind of have that
#
sandro
in many case the fallback can be a link to a webpage that offers the appropriate experience.
#
sandro
I think AS2 works here, because an extension (eg a survey extension) can just be some added properties on the fallback post. This thread started because I observed that the Mastodon c2s API doesn't allow things it doesn't understand (ie extensions).
#
sandro
(AS2 could perhaps make this approach more clear and easy, but oh well, too late.)
#
cwebber2
I think that makes total sense
#
cwebber2
s2s is a different matter
#
cwebber2
if you're doing client to server, you're asking a server to make use of an object of this type, and if it has no idea what it is
#
cwebber2
it might miss out on doing some details
#
cwebber2
some side effects
#
cwebber2
whereas if it's s2s
#
cwebber2
well, at least you can show it in the feed
#
sandro
I believe there are interactions that don't need server behavior. In fact, I believe surveys could be entirely implemented in the clients.
#
sandro
Or response-types (I see Facebook just added a new one today). Or checkins. Or item-of-sale posts. Or ride-sharing (for a decentralized uber). Or ... pretty much anything else we do with apps today. :-)
#
sandro
(give or take some performance issues)
#
cwebber2
I'm not sold on accepting unknown c2s types :)
#
sandro
You don't ever want surveys?
#
cwebber2
I already implement surveys!
#
cwebber2
but, it also isn't an issue that affects federation anyway
#
sandro
Are they in AP?
#
sandro
Does everybody have to implement them to comply with AP?
#
cwebber2
sandro: no
#
sandro
How does the fallback work if someone doesn't implement it?
#
sandro
... because if only 40% of my follows see polls, I want the other 60% to see instead a link to the survey
tantek joined the channel
#
cwebber2
sandro: there may be another reason that you shouldn't accept object types you don't know of in c2s in AP
#
cwebber2
sandro: you may remember that, after much discussion, we agreed that posting a non-activity object to your outbox in c2s means that the server will automatically wrap it in a Create
#
cwebber2
well, how do you know whether or not it's an activity or non-activity?
#
cwebber2
you might be able to look at that rdf inheritance stuff but I'm not sure everyone knows how to read that
#
sandro
I wouldn't use rdf inference, no. It has to be something that's mandated.
#
sandro
It sounds like we don't actually know how to do extensibility in AP.
#
cwebber2
it sounds like we have a disagreement over fallback in c2s but I don't think that's the same as not knowing how to do extensibility
#
sandro
sorry, yes, I should have phrased it differently.
#
sandro
It sounds like we don't know how to do fallbacks in AP, and to me that suggests we'll never actually see the system evolve.
#
cwebber2
I think we already covered that we have a method of displaying fallback information for objects
#
cwebber2
not accepting object types you don't know in c2s
#
cwebber2
really does not seem like a big deal to me
#
cwebber2
it may even be a feature
#
cwebber2
but you know, it's implementation dependent, so hey! maybe someone will start accepting them :)
#
cwebber2
sandro: there's another side to fallbacks too
#
cwebber2
sandro: if something is really a type, plus extensions
#
cwebber2
it may be a good idea to take advantage of eg {"type": ["Video", "3dVideo"], ...}
#
cwebber2
eg, maybe "3dVideo" is a subclass of Video, but using both means that systems that don't know about 3dVideo's property of saying "put on your 3d glasses!" can still play the video meaningfully
#
cwebber2
or something.
#
cwebber2
that's maybe a bad example; I've thought of this in case we end up providing extensions to the core objects in MediaGoblin really
#
cwebber2
though in the examples I gave it may be easy enough to just add a new property without adding a composite type
#
tantek
adding new user-level "types" to a system like this is definitely non-trivial and takes some forethought (for it to be workable at all). the multi-typing that cwebber2 suggests is a good start
#
cwebber2
the problem with the whole multi-typing thing is that it means that users who expect to use java/ruby/python like classes to represent as2's type heirarchy will be very confused when it turns out an object can have multiple types at the same time :)
#
cwebber2
but I guess this is well known
#
tantek
lol devs expecting user types to magically turn into prog lang types
#
tantek
sandro, regarding whether we don't know how to do extensibility, or fallbacks, whether or not the spec says how (or not), the really proof of this (either way) is when implementations try to actually build extensions in a hetergenous community of implementations, and see what happens. do they figure it out or not?
#
tantek
very rarely (like never that I've seen?) has any "extensibility / fallback system" that was designed "up front" actually survived that kind of real world stress test
#
cwebber2
the proof of the pudding is in distributing the pudding across interoperable systems
#
tantek
it's like second generation prototyping / incubating
#
tantek
and you can't really get there without a first generation of heterogenous deployment etc. (hence why monoculture attempts have all been doomed)
#
tantek
so we won't really know for AP, until we have like at least 3+ impls in use in the wild by real users across servers, and some impl decides to make up a new type and add it and see what happens to the other impls when they federate
#
tantek
maybe that number is even more than 3 IDK
#
tantek
because at "small" numbers, there's a *chance* that all the impls can upgrade something simultaneously, but rarely does that dynamic last in any successful standard
#
tantek
and "all upgrade something simultaneously" is not extensibility, it's spec revision
#
tantek
in the indieweb world, it's been interesting seeing the extensibility/fallback evolve from replies -> likes -> reacji for example, multiple generations of extensions / fallback as were
#
tantek
as *it were
#
tantek
I'm interested in learning about other examples of real world extensibility/fallback iteration with live running heterogenous systems
#
tantek
bad example: RSS - pretty much all extensibility / fallback actually failed anything more than one level of iteration
#
tantek
and descended into, code your RSS for specific impls, not for any particular spec
#
tantek
e.g. podcasting
#
tantek
great example of why "namespaces solve everything for extensibility!" is big fat lie
#
cwebber2
to be fair, rss never claimed to be a good spec :)
#
tantek
(strawman a bit, but ns is also the elephant in the extensibility room)
#
sandro
HTML gets extensibility/fallback good enough. (clients MUST ignore attributes and elements they don't understand, and MUST use the content of elements they don't understand. That allows for fallback.
#
sandro
There'
#
tantek
sandro, sorta? HTML is riddled with extensibility / fallback failures :(
#
tantek
e.g. webkit still fails to support proper img / alt fallback
#
tantek
the simplest
#
sandro
I agree HTML has problems, which is why I said "good enough", not "right". If it didn't get them "good enough" it would have died a long time ago, I expect.
#
tantek
nevermind <object> tag etc. I mean works in Firefox sure, but cross-browser interop is poor. and without interop, you don't actually have extensibility
#
tantek
the only extensibility that I think has worked in HTML is class and rel
#
tantek
maybe meta too if you see more value in metacrap that SEO junk
#
tantek
HTML had something different than extensibility, it had evolvability, which let us go from v4 to v5 with <video> <audio> etc.
#
tantek
centralized evolvability at that
#
tantek
again, AFAIK, that's not extensibility in the typical "decentralized" implied way by namespace advocates
#
sandro
Meanwhile, it sounds like AP is hostile to fallback, so if I were someone who was interested in application areas other than cloning twitter and facebook, that hostility would be enough to make me lose interest in AP.
#
tantek
sandro, I'm not convinced of that. or rather, I'm more optimistic about AP
#
tantek
we won't know until we see AP impls try to build in fallback for extensions
#
sandro
Fallback has to be in the test suite.
#
tantek
sandro, is what you mean by Fallback in the spec? otherwise we can't put it in the test suite
#
sandro
I mean, otherwise we'll get lots of implementations that get it wrong, and if you can't rely on it, it's hostile.
#
tantek
put another way, which section of the spec would you like to see more tests for?
#
tantek
you don't need all impls to get it right for it to work out. we've learned that in indieweb. it's ok if it starts out with a few figuring out fallbacks and then eventually it picks up or it doesn't. it's not automatic failure / hostile.
#
tantek
anyway, I'm hoping we have a long enough extension period to figure some of this out with live AP implementations
#
sandro
That's true as long as you'
#
sandro
damn, my enter key moved a bit. keep hitting it by accident.
#
sandro
What you're saying about playing around and learning only works before the protocol has actually caught on.
tantek_ joined the channel