Social Network Modeling

Nov 19, 2011

One fewer 3rd party Chrome extension!

One of the first Chrome extensions I install is Disconnect, quickly followed by Flashblock.

But it always made me nervous because these extensions can basically do anything on any page. Read your email, look at your bank statements, etc... even on secure pages.

So I'm always super happy when I can uninstall an extension and by enabling Chrome's built-in Plugin Blocker, FlashBlock is no longer required.

Steps are easy:
1. In Chrome, navigate in this settings url:
chrome://settings/content




2. Then under "Plug-ins" select Block all.

3. Disable or uninstall FlashBlock:chrome://settings/extensions 

Plug-in blocking in action
You'll have to re-enable it on some sites, but it's basically just like the FlashBlocker with out some 3rd party author having access to all pages.

When you first land on a page with flash, you'll see grey puzzle piece. You have two choices.

1. If you just want to enable a single flash area without allowing it for the whole site forever, just right click on the puzzle and select Run this plugin:


2. It makes sense to just enable flash on youtube. So you can use the puzzle piece shown in the address bar to allow it to run on the whole site ever time you visit. This makes sense for banking sites, too:




Oct 31, 2011

Reclaiming space in Google Reader

While this technique still works, the CSS is out of date with the latest changes from Google.

Here's a previous post on how to change the Google+ bar without installing a chrome extension.

Call me paranoid, but I don't like giving 3rd party extensions access to my logged in gmail or reader pages.

Simply edit Chrome's style override document and add this bit of magic css.

Custom.css (Updated Nov 3)

#gbx4 { zoom: .8!important; height:28px !important; background-color: #F1F1F1 !important;}
#gbx3 {height: auto !important;}
#gb {height: 24px !important;}
#top-bar {zoom: .8 !important; height:auto !important}
#header  {zoom: .8 !important;} 
#lhn-add-subscription-section {zoom: .8!important; !important; height:32px !important} 
#sections-header {zoom: .8!important; !important; height:32px !important}
#recent-activity {zoom: .8!important; !important; height:auto !important}
#logo {zoom:.8!important; height:40px !important}
#logo-section {zoom:.8 !important; height:auto !important}
#viewer-header {zoom:.8 !important; height:32px !important}
#title-and-status-holder {zoom:.8 !important; }



Before:


After

Now the results aren't perfect and they could break; however, you'll reclaim some much needed space on laptop screens.

On the Mac, the file can be found here:
~/Library/Application\Support/Google/Chrome/Default/User\ StyleSheets/Custom.css
(Thanks Michael!)

Sep 13, 2011

Run gMail's auto-merge contacts feature now to save your sanity

If you've been using gMail for any length of time, then do yourself a favor and use the Find & merge duplicates feature. There is almost no risk now that Google's added the Restore contacts feature!


If you're an Android user, then you should get a double-win by condensing contacts in both places.  

Step 1

Click Contacts. Click More menu. Select Find & merge duplicates.


Step 2

Click Merge button. You can click the expand link to see more details about the merges.


That's it. 

Aug 19, 2011

How to change the Google Plus nav bar color without yet-another--chrome-extension

Someone noticed my Google Plus navbar wasn't black, but a nice gray color. Here's how I did it without having to install yet-another-Chrome-extension:

1. Edit the custom.css file buried down in chrome's "user stylesheets" directory.

On Windows, go to the run window and type this line:

notepad "%userprofile%\appdata\local\google\chrome\user data\default\user stylesheets\custom.css"


This file is the style override file for Chrome. You can do other cool thing like force links to always show underlines, etc.

2. Add the following line:
#gbx4 { background-color: #F1F1F1 !important; }




F1F1F1 is the color,  you can change it by picking a different color:

3. Save. (should change immediately without reloading chrome).

[edit]

Here's a more complex Custom.css that changes the font color, mouseover color, etc:

#gbx4 {
  /* change the color of the background */
  background-color: #F1F1F1 !important;
  /* change the color of the border */
  border-bottom-color: #D2D2D2 !important;
}
.gbts {
  /* font color */
  color: #3366CC !important;
}
.gbts:hover {
  /* color of background when you mouse-over */
  background-color: #D2D2D2 !important;
}


Aug 16, 2011

How to get all your facebook friends on Circles without nagging

You can post a link to Facebook allowing friends to invite themselves and then limit that FB post to just friends.

Step 1. Go to your Google+ page. https://plus.google.com

Step 2. Find the Invite Friends link on the page

Step 3. Select All and Copy the link provided. (Hint: right click on the text edit field.)

Step 4. In Facebook, Click Status, type your message.

Step 5. Paste your URL and click Status AGAIN. Facebook tries to change the post type to Link; however, the url is https so FB isn't going to show a decent description.

Step 6. IMPORTANT. Change the sharing default popup to Friends! You might want to tell your friends to NOT RESHARE it since that feature is in Circles, not Facebook.

Step 7. Click Share.

Aug 9, 2011

Coolest Google shirt?

The official Google Engineering 2003 offsite bowling shirt


Jul 29, 2011

How Circles could solve it's authentic user problem and help non-profits

Will the real William Shatner please emote KHAAAAAAN!‏

There's a story going around about how Mr Shatner got his Circles profile shut down. And it got me thinking about how to solve the authentication problem.

Authenticated banners

One solution is to sell Authenticated banners for profiles using the information in Google checkout to validate the user's names and location.

To make the whole process more palatable, the checkout would donate money to a charity.



The resulting banner could be an animated gif to make it harder to fake since uploading causes them to become non-animated. While anything that overlaps profile image's boundary is probably good enough, making it animated would be the frosting on the cake.


Granted, my animation lacks the imagination of Google's UI people, but you get the point.

Emblems and charities

While working on orkut.com we came to the obvious concussions that most users became members of communities not so much to participate in discussions, but to get the group's emblem in their profile page. Emblems ranged from things like "chocolate" to past company logos.

Circles could do the something similar around non-profit events. Donate blood, participate in a cancer research marathon, etc and a banner could be awarded to your profile by the non-profit. This trophy case could appear on the left under friend lists.

Unrelated story

Amusing story. I pulled a prank on Orkut B back for April Fool's day 2004. At the time, there was a Laser Eyes meme happening on the site where users modified their profile image to have lasers shooting out of there eyes. Strange I guess, but no weirder than other memes like planking.

I replaced Orkut's profile with an animated gif file that has a few frames of lasers shooting, but it was hidden 30seconds into the image. So, it would look static for 30 seconds, then bzzzzzz lasers, then back to normal.

I spent the whole day trying to not give it away and waiting for him to discover it on his own. He had the site open on his desktop but kept missing the brief animation. Eventually someone else noticed it and told him. It was obviously me since nobody else could push an animated gif file directly to production.

If anyone saved a copy of that file or even a screen shot of orkut.com with laser eye profiles, then please send it to me so I can post it.

Jul 26, 2011

3 subtle-but-critical mistakes made by Circles

Google's Circles is out and it has some awesome potential; however, Google’s asking all of us to do a monumental task. They expect us to move all of our existing data, photos, friend connection, etc to their new system. On top of that, while I do think their product is an improvement over Facebook's groups in general, there are still some significant and unresolved issues that make it hard to justify a full switch.

1. Stop forcing me to show my close friends to my coworkers!

A correctly implemented social network would isolate and protect friend lists just like other data. Users shouldn't have to have a separate account to keep their coworkers from seeing their family.




This mockup has the same privacy controls used to limit access to posts; however, they are now used to limit access to your Circles themselves. The implication is that members of  the Family circle can see others in the Family and people in the Family-extended circle, but nobody else in my other circles.

This approach might be difficult for some novice users to understand. So, an easier feature is to just have an "Insulate this Circle" checkbox so that people in that circle can only see each other and that's it.

Now, when someone in my Family circle looks at my profile, all they see in my friends list is other family members.

2. Stop misrepresenting fans as friends!

Currently, Circles shows fan relationships as if they are more important than mutually agreed friendships. If this doesn't get changed soon, then the value of the network will degrade as people mistakenly friend people because the site misleads you into thinking you know the same group of people.

Here's an example, I have an invite from Moda Brasil to be friends, so I click the link to look at the profile. Here's what I see:

Really? Moda Brasil and I have Larry Page, Paul Bucheit and Urs Hölzle in common? Really?!? I know some of them might be in my Googlers circle, but are they in Moda's, too?

This list is located in a prominent place when viewing users' profiles... like it's the most important thing that I need to consider when deciding if we're friends. The fact that this person and I both want to follow Larry Page's posts means next to nothing. It's probably more important to me that Moda has 2766 connections than it is that we both have pending invites to Larry.

It's not just a problem here. The page where I have to decide if I know someone is even worse.

I created a test account "That Guy", added Larry Page, Sergey Brin and then invited my primary account. This means that my account, TomN, is the Observer and is looking at an invite from That Guy.

Here's what I see:
Screen shot from my pending invites.

We have 3 people in common? No we don't. We both fanned Larry, but that's hardly worth anything when it comes to making a decision about if I recognize That Guy.

Read my prior post discussing social currency if it's not obvious why this upsets me so much.

3. How can I keep something secret if I don't *know* it's a secret?!?

If someone looks at a friend's profile, I see all sorts of interesting data. The only problem is that I have no idea what they consider non-public.

All Circles has to do is put a special glyph next to non-public data, including the friends lists once they get #1 done.



The addition of these simple, privacy visual clues make it obvious what data is considered non-public. 

Also notice that "People in common" is now a useful "Mutual Friend". And, "In circles" is clearly labeled as "Is a Fan" as I mentioned in point #2 above.

Other minor recommendations

There are lots of Circle reviews out there pointing out other obvious stuff, so here's a pared down list of other recommendations:
  • Keep around the Invite Tree (who invited whom). If a user starts to spam, cut off whole branches aggressively and quickly. Reinstate accounts as needed. Let people know what they did wrong. Hidden rules frustrate users.
  • Add some automated way that real names can be validated. Maybe a credit card authorization check?
    100% dependency on the social Turing test doesn't work for famous people.
  • Consider never going with open sign-ups. Everyone must be invited by somebody else. If nothing else, it keeps the Invite Tree consistent.
  • Get a very open API out soon and make it powerful.

Conclusion

I just want to stay how impressed I am with the Circles UI and integration with exisitng Google products. Clearly, a heroic amount of cross-team coordination and effort was required to launch such a stable and compelling beta. It's easy to be on the outside and second guess what the roadmap should be. My suggestions are really just that, suggestions.

Keep up the great work!

[edit: changed title to reflect article better.]

Jul 20, 2011

Social Networks Done Right

I haven't spoken publicly about social networks because Google was still working on their product and I'm an ex-Google engineer. However, my prior work related to social networks is now covered by at least one patent and Google's social network is released, so I feel ok discussing it.

This post is my opinion on what a social network should be. Many things that I'll post as my idea are actually concepts that come from many conversations with various colleagues involved in social networks spanning 6 years.

What do I mean by "done right"?

IMO, a correctly designed social network would remove the need to have multiple accounts on difference services. Even with the most advanced social network, Google Circles, there still is a need for LinkedIn and Facebook because it's still the only way to isolate work colleagues from college buddies. See my other post about Google Circles.

What follows is the short version of a social network model that is roughly what I and a few others were pitching at Google back in 2005. But, it's probably more accurate to say that it is what I recall and like all memories, I've probably rewritten it in my own head.

Common over-simplification when thinking about social networks.

Part of my pitch back in the day, was to first bring everyone up to speed on social networks. One key point was that for all but the most trivial social networks, it's a good practice to consider the 3 person use-case, not just two.

My examples went something like: Person A and B are connected by some relationship rule and User O is the observer. Now, this User O may still be connected to Person A and/or B. Iin fact, that's where things get interesting and the complexity happens, but it's import to keep it all straight.

Rule 1 - Permission flow out from a user

This seems like a "well duh", but it's still important to point out. A user can lock down their profile to an extreme point where just the username is the only thing publicly visible. But when they "invite" someone to be their friend, they place them in a cluster (or circle) of friends and that invited person now sees whatever non-public information that circle is allowed to see... even before the friendship link is reciprocated.

This is important because invited users must decide if they know the inviter. If the default, locked down profile is all that's displayed, there will not be enough information for the "are we friends" test.

Rule 2 - Only symmetric relationships show up as friends.

The asymmetric relationship is also known as "fanning" (one person being a fan of another). To keep the value of a social network high, fan relationships should not be displayed like true symmetric relationships. What do I mean by "high value network"? Well, from orkut.com we learned that people decide if they know someone by looking at who they are friends with. If fan relationships seems like a mutual friendship, then how can anyone quickly derive who's really in their network of friends?

A social exploit I recently witness on Google Circles used a profile named "Marissa Mayer" and a picture she commonly uses on social networks. Once the fake account's profile looked legit, the only way an average person acquainted with Marissa Mayer to determine it's validity is to examine her friends. However, because of the way "fan" relationships to Larry Page, Surgey Brin, etc. sort of appear like friends, a couple ex-Googlers were fooled into accepting friend requests. And with each new Google friendship, the fake account seems more legitimate. Keep in mind, this approached worked to fool a few ex-Googlers into friending this fake account until it was deleted.

A more theoretical example showing why it's important to keep your social currency exchange rate high uses famous figures. Anyone can say they are friends with President Obama; however, it's something completely different if the President agrees that you are friends. Both parties verifying they know each other is significantly more valuable than one person claiming to know the other.

While it's not true for me, how much more cool would it be to answer the question, "You know the president?" with "Yeah, but more importantly, the president knows me."

Rule 3 - Friendship information needs protecting

Currently, this is one area where Circles doesn't go far nearly enough. Considering that the point of a social network is the network data itself. Google already had profiles... Circles is about social connections. So, it really should focus on privacy of that information as much as sharing posts.

In real life, your various circles don't know each other. My family doesn't know or interact with my colleagues. Likewise, my co-workers can't browse my rock climbing friends. There might be some individuals who overlap, but overall, my mom (or boss) shouldn't be able to peruse my friends and follow links to their profile and see pictures of me doing stuff.

A phrase to sum up this behavior is insulating circles from each other. Currently, it is done by using multiple accounts or completely different services (LinkedIn vs Facebook); however, there is an attention cost to maintaining multiple accounts and as API and services integrate with a social network, there's a user benefit to having it all in one place.

Granted, things get tricky if you really want to insulate circles of friends from each other, but the concept can be summed up with the following rule:

Rule 4 - Both friends must agree that the observer can see their relationship.

More on this rule below...

Warning: social consequences ahead

Say President Obama and I are friends. I'm proud of this fact, so I make our friendship public by putting him in a circle of friends that has no privacy limitations. But the President is a little concerned that reporters are going to harass me, so he puts me in a circle of friends logically called "Geeks" and sets the permissions to insulate this collection of relationships.

This means anyone else in the same Geeks circle would see the President and I are friends, but nobody else could. If I was alone in Obama's Geeks group and the Insulate This Circle was enabled, then nobody but the two of us would see our connection.

You might be thinking, "Whoa there! I'm proud of my associations and I want the world to know!!!" This is called "social currency" and it's greatly devalued when relationships in a network aren't required to be mutual and increased when both parties agree the relationship view-able. You may want it to be public knowledge, but there are two of you involved and if one person is more private than you, then that relationship should not show up to observers... in either of your friend list.

Why excluded from both friend lists? Well, a search engine could derive a list of the President's friends by crawl the site looking for "back links." (Now, the President could show up in my "fan" or "following" list until he adds me to a Circle).

There are numerous consequences from this design... limited network growth effect, friends seemly missing from lists when others are looking at you, and maybe some way to infer what others think your peer groups is.

Some of the concerns are mitigated by the fact that people can be placed in multiple circles and Circle's feature where you can view your own profile from another user's POV.

Other rules that don't seem as important now

My original model I pitched included Communities and non-person entities (like an Amazon). The idea was that non-Google companies can access the relationship data using the same permission mechanism as other users. If I want an external service to see a subset of my friends, I'd add that service to the appropriate circle.

For example, if you wanted a group of friends to see your Picasa album, then you'd drop the Picasa Album Agent into that circle of friends.

My point at the time was that Social Networks aren't a product in-and-of-themselves. They just made every other product much more powerful. And to prevent market fragmentation, an open standard should be established so that other big companies don't have to create mirrors of the Google network, or worse, a competing network. (Remember, this was 2004.)

We saw fragmentation of the browser toolbar market. Every company wanted one like Google's Toolbar and Google delayed opening up the toolbar API so smaller companies could leverage it. The result was a zillion toolbars all competing for space.

Jul 14, 2011

My background working with social networks

Google's social network efforts hold a special place in my heart. I was engineer #2 on Google's first socal network orkut.com back in 2004, it was just Orkut, Adam Smith (the PM) and me for a while. Back then the engineers ran Google. They picked which projects got staffed by requesting to work on them. The orkut.com site launched because of one engineer, Orkut's, sheer will.. that and Adam Smith's PM skills and Marrissa's EMG support (Executive Management Group).

I got a phone call at home the weekend after the launch. Adam pleaded with me to help fix stability issues and get the site back on it's feet. I wasn't the best Google engineer for job. However, I was a Windows programmer and had just finished a successful run as the Toolbar 2.0 techlead, (I was responsible for the first intelligent popup blocker).

I knew how to scale client software and the required auto-updating and support across a wide range of client systems; however, Google infrastructure wasn't my strong point at the time. I was recruited because orkut.com was originally written in .Net and C#... that and the fact that nobody else on the Linux heavy engineering staff was volunteering to help.

I spent that first week getting the site back up … and the following year+ dealing with fires as we tried scale. It was rough and there wasn't very much glory in the job. Orkut (the person) had almost complete ownership of the product and it's direction. And while he listened to a broad range of feedback, ultimately, he had a vision and that's where the site headed. [Grammar note: 'orkut.com' is the project/site and Orkut is the person/engineer. We all have plenty of humorous stories around confusing the two references in conversations.]

Why was the site named orkut.com and not gSocial or something? Well, one goal was for Google to experiment with social networks. The theory went that we'd quickly iterate on different ideas and learn. Learn about .Net's scalability, learn about how users interact socially online, figure out what UI and features are core. Using the name orkut.com was an attempt to stay somewhat stealthy and not associate too closely with Google so as to control growth and expectations. In hindsight, this was very naive. All too quickly, orkut.com became huge... especially outside the US.

I've heard stories that in Brazil, when people figured out that Google and orkut.com were the same company, many thought that orkut.com bought Google. It's not unreasonable to say that orkut.com was the facebook of Brazil back in 2006 and Brazil was online in a big way. Much of this success is tied directly to Orkut's vision and dedication.

Because of this project, I did a lot of thinking about social networks. Gradually, the orkut.com team got more members and collectively we came up with experiments, ideas and theories about social interations. But the reality was that the team was understaffed and there were weekly fires to put out. At some point, there was such a large established user base that doing radical experiments wasn't viable.

So, in 2005, I started pitching a new social network project. One based on a secure, yet open model and would serve as a central ACL for all of Google's properties and anyone else who wanted to leverage it. In this early Google era, the way to get a project started was to recruit other engineers or get direct EMG support.

My pitch was: social networks aren't a product in-and-of-themselves, but they made all other products more compelling. Photo sharing, chatting, blogging, group discussions, etc all became significantly more valuable. A real social network would secure lists of friends like it protects other personal information. A user can have all their social clusters (aka circles) in a single site and insulate each group from the others. Having and keeping coworkers, family and burning man friends separate should NOT require multiple accounts.

I failed. All my documentation, presentations, conversations didn't result in a project. I blame myself for this failure, but maybe the time wasn't right.

Years later, I pulled out the documentation when Google started the latest social network effort and presented it to a few members of the new team. I considered joining the effort, but the team had a vision and personalities and I felt the last thing they needed was someone who had their own agenda (me).

I left Google back in 2009 after 7 years and I still miss many aspects of working there.