{"id":4174,"date":"2018-08-14T11:45:29","date_gmt":"2018-08-14T11:45:29","guid":{"rendered":"https:\/\/www.novonon.com\/blog\/2018\/08\/14\/the-social-graph-is-neither-maciej-ceglowski\/"},"modified":"2018-08-14T11:45:29","modified_gmt":"2018-08-14T11:45:29","slug":"the-social-graph-is-neither-maciej-ceglowski","status":"publish","type":"post","link":"https:\/\/www.novonon.com\/blog\/2018\/08\/14\/the-social-graph-is-neither-maciej-ceglowski\/","title":{"rendered":"The Social Graph Is Neither (Maciej Ceg\u0142owski)"},"content":{"rendered":"<p>(2011)<\/p>\n<blockquote>\n<p style=\"color:rgb(51,51,51); font-family:arial,sans-serif; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-weight:400; letter-spacing:normal; orphans:2text-indent:0px; text-transform:none; white-space:normal; widows:2; word-spacing:0px; -webkit-text-stroke-width:0px; text-decoration-style:initial; text-decoration-color:initial; text-align:left;\">But when you start talking about building a social graph that transcends any specific implementation, you quickly find yourself in the weeds. Is accepting someone&#8217;s invitation on LinkedIn the same kind of connection as mutually following them on Twitter? Can we define some generic connections like &#8216;fan of&#8217; or &#8216;follower&#8217; and re-use them for multiple sites? Does it matter that you can see who your followers are on site X but not on site Y?<\/p>\n<p style=\"color:rgb(51,51,51); font-family:arial,sans-serif; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-weight:400; letter-spacing:normal; orphans:2text-indent:0px; text-transform:none; white-space:normal; widows:2; word-spacing:0px; -webkit-text-stroke-width:0px; text-decoration-style:initial; text-decoration-color:initial; text-align:left;\">One way to solve this comparison problem is with standards. Before pooling your data in the social graph, you first map it to a common vocabulary. Google, for example, uses XFN as part of their<span> <\/span><a href=\"http:\/\/code.google.com\/apis\/socialgraph\/\" style=\"text-decoration: none; color: rgb(85, 17, 170);\">Social Graph API<\/a>. This defines a set of about<span> <\/span><a href=\"http:\/\/gmpg.org\/xfn\/background\" style=\"text-decoration: none; color: rgb(85, 17, 170);\">twenty allowed relationships<\/a>. (Facebook has a much more austere set:<span> <\/span><tt>close_friends<\/tt>,<span> <\/span><tt>acquaintances<\/tt>,<span> <\/span><tt>restricted<\/tt>, and the weaselly<span> <\/span><tt>user_created<\/tt>).<\/p>\n<p style=\"color:rgb(51,51,51); font-family:arial,sans-serif; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-weight:400; letter-spacing:normal; orphans:2text-indent:0px; text-transform:none; white-space:normal; widows:2; word-spacing:0px; -webkit-text-stroke-width:0px; text-decoration-style:initial; text-decoration-color:initial; text-align:left;\">But these common relationships turn out to be kind of slippery. To use XFN as my example, how do I decide if my cubicle mate is a<span> <\/span><tt>friend<\/tt>,<span> <\/span><tt>acquaintance<\/tt><span> <\/span>or just a<span> <\/span><tt>contact<\/tt>? And if I call him my<span> <\/span><tt>friend<\/tt>, should I interpret that in the northern California sense, or in some kind of universal sense of friendship?<\/p>\n<p style=\"color:rgb(51,51,51); font-family:arial,sans-serif; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-weight:400; letter-spacing:normal; orphans:2text-indent:0px; text-transform:none; white-space:normal; widows:2; word-spacing:0px; -webkit-text-stroke-width:0px; text-decoration-style:initial; text-decoration-color:initial; text-align:left;\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/idlewords.com\/images\/brudershaft.png?w=625\"><\/p>\n<p style=\"color:rgb(51,51,51); font-family:arial,sans-serif; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-weight:400; letter-spacing:normal; orphans:2text-indent:0px; text-transform:none; white-space:normal; widows:2; word-spacing:0px; -webkit-text-stroke-width:0px; text-decoration-style:initial; text-decoration-color:initial; text-align:left;\">In the old country, for example, we have two kinds of &#8216;friendship&#8217; (distinguished by whether you address one another with the informal pronoun) and going from one status to the other is a pretty big deal; you have to drink a toast with your arms all in a pretzel and it&#8217;s considered a huge faux pas to suggest it before both people feel ready. But at least it&#8217;s not ambiguous!<\/p>\n<p style=\"color:rgb(51,51,51); font-family:arial,sans-serif; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-weight:400; letter-spacing:normal; orphans:2text-indent:0px; text-transform:none; white-space:normal; widows:2; word-spacing:0px; -webkit-text-stroke-width:0px; text-decoration-style:initial; text-decoration-color:initial; text-align:left;\">And of course sex complicates things even more. Will it get me in hot water to have a<span> <\/span><tt>crush<\/tt><span> <\/span>on someone but have a different person as my<span> <\/span><tt>muse<\/tt>? Does<span> <\/span><tt>spouse<\/tt><span> <\/span>imply<span> <\/span><tt>sweetheart<\/tt>, or do I have to explicilty declare that (perhaps on our 20th anniversary)? And should<span> <\/span><tt>restrainingOrder<\/tt><span> <\/span>be an edge or a node in this data model?<\/p>\n<p style=\"color:rgb(51,51,51); font-family:arial,sans-serif; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-weight:400; letter-spacing:normal; orphans:2text-indent:0px; text-transform:none; white-space:normal; widows:2; word-spacing:0px; -webkit-text-stroke-width:0px; text-decoration-style:initial; text-decoration-color:initial; text-align:left;\">There&#8217;s also the matter of things that XFN doesn&#8217;t allow you to describe. There&#8217;s no<tt>nemesis<\/tt><span> <\/span>or<span> <\/span><tt>rival<\/tt>, since the standards writers wanted to exclude negativity. The gender-dependent second e on<span> <\/span><tt>fianc\u00e9(e)<\/tt><span> <\/span>panicked the spec writers, so they left that relationship out. Neither will they allow you to declare an<span> <\/span><tt>ex-spouse<\/tt><span> <\/span>or an<span> <\/span><tt>ex-colleague<\/tt>.<\/p>\n<p style=\"color:rgb(51,51,51); font-family:arial,sans-serif; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-weight:400; letter-spacing:normal; orphans:2text-indent:0px; text-transform:none; white-space:normal; widows:2; word-spacing:0px; -webkit-text-stroke-width:0px; text-decoration-style:initial; text-decoration-color:initial; text-align:left;\">And then there&#8217;s the question of how to describe the more complicated relationships that human beings have. Maybe my friend Bill is a little abrasive if he starts drinking, but wonderful with kids &#8211; how do I mark that? Dawn and I go out sometimes to kvetch over coffee, but I can&#8217;t really tell if she and I would stay friends if we didn&#8217;t work together. I&#8217;d like to be better friends with Pat. Alex is my AA sponsor. Just how many kinds of edges are in this thing?<\/p>\n<p style=\"color:rgb(51,51,51); font-family:arial,sans-serif; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-weight:400; letter-spacing:normal; orphans:2text-indent:0px; text-transform:none; white-space:normal; widows:2; word-spacing:0px; -webkit-text-stroke-width:0px; text-decoration-style:initial; text-decoration-color:initial; text-align:left;\">And speaking of booze, how come there&#8217;s a field for declaring I&#8217;m an alcoholic (<tt>opensocial.Enum.Drinker.HEAVILY<\/tt>) but no way to tell people I smoke pot? Why are the only genders<span> <\/span><tt>male<\/tt><span> <\/span>and<span> <\/span><tt>female<\/tt>? Have the people who designed this protocol really never made the twenty mile drive to San Francisco?<\/p>\n<p style=\"color:rgb(51,51,51); font-family:arial,sans-serif; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-weight:400; letter-spacing:normal; orphans:2text-indent:0px; text-transform:none; white-space:normal; widows:2; word-spacing:0px; -webkit-text-stroke-width:0px; text-decoration-style:initial; text-decoration-color:initial; text-align:left;\">What happens to dead people in the social graph? Facebook keeps profiles around for a while in memoriam, so we probably shouldn&#8217;t just purge dead contacts from the social graph immediately. But we certainly don&#8217;t want them haunting us on LinkedIn &#8211; maybe there should be a second, Elysian social graph where we can put those nodes to await us?<\/p>\n<p style=\"color:rgb(51,51,51); font-family:arial,sans-serif; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-weight:400; letter-spacing:normal; orphans:2text-indent:0px; text-transform:none; white-space:normal; widows:2; word-spacing:0px; -webkit-text-stroke-width:0px; text-decoration-style:initial; text-decoration-color:initial; text-align:left;\">You can call this nitpicking, but this stuff matters! This is supposed to be a canonical representation of human relationships. But it only takes five minutes of reading the existing standards to see that they&#8217;re completely inadequate.<\/p>\n<p style=\"color:rgb(51,51,51); font-family:arial,sans-serif; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-weight:400; letter-spacing:normal; orphans:2text-indent:0px; text-transform:none; white-space:normal; widows:2; word-spacing:0px; -webkit-text-stroke-width:0px; text-decoration-style:initial; text-decoration-color:initial; text-align:left;\">Here the Ghost of Abstractions Past materializes in a flurry of angle brackets, and says in a sepulchral whisper:<\/p>\n<p style=\"color:rgb(51,51,51); font-family:arial,sans-serif; font-style:normal; font-variant-ligatures:normal; font-variant-caps:normal; font-weight:400; letter-spacing:normal; orphans:2text-indent:0px; text-transform:none; white-space:normal; widows:2; word-spacing:0px; -webkit-text-stroke-width:0px; text-decoration-style:initial; text-decoration-color:initial; text-align:left;\">\u201cHow about we let people define arbitrary relationships between nodes\u2026\u201d<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/blog.pinboard.in\/2011\/11\/the_social_graph_is_neither\/\">https:\/\/blog.pinboard.in\/2011\/11\/the_social_graph_is_neither\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>(2011) But when you start talking about building a social graph that transcends any specific implementation, you quickly find yourself in the weeds. Is accepting someone&#8217;s invitation on LinkedIn the same kind of connection as mutually following them on Twitter? Can we define some generic connections like &#8216;fan of&#8217; or &#8216;follower&#8217; and re-use them for [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[1],"tags":[],"class_list":["post-4174","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p3pfIY-15k","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/posts\/4174","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/comments?post=4174"}],"version-history":[{"count":0,"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/posts\/4174\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/media?parent=4174"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/categories?post=4174"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.novonon.com\/blog\/wp-json\/wp\/v2\/tags?post=4174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}