Capture The Conversation



Facebook Mobile Cover Photo Tips & Tricks

Brent Walker, July 28, 2015

Ever wonder why some Facebook cover photos look better than others on mobile? The answer is always a great designer (not that I’m biased or anything), but I recently discovered a nifty trick to help less of your hard work get cut off when viewing from a mobile device – and still look great on desktop. Read More


Free Photos for Community Managers

Ben Bowes, January 22, 2013

Working at Room 214 in the design and digital marketing industry, I’ve always found stock photography to be a necessary evil. For one reason or another, there never seems to be much of a budget for great photography, especially when it comes to community management

Read More

Why Instagram is Perfect for Brands

Room 214, January 16, 2012

Instagram is now the world’s largest mobile social network. When you look at it’s astounding growth numbers it’s hard to deny that brands should think about a presence in the community.

Read More

3 Free Social Media Tools for the Busy Small Business

Ben Adelt, October 25, 2011

Running a small business takes a lot of time and even more hard work. It’s important, however, to understand the importance of actively managing and optimizing your social networks. These 3 simple and free tools provide a great start toward social media success.

Read More

What To Buy Organic: The 8 Most Buzzed-About Organic Foods

Room 214, April 20, 2011

What Should We Be Eating?

If you try to google for information on the food that’s most important to buy and eat organic, it’s a tad confusing. Every list seems to focus on a few different things, usually driven by nutrition and meal plan bias. So rather than dig through a lot of conflicting lists, I thought it would be interesting to see what organic foods consumers discuss the most.
organic food

I was amazed to see that these main food categories all have similar volume. As consumers, we’re buzzing about a wide variety of organic foods. Interestingly, animal products are the big winners, even if by a small margin. There has been ample coverage, mostly in books and films, on the state of the meat and dairy industry in the US; perhaps there is slightly more consumer awareness that drives these conversations.

Per Capita Buzz

I thought it would also be interesting to look at volume of conversation per capita to see if there are any states that stand out in their conversation around, or awareness of, organic.

The standout regions are the West Coast and Northern New England/New York State. Indiana, Wyoming, and Georgia were also standouts (though worth noting that Wyoming had a total of 94 mentions to Texas’ 1,000+).

Noteworthy Themes

Apparently, as consumers we talk about chicken more than beef. And we’re really interested in information that includes scientific backing, or at least mentions scientists. Also interesting that the UK’s Organic Trade Board, tweeting under @whyiloveorganic, pops up.

While I don’t have the answer to what exactly are the best products to buy organic, I will be interested to see how these trends change over time. Right now, the volume of conversation is lower than I expected, at just over 100,000 mentions in 6 months in everything from tweets to recipe blogs to Facebook conversation. I think we will see volume growth as consumers continue to get more education on the importance of organic, and brands like our client, Horizon Organic, have the kind of distribution that make organic increasingly accessible.

Abundance of Choice, Online and Offline

Room 214, January 19, 2011

The Whole Foods in Boulder is somewhat of a cultural epicenter. To better support this, the store recently went through a huge renovation. They opened their new “wing” with an enormous amount of prepared foods and a Dean and Deluca-esque selection of gourmet meal components. Behold below, one of two food bars focused on olives. Just. Olives.

And fear not a rush on aged cheddar. They are prepared.

I am totally, completely overwhelmed by this new store. It’s impossible for me to navigate through the choices in any effective way. I have to have tunnel vision to get in and out of there as fast as possible. The abundance of choice is driving me to simply choose less.

Just last week, a partner of ours asked me a question about a new online social service, assuming that I would be using it. I was not. Every year, I see buzz about hundreds of unique online services all targeted at solving different, unique problems in my life. Yet, with also those services out there trying to solve my problems, here is what I sign into almost daily:

  • Mail: Gmail and Room 214 Gmail
  • Social: Facebook and Twitter
  • Productivity: Google Calendar and Basecamp
  • Fun: Gilt Groupe/Groupon/Amazon and Epicurious

I use either Facebook or Twitter to sign into a wide variety of other services, including online publications and commenting platforms. I’ve got a few things I use weekly, like LinkedIn, but in general that’s about it. As an online consumer, there are only so many things that I can do well, and so many things I can master. And I WORK in this space.

The abundance of HOT! NEW! SOCIAL! tools out there is overwhelming to everyone, and it’s likely really overwhelming to your customer. You can’t expect your customer to understand that you have information on Foursquare, a blog, a Twitter handle, a contest on Facebook, a game on your website, and a branded mobile application. Spend time understanding how your customers behave, what their interests are, and how they explore these online. Most importantly, understand the tools your customers use to answer questions in the purchase cycle.  Then pick a few tools that your brand can properly manage and your customers can properly utilize and understand. As a consumer, it’s not easy to cut through the noise. Brands that understand and cater to this will be poised for success.

Getting Political With Social Media

Room 214, November 2, 2010

We’ve been pretty excited about work we’ve been doing with Linkfluence, a cutting-edge firm out of Paris (ooh la la) that, in their own words, analyzes, segments, and maps conversations taking place in social web communities. Essentially, they’ve analyzed and mapped the social web in France, the UK, and the US. In 2009, based on their mapping of the US, they launched a site called Politicosphere, which gives an insightful look at how (or if) political conversations track through the online political community.

As tomorrow is election day, the online world is buzzing with political conversations. As we are in the process of working to relaunch and run Politicosphere, I’ve got the intersection of politics and social media on my mind. On that note, I want to draw attention to an interactive map the New York Times put up. This map looks at Twitter buzz around individual candidates’ Twitter handles, including their own tweets, tweets to them, and their tweets retweeted.

If you’re sitting in front of your TV tomorrow night, watching the election results, I highly recommend you practice some media multi-tasking and watch this along with results. It will be interesting to see how big wins, big losses, and tight races pace with Twitter buzz.

iPhone, Facebook, oAuth 2.0 and the Graph API. A Tutorial, Part 2.

Room 214, June 29, 2010

NOTE: I’ve moved the source code for this project to Git Hub, please get it here:


In part 1 of this tutorial we walked through obtaining an oAuth 2.0 access token from Facebook via an iPhone (or any iTouch device).  If you wish to go back and review the oAuth 2.0 process in some detail HERE.

iPhone oAuth Facebook login and extended permissions images

Facebook Login and Extended Permission Dialogs

In the second part of this tutorial I’ll show you how to leverage my pseudo-API to:

  • Login to Facebook using oAuth 2.0
  • Request extended permissions for your mobile application (photos, videos, publish stream and offline access)
  • Get your profile data
  • Get your friend list
  • Get your feed
  • Post to your feed
  • Post a photo (via a local image (UIImage) not a url)
  • Get metadata
  • Delete a feed post (via a Post)
  • Get search results
  • Get (and display) the author’s avatar


There are 2 APIs being talked about in this tutorial. To avoid confusion, I’m going to refer to them consistently as Facebook’s  ‘Graph API’ and my ‘pseudo-API’*.  Facebook’s Graph API is the stuff we’re interacting with via HTTP Get and Post calls.  The pseudo-API is the Objective-C/iPhone code that’s facilitating the interaction.

* I call it a pseudo-API if for no other reason I haven’t proven to myself it supports 100% of the Facebook Graph API functions.

An aside about my API design philosophy:  I could have written the pseudo-API to be much more robust and feature rich, with exceptions, logging, auto-magical json parsing, full featured functions like ‘getMyWallFeed’, etc.  However with robustness and features comes complexity and dependencies.  I kept everything aside from the absolute core functionality required to read/write data from/to the Facebook Graph API out of this implementation.  In short, I’ve left it primitive enough that anybody should be able to extend/wrap it easily, if they see fit.

The pseudo-API has only 3 classes.  The core functionality lies in the FbGraph.m file.  The other two classes support this core class.  FbGraphFile is used when uploading a file to Facebook.  FbGraphResponse is, I would hope, self-explanatory.

We’re going to skip over the steps required to create a Facebook application.  I covered that in Part 1:  iPhone, Facebook, oAuth 2.0 and the Graph API.  A Tutorial.  If you completed part 1 of the tutorial, you can use the same Facebook application without modification here.

Sample Code:

Creating the FbGraph Object

Before we can interact with the Graph API, we need to make a connection to it. And before we make a connection to it, we need a FbGraph object instance.  We do so like:

self.fbGraph = [[FbGraph alloc]initWithFbClientID:client_id];


FbGraph *fbGraph;


NSString *client_id = @"123145257717248";

The client_id should be YOUR Facebook application id.  I’ve left my application ID in here for no other reason than the tutorial code will work ‘out of the box’.

The login process

Now we have our fbGraph object instance, we’ll want to ask Facebook for a login screen.  Additionally we’ll need to let Facebook know the extended permissions we’re requesting for our app.  Here’s the code to do that:

[fbGraph authenticateUserWithCallbackObject:self andSelector:@selector(fbGraphCallback:) andExtendedPermissions:@"user_photos,user_videos,publish_stream,offline_access"];

There are 3 major things to note in this line (found in oAuth2TestViewController).

1)  We’re asking the fbGraph object to initialize the authentication process by calling the function: authenticateUserWithCallbackObject

2)  We’re setting a callback object (self) and a callback function (fbGraphCallback).   This object and function will be called upon completion of the oAuth authentication process.

3)  We’re requesting extended permissions:@”user_photos,user_videos,publish_stream,offline_access”

When this function is called, the pseudo-API will find the root application window**, stick in a UIWebView, and ask Facebook for a login screen (passing along your client_id and requested extended permissions):

NSString *url_string = [NSString stringWithFormat:@"", facebookClientID, redirectUri, extended_permissions];

**-There’s a second authenticateUserWithCallbackObject function that allows you to specify a specific view you wish the login screen to be anchored/rendered in, if you don’t want it to render within the root view of your application.  Look at the FbGraph class for further details.

Note the ‘display=touch’ parameter.  It tells Facebook we’d like a login screen optimized for an iPhone/iPod touch screen.

Now that the process is started the UIWebView will render the login window that Facebook has returned to us.

After you’ve successfully authenticated to Facebook, you will be presented with a second screen with an extended permissions request dialog.  2 things to note here:  First, all permissions are unified into a single step.  Second, after you’ve approved the permissions, you won’t have to complete this step or see this screen again (so long as you don’t revoke the permissions).

Under the Hood of the Authentication Process

There’s some http redirects involved with the oAuth 2.0 (User-Agent flow) login process.  The FbGraph object is a UIWebViewDelegate, one of the functions associated with this delegate class is: webViewDidFinishLoad.  This function is called several times during the authentication process.  When the URL contains “access_token=” we’re golden.  We’ve successfully logged into Facebook.  When the pseudo-API sees this string, it parses out our oAuth access token, stores it to a class level variable, removes the UIWebView we inserted and finally calls the callback function we defined, returning control to your application.

The Rest of the Pseudo-API

The core of the pseudo-API is about 250 lines of code (including whitespace and comments), which is very little indeed.  This is possible because the Facebook Graph API does everything via simple HTTP Gets and Posts.  In fact, once you’ve figured out how to do Get and Post with the Graph API, you’ve pretty much figured out everything.

If you’re familiar with the current Facebook Connect implementation, you’ll immediately notice Graph API is immeasurably less complex and more consistent.

So, I could go through and explain how everything works in painful (and highly repetitive) detail…but I’m going to peace out, let you read over the code, dissect it, add some breakpoints and get your hands dirty.

FYI:  There is very intentionally very little UI in the app. Rather than having you, the reader, have to figure out my UI conventions as well as Interface Builder, I’ve kept it simple and dumped most all output to the debugger console.  The code is simple, the pseudo-API is simple, the Graph API is simple……

I hope you take a look at my pseudo-API and agree, it’ simple…that’s the idea.

If you find this post useful, if you include this code or the concepts you learned here in an app, if you extend this into a more full featured API….I’d love to know!

Happy hacking.



Sample Code:

The Wisdom of Crowds

Room 214, June 22, 2010

I wonder if James Surowiecki thought that crowdsourcing was poised to become an internet hot topic when he wrote The Wisdom of Crowds. Whether or not he knew, his book certainly got to the strategic core of the why’s and how’s of the power of the crowd. I read that book in 2004 and I was simply passionate about it. I wanted to understand how to better harness the concept of aggregate thinking (not crowd thinking) to make better decisions.

Throwing money into the abyss?

I was quite excited when Kiva first opened its (virtual) doors. Kiva harnessed the power of storytelling, as well as ease of online payment, to help online individuals make a difference they felt connected to. I was equally excited when I watched the rise of crowdsourced funding in the startup world. I believe there is value in this. I know some people who argue that it’s just like buying a lottery ticket; you’re putting in money with no real chance at return. I like the idea, however, of supporting projects that I see as having social value but are not in the non-profit sector.

Small money to big money

So I gave money to Diaspora, the damn-the-man Facebook rival that got some attention this spring. A small part of me wanted the t-shirt that came at the $25 donation level so I could sport it like an indie band shirt. A large part of me was simply excited by the fresh-thinking college boys who were going up against a giant. At $25, I wasn’t in for much, so I committed. It turns out that 6,478 other people felt the same way. The project came it at 2006% of its original goal.

Let the crowd decide

Diaspora utilized Kickstarter, a website that allows startups to raise funding through micro-payments. Here’s why I think Kickstarter has it right: The model is set up so that, if a startup hits its goal, donors are charged. If it doesn’t hit its goal, the assumption is that the idea isn’t strong enough to fund, and no donors are charged. Neat. It takes the wisdom of the crowd and applies it to projects.

So now this idea is hitting public radio. Why is this so incredibly cool? Because individuals can pitch stories, multiple individuals can provide funding, and then a professional produces it. Many ideas are pitched, only the good ones get funded, and we all enjoy a better public radio. To me, this is huge incentive to fund. I’d certainly prefer to give money for a story than to give money for an NPR tote bag.

iPhone, Facebook, oAuth 2.0 and the Graph API. A Tutorial.

Room 214, May 25, 2010

NOTE: The source code for this tutorial is still linked below, however the FULL Facebook/iPhone Graph API can be found here:

The new Facebook Graph API looks to be the cat’s meow, the bee’s knees, the coolest thing since sliced bread. Ok, that’s a bit much… but it is a whole lot more powerful, easier and cross-platform consistent than the previous plethora of Facebook APIs.  The Graph API was announced at Facebook’s F8 conference just over a month ago.  At the time of release, I was surprised no iPhone SDK was made available. I fully expected that at least an unofficial SDK as well as full blown tutorials would be out en-mass by now, but to no avail.

Not nearly patient enough to wait for an official SDK or iPhone API from Facebook, I asked Google how to “Facebook oAuth 2.0 iPhone” and was disappointed with the results. It turns out, there are very few, woefully incomplete examples of how to authenticate to Facebook via oAuth 2.0, from an Objective-C / native iPhone application. The best implementation I found was a pseudo API, however I don’t care for it since it uses the old Facebook Connect authentication scheme, then implements the graph API on top of that layer.

Adding insult to injury, there was lots of news last week about the Android Graph API but no love for the iPhone:

“Facebook’s mobile development team soft launched a Facebook SDK for Android, bringing functionality that was previously only available on the iPhone to the Android platform. It gets better: Facebook gave the Android platform a de facto exclusive on two of its newest initiatives: Open Graph APIs and OAuth 2.0.”

Will M,

Aside:  My theory on why there’s not iPhone/Objective-C API is:  That functionality is going to be directly (and deeply) integrated in the forthcoming iPhone OS 4.0 (June?).

All of that being said, I slashed, burned and figured it out.  Here’s the result, a very simple end-to-end example of how to connect to Facebook via oAuth 2.0 on the iPhone.

Part 1: Connecting to Facebook with oAuth 2.0 on the iPhone

Part 2 of this series will cover how to interact with the Graph API.

NOTE: You can go to to play with the Graph API, directly in your browser.

Assumptions and requirements:

  • Facebook: You’ve installed the Facebook Developer Application.
  • iPhone: You’ve installed the iPhone Xcode SDK installed (I believe most any version will work) and have a some level of knowledge about objective-C, Interface Builder, etc.

Facebook Setup

  • Go to the Facebook developer App and install if you haven’t already
  • Once you’ve installed Setup a New Application
  • Next you need to configure a few app settings:
    • BASIC tab: enter an Application Name
    • AUTHENTICATION tab: un-check and leave everything blank
  • Save changes.  Save yourself some frustration and make note of the Application ID now.

Sample Code:

[download id=”3″ format=”1″]

iPhone Setup

Open up the Xcode project. There’s only 2 functions at play here:


This function is called as soon as the view has completely loaded.  It then asks the UIWebView to begin the oAuth 2.0 authorization process by sending a request to:

(NOTE:  display=touch, we’ll get back to this in a bit)


This function is called several times throughout the login process execution. These multiple web view finished calls have to do with server redirects within the oAuth 2.0 process flow. We’re only interested when the requested URL contains:


And the associated obj-c code to identify when this occurs is:

NSRange access_token_range = [url_string rangeOfString:@"access_token="];
if (access_token_range.length > 0) {

Then, this code extracts the oAuth token out of the URL we received back the Facebook oAuth servers:

int from_index = access_token_range.location + access_token_range.length;
NSString *access_token = [url_string substringFromIndex:from_index];

iPhone Configuration

In oAuth2TestViewController.m update the client_id variable with your Facebook Application ID:

/*Facebook Application ID*/
NSString *client_id = @"YOUR_FB_APPLICATION_ID";

Running the App

Once you’ve pasted your Facebook Application ID into the right place, you should be able to run the application straight away.

When you first launch the simulator oAuth2TestViewController it will automagically initialize the oAuth login procedure via the webView object. Barring any errors or configuration issues, you should get a Facebook login screen optimized for an iTouch device (NOTE:  thus the display=touch we made note of above). Finally after you’ve logged in you’ll see your oAuth access token in the Xcode debug console.

Sample Code:

[download id=”3″ format=”1″]

That’s it. No bells & whistles, no buttons, no Interface Builder, no UITableViewControllers; just the bare minimum required to get an oAuth 2.0 token via an itouch device from Facebook.

In part 2, we’ll interact with the Graph GETing from and POSTing data to it, using a pseudo-API.

Find me here: @dominicdimarco

NOTE: (5/27/2010 11:09 AM MST) The original post has been updated incorporating feedback from comments below.