
Both Kristi (my wife) and I find the Facebook Timeline hard to read having converted to the timeline using the Facebook Developers trick a few months ago. She just commented "I think no one comments on your stuff because your timeline is so hard to read.". Timeline on mobile seems better as it's not left-to-right zig-zag reading.
Zig zag reading
The image to the right is my timeline as of a few minutes ago and I drew a few lines marking the path you’d need to traverse the data to read it in chronological order. I've not found any obvious way to revert though I haven’t searched very hard and now I rarely look at my own profile to find anything.
Lately, it seems I get a lot less engagement on updates I post and while it’s possible I’ve “tuned” my privacy setting so as to cause this result the conclusion is the same, Facebook has become a lot less interesting. I find that if I dig into profiles including my wife’s I see lots of interesting posts that never made it to my wall which is typically dominated by a few high volume posters.
Unfriending
A few months ago I “unfriended” about 40 people leaving me with 158 which is only slightly above average. I’d hope that Facebook is optimizing for people in my friend range and I’d see a greater diversity of content but that’s not the case. The current trend reminds me of the days of Yahoo’s LaunchCast Radio service (of which I was a big fan). I had 1000’s of ratings and there were times when my station made for a great listening experience and others when it was painful (like when the same Beastie Boys song would play every few songs). There was lots of tweaking to the algorithms used to craft a customized music experience and it wasn’t an easy task. I suspect Facebook has a similar yet more challenging problem so I guess it’s perhaps just time to wait and see.
In the mean time I’m checking into a lot of places so I can have a bunch of data to play with (btw, this link is to an application I’m experimenting with so if it doesn’t work don’t be surprised).
Update: Dec 27, 2011 Viewing a friend's wall and clicking on the Subscribe button will reveal a dropdown that allows you to select "All Updates" which (at least in theory) should show you all of that person's posts.
As I mentioned, I’m working on Facebook support which involves the transition to the new $g(OAuth 2) authentication. What I’m going to do here, for myself if no one else, is keep a list of links I’ve found related to the topic. Without further adieu:
Of course, feel free to leave a comment with anything useful you've found.
While working on Facebook functionality using Python I ran into a few cases where the GraphAPI.request method caused Facebook to choke on parameters with a value of None. Thus here’s a simple override to allow for None parameters which subsequently get stripped out.
def request(self, path, args=None, post_args=None):
''' Improves handling for post_args where any arg with a None value gets removed to avoid FB API errors.
Allows for methods that accept all possible Facebook parameters and only passes those that are specified.
'''
if post_args:
d = {}
for a in post_args:
if post_args[a] != None:
d.setdefault(a, post_args[a])
post_args = d
return GraphAPI.request(self, path, args, post_args)
I’ve created a descendant class I call GraphAPIEx where this above method appears.
Recently, I received an email via my blog asking for a VS.NET 2010 version of my Facebook Starter Kit. Since I no longer work on Windows it hasn’t been a high priority so I offered instructions on how to extract the project from the .vsi file and load the project manually. Much to my (pleasant) surprise I got a follow-up email with an updated starter kit for VS.NET 2010 updated to .NET v4.
If anyone decides they want to upgrade the FDT to the latest version I’d be happy to post an update for that as well. The starter kit is available on Facebook is nearing 5600 users! An interesting side note, I’m no longer able to edit the properties of this application on Facebook because it contains the word “facebook” in the URL which is no longer allowed.
Enjoy!
Recently, I downloaded Tornado:
Tornado is an open source version of the scalable, non-blocking web server and tools that power FriendFeed.
Included is a facebook demo that displays your feed though it didn’t work “out-of-the-box” raising the error:
File "modules/post.html", line 26, in _execute
KeyError: 'message'
modules/post.html is a snippet of html used to render each feed item. The snippet looks like this:
<div class="post">
<div class="picture">
{% set author_url="http://www.facebook.com/profile.php?id=" + escape(post["from"]["id"]) %}
<a href="{{ author_url }}"><img src="//graph.facebook.com/{{ escape(post["from"]["id"]) }}/picture?type=square"/></a>
</div>
<div class="body">
<a href="{{ author_url }}" class="actor">{{ escape(post["from"]["name"]) }}</a>
{% if post["message"] %}
<span class="message">{{ escape(post["message"]) }}</span>
{% end %}
<div class="meta">
<a href="{{ escape(post["actions"][0]["link"]) }}" class="permalink">{{ locale.format_date(datetime.datetime.strptime(post["created_time"], "%Y-%m-%dT%H:%M:%S+0000")) }}</a>
</div>
</div>
</div>
The curly braces are python code snippets and the line reading if post[“message”] is causing the problem. In python referencing a non-existent dictionary key raises a KeyError exception thus changing the code to use:
{% if “message” in post %}
To debug this problem I simply removed the code referencing post[“message”] and replaced it with str(post) which simply dumped the JSON contents onto the page. From there I could see that not all entries had a message key thus the error.
One more note. Looking at the documentation Tornado uses a library call epoll which at first glance sounds familiar to I/O completion ports on Windows which is something I'm familiar with.
If you use Facebook I’d guess you too probably have a backlog of friend requests. Having been on Facebook for several years and with 180 friends I’ve reached a point where I struggle to justify letting more people into my status stream. At 180 I already find myself looking back through older updates to find interesting things.
Most of my pending requests have been out-of-the-blue, old high school friends/acquaintances or people whom I’ve met online but never in person and the occasional complete stranger. In some instances I’ve probably been mistaken for one of my brother’s.
The whole notion of a “friend request” implies having to pass judgment on the relationship you have with the requestee which can feel awkward at times even though that awkwardness isn't really shared. What’s the proper “etiquette” when you’ve been mistaken for a sibling especially for distance relationships?
I’ve noticed my wife and I both let requests we can’t decided immediately on sit in the queue for months at a time with no clear resolution in sight. I haven’t looked but I wonder if there is a way to simply turn off friend requests or perhaps better yet inform the requestee they should contact you directly first?
Personally, I prefer my Facebook social graph be more personal nature and less work/professional using LinkedIn for the latter.
Do you have the same problem? How do you handle friend requests?
[UPDATE] Interesting related article.
Photo credit: FreeDigitalPhotos.net
This is a post for me to aggregate various FQL queries.
Fetch the Facebook like count for a given URL
SELECT like_count FROM link_stat
WHERE url="http://www.stevetrefethen.com/blog/"
Facebook user's connections
SELECT target_id,target_type,is_following
FROM connection WHERE source_id = facebook_userid
Facebook Share count on a page
SELECT share_count, like_count, comment_count, total_count
FROM link_stat
WHERE url="http://www.stevetrefethen.com/school/"
Fetch open graph id for a url:
SELECT id,type,site FROM object_url
WHERE url="http://www.stevetrefethen.com/school/"
View which groups a user belongs to
SELECT name,gid FROM group
WHERE gid IN (SELECT gid FROM group_member
WHERE uid = facebook_userid)
Fetch a "friend map"
Replace UID with logged in user id. Via this page.
SELECT uid1, uid2
FROM friend
WHERE uid1 IN (SELECT uid1 FROM friend WHERE uid2=UID)
AND uid2 IN (SELECT uid1 FROM friend WHERE uid2=UID)
AND uid1 < uid2
Names of the places you've checked in
SELECT name FROM page
WHERE page_id IN
(SELECT page_id FROM checkin WHERE author_uid = me())
Names of the Places your Friends have checked in
SELECT name FROM page
WHERE page_id IN (SELECT page_id FROM checkin WHERE author_uid IN
(SELECT uid2 FROM friend WHERE uid1 = me()))
You can play around with executing these here including your Facebook user id if you're logged in.