Integrate Facebook and Twitter friend search

Proposal

Looking for a way for Diaspora to be able to find the friends a user has, who are using known Diaspora accounts, based on their friendships from other social networks such as Facebook and Twitter.

This is akin to what Quora has done, where it tells you about friends you have from there other networks, which are already using Quora.

Justification

I began looking into Diaspora in July. Since then (not a very small amount of time), I have found no one I know in real life on Diaspora. I asked some people directly and received “no” responses. But also, D* doesn’t allow me to search for friends using any parameters other than D* id. For a very small network, this is bad because D* ids are rare, resulting in not being able to find anyone on the network. 3 months later I have exactly 2 contacts on D*, one of which is Jonne, and the other a fellow I begged to add me from freenode/#diaspora.

The Code

The following is full of noob assumptions, written solely to get the discussion ball rolling.

Brief research shows me, since D* users sign in using custom D* accounts (not FB o-auth, etc), we’d have to compare something like email addresses to match against that same identifier that the other network has stored.

Part of the question is, what servers will D* search for these users on? Perhaps a list of large pods can be offered to search, maybe in addition to the name of pods that the user supplies.

Implementation? (facebook scenario)
I imagine the user’s pod will query the list of search pods for a list of fb ids. The queried pods would have to search its list of users for those ids (the user would have had to link their account already) and return the results. Requires changes on both ends, as pods only search for D* user ids when web-fingered currently. So far, doesn’t look like FB api allows getting the list email addresses of friends.


Note: This discussion was imported from Loomio. Click here to view the original discussion.

I’d say that this is a bit of a loaded issue. I’m not sure… how do others feel about it?

I mean if we are trying to take down FB (if that is even possible), I suppose we’d want to link to FB users or try to entice them to move, but I’m not sure that will work (if that is the motivation).

If it is just to link to friends on FB/Twitter/Google, there is a distinct possibility that it is building a bridge to nowhere, because FB has cut off linking to outside FB, as has Twitter. Is that a smart thing to do? to waste developer muscle that way?

So that is one point.

The second point is, does Diaspora become less private by hooking up to these other SN’s? I don’t know. I’m just asking.

My thought has always been that with Diaspora, a pod is for people to use on their own without being NECESSARILY linked to a corporate presence, such as FB, Google, Twitter.

My 2¢…

Definitely it should be easier to search for friends. The technical challenge comes from the federated nature of D*. Querying everything from large pods would only make the large pods swamped.

Would love to see something like this happen but I think it would have to somehow be implemented via some other solution than the pods themselves. Maybe someone will set up a service where users can with a single button add their D* ID linking it to their FB id and pods can query that then. Plus then it would be purely voluntary and as such no ones privacy would be hurt.

I nice proposal. But I think, the main problem is that Diaspora* doesn’t have a reliable search-engine. If I were able to ask my friends to register at any pod and simply search for my name, it would be a great benefit for the network. Until now it happened a lot of times that friends of mine registered and searched for some friends they knew that they should be in Diaspora* somewhere, but they weren’t able to find them and thus frustratedly went away from Diaspora*. The current search doesn’t even find all of the contacts my pod knows!

Having a facebook connection is not bad - not in the matter of privacy, but I guess it would solve the problem from the wrong direction if you know what I am trying to say.

Disclaimer: Personal opinion here.

For me the real issue are wrong expectations. Diaspora isn’t FB. It’s not Twitter. It’s neither a replacement. Never meant to be one. Diaspora wants to offer a SN’ish experience to PGP encrypted E-Mail, basically. Enriching the communication with people you already know. It’s not so much about self representation or new people discovery. The centralized approach will just always beat us there. If we aim to deliver a SN experience like Facebook while being distributed and privacy aware we can do nothing but just fail. It doesn’t work. Diaspora is about saying what you can’t say on other platforms because you don’t know if someone else will accidentally see it because you have no control over your data. But again it’s not a replacement.

Just my two cents, other devs might think different.

I guess Friendica has such a feature… but it was terribly implemented and has no real overvalue, so for the next time focussing on primary issues should be more important.

I think we should add it because creating accounts with Facebook and Twitter is easy, secure, and only trackable for those who opt-in, i.e., those who connect their D* accounts to these networks. It’s not very difficult…we already have the capabilities to link D* accounts with FB and Twitter accounts, all we need is to gain permission to search the friend lists of these accounts.

This is not a security concern, but I don’t believe it’s feasible for federation. It would simply take too long to perform a search of the entire D* network. Also, unless Facebook and Twitter adds in a “Diaspora Handle” field into their profiles, or we can find some other secure way of obtaining one’s primary D* handle from these social networks, I don’t believe something like this is feasible.

The only way we could really do this with performance in mind would be to only search on the local pod, and query both FB and Twitter by email address. This is, unfortunately, a bit of a half-assed attempt, so I’m not 100% behind doing it this way.

I’m not sure I understand the proposal, but if I’m reading it correctly, it sounds like a massive privacy leak of the sort which has made Facebook infamous and which Diaspora was set up to avoid.

I definitely don’t think anything should be implemented which provides people’s Diaspora handles, or indeed any user data, to other networks such as Facebook on a ‘these are people I (might) know’ basis. The way Facebook encourages new users to upload their entire contacts list to its database is one of the most egregious breaches of privacy around. We don’t want Diaspora to be any part of that or seek to replicate it in any way.

You’re right in that searching for users by name is not very good within Diaspora, but this is something which will, I expect, improve greatly when federation of data between pods is sorted out, and that is one of the priorities for development at the moment.

So I think it’s a case of accepting that for the moment, with Diaspora only at alpha stage, this function isn’t going to be very good, but it should improve a lot when the federation issues are resolved.

As a workaround for the time being, if you’re searching for people who are already friends, I’d suggest right-clicking on your name in the stream in Diaspora and sending the link to your friends by email. They can then click that link to go straight to your profile page, and can then connect with you (if they wish).

Of course, one other thing to consider is that not that many people are using Diaspora at the moment, so it might well be that only one or two of your friends have Diaspora accounts at the moment. This is certainly true in my case, and I have very few contacts.

I think it’s best to view Diaspora as the building blocks of a future, and hopefully excellent, social network, rather than as a working (but not very well) social network at present.

That’s my two pfennigs worth.

ps: I totally agree with and support Jonne’s words: thinking as Diaspora as a replacement for one of the established centralised social networks is a mistake and a route to failure. Diaspora is by nature something different, and it can only succeed if it doesn’t try to replicate what Facebook, Twitter and so on do.

I agree with Tom Scott’s 1st paragraph and the “this is not a security issue” part.

Regarding performance, the way things work right now, you enter a D* id, the address is parsed to find the pod which hosts the account, and that pod is given a search to run for that id.

Now, if a user wants to search for their FB friends, the list of search pods would be given FB ids to search for. That # of IDs would be far greater, would is a concern, but possibly tolerable. Also, we would want to look into limiting how many pods can be given these queries simultaneously. I want to dispel the idea that any D* data would be given to FB or Twitter however. The search pod would return any local D* accounts which match any of the of 3rd party network IDs.

Regarding the SN nature of the proposal, I’m not seeing a big difference between D* and other SNs. D* is most similar to Google+ (due to the concept of circles) with the exception that you can host & own all your data yourself. + the distributed layout of the network. That said, being able to find friends better on D* would greatly help D* grow. As it stands now, finding people you know on D* is more difficult than any other alternative.

Thinking of google+ reminds me how they find your contacts for you: your gmail contact list. There are APIs to interface with that data also. As well as yahoo I believe. So beginning to integrate that data would greatly help making connections between D* users…

I’m strongly against the facility to upload your contacts list, because this is a way of giving other people’s data away without their permission. Even if Diaspora wasn’t to store this data and use it to contact these people, as Facebook and Google+ do, it would be encouraging bad practice in people. I think in everything we do in Diaspora, it should be encouraging people to think about the security and privacy of other people as well as themselves.

Convenience is good, but at what cost?

I think a lot of the problems being raised about finding people will be solved once the core problems over federation of data between pods had been solved. And again, we should be focusing on solving the technical problems of the network before thinking of publicising it to others as a functioning network. We are testers, helping to get Diaspora ready to be used by the wider public.
Another tuppence.

I don’t think anyone is talking about uploading anyones contacts anywhere :stuck_out_tongue: Any data should always be opt-in and afaik all the discussion here has been exactly that - everything optional.

What is the real hope for linking up to friends on twitter and FB? Is it convenience? These are corporations who are out to make a profit. The do not care about privacy. Just by posting on either of those networks makes the content theirs to do with what they want. Just because my friends are stupid enough to have accounts on those networks should not be a motivation for me to link up to them from D. I’m really missing the point of doing that.

Sorry for being a broken record, but I did mention this already: 3rd parties that have connected to them, and FB and Twitter have a history of cutting 3rd parties off for whatever reason. Given that that has happened, why should D development efforts spend the time doing that just to have it potentially thrown away?

Next, I’m not sure about this, and maybe this is a teeny bit off topic, but what’s to keep FB (or any other wayward leaning pod owner) from setting up a Diaspora pod, tweaking it and sucking up all the data from federation as a “man in the middle”? Is that possible? Maybe I’m not articulating it correctly, but it does confuse me about federating with SN’s that are corporate entities. And if a D* SN does take off in a meaningful way, how do we know that the network isn’t being compromised by a corporate presence or corporate pressures? It may not be an issue at the moment, but what are we doing to safeguard it?

I realize this may be a naive question, in that I may not understand how federation is supposed to work.

setting up a Diaspora pod, tweaking it and sucking up all the data from federation as a “man in the middle”?

I don’t think they could get much from federation: only public posts, and any posts shared with users on the ‘dodgy pod’, but not much more as D* is careful with what is shared during federation (just the bare minimum, I think). However, the dodgy podmin could certainly harvest data from people who signed up to that pod. It’s an issue which does need to be addressed during this development stage, as there’s potential for fraud and identity theft on a large scale. So far it has just been done on trust, and that’s fine while D is very small, as criminals are unlikely to bother with it. But if it does take off, you can guarantee that crims will take an interest.

The goal is to find the D* accounts of the people you have friended on other networks. The motivation of adding them is not that they’re on network X which is so big and nice. The motivation is that they’re a friend you would like to communicate with securely, using Diaspora, and therefore you need their D* id in order to communicate with them. Currently, that is very hard to do. I have hundreds of “friends” on Facebook but have no means of finding out their D* ids. Other than manually asking each and every one of them individually. This idea is to automate that process, much the way many other sites do today.

This proposal does not contain anything about sending D* data to another network. The only interaction with other networks would be requesting (from that network to D*) the friend list of the D* user which is looking for D* friends. Therefore, the privacy policies of 3rd party networks is irrelevant, because we do not tell them anything. No D* friend lists and no D* posts.

To reiterate, the friend list would be sent to pods that you select to find friends on. It might even be possible to exclude the D* id of the user performing the search. That way there is no user attached to this list of search terms, as some added privacy…

These other social networks block access to their APIs very rarely. The only time I know of it happening is FB blocked Twitter posts going to Facebook, for understandable reasons (because twitter is the closest thing in size to Facebook). Diaspora is nowhere near as big and nowhere near as big a threat. By the time that becomes untrue, this feature will no longer be required.

As to the cost of dedicating dev time & effort to this idea, it shouldn’t be hard for someone who knows the code well, thanks partially to the rapid development tools that are used. I’m almost to the point where I could write it. As Tom Scott said, the code to get permission to access these other networks is already in D*. This is basically an enhancement to Webfinger, with a new rails view to do the search, as pod info will be needed…

I like Rasmus Fuhse’s comment also. The search is a problem also. I think this and that could and should be fixed. This would help find people that you might not remember to search for specifically, whereas fixing search would help for those who do not have data on other social network to help them get connected on Diaspora (or who just choose not to use that data).

Proposal: To allow webfinger search to find users based on their ID from other networks (opt-in only)

This does NOT propose sending any D* data to third party networks. Diaspora already allows linking your D* account to your account on other networks. This is to allow search to work if you do not know the D* id you are looking for. Search can find your friends, if you and your friend allow it, by searching the user database of Diaspora pods for the IDs that you specify.

This solves the problem of needing to add friends that you do not know the D* id of. How would you know their D* id if you don’t already have them added? This quickly goes through contact lists that you already have populated and finds as best as possible those users on Diaspora (through opt-in parameters).


Outcome: N/A

Votes:

  • Yes: 0
  • Abstain: 0
  • No: 0
  • Block: 0

Note: This proposal was imported from Loomio. Vote details, some comments and metadata were not imported. Click here to view the proposal with all details on Loomio.

Proposal: To allow webfinger search to find users based on their ID from other networks (opt-in only)

This does NOT propose sending any D* data to third party networks. Diaspora already allows linking your D* account to your account on other networks. This is to allow search to work if you do not know the D* id you are looking for. Search can find your friends, if you and your friend allow it, by searching the user database of Diaspora pods for the IDs that you specify.

This solves the problem of needing to add friends that you do not know the D* id of. How would you know their D* id if you don’t already have them added? This quickly goes through contact lists that you already have populated and finds as best as possible those users on Diaspora (through opt-in parameters).


Outcome: N/A

Votes:

  • Yes: 6
  • Abstain: 6
  • No: 0
  • Block: 1

Note: This proposal was imported from Loomio. Vote details, some comments and metadata were not imported. Click here to view the proposal with all details on Loomio.

Webfinger should have been omitted from the proposal declaration.

Did you know that you can search for people on D* by name? I just typed your name in to the search field and your account came up immediately, even though you’re on a completely different pod and we’ve never interacted.

I don’t think the answer to the current issues with searching for people is in any way to facilitate the sending of other people’s user data without their knowledge or permission, whether those data are gleaned from a database held on D* or on another network. That is, in my understanding, completely against what D* is all about, and I’m completely against it. The answer is to sort out the issues with federation - when those are sorted out, a lot of the issues you mention will disappear.

Compare Facebook. There are two ways of searching for someone: by name, with no other filters possible, or by uploading your contacts list, containing the personal data of all sorts of people who haven’t given you permission to do this, and some of whom might never want any sort of interaction with Facebook. If you eliminate the latter as being absolutely against privacy codes, then all you have is a very poor search-by-name facility, especially given the number of members on Facebook. This search-by-name is already available on D* (albeit not perfectly because of the federation issues currently facing the network), and could be improved by allowing people to search on various filters based on information that each person has made public in their profile (none of this exists at the moment, but could be built in).

So if you’re searching for a Jane Smith who lives in Paris and is interested in Linux and tennis, you could search for her name and put in one of those other items as a filter: if she has made the information public in her profile, it can be used to narrow down the search.

The answer to the problems you raise is to improve the methods of searching based on what each person has shared publicly about themselves on D* and which is federated to all pods; the answer is not to go down the route of misappropriating other people’s personal data as Facebook and other networks have done. It might be convenient for you as a user, but it’s bad, bad, bad.

I’m afraid you’ll never get me to support this.