Event connector in the directory

Yellowpages
After three submissions, and two rejections, Event Connector was finally accepted into the directory. I was initially rejected for not having an icon, which was my fault, but the second rejection was for displaying secret events, which I never understood and filed a bug on. I didn’t make any changes to fix that, since I had no clue what they issue was, but I resubmitted it unchanged and this time it was approved!

I’ve started to get some more users through the listing, and had a really helpful conversation with Nikki Sullivan that led me to make changes to the UI. I added some links to reach the main page, with a sidebar icon for the app as well as a link in the title of the profile box. I love getting this sort of help, thanks Nikki!

I’m still unsure who’s going to be using the app. My initial plan was to target promoters, and have them spread the app as a flyer for a particular event. It looks like it’s more popular with guests so far, and they’re using it as a hub to view and investigate all their events. If that’s the direction my users are taking me, that suggests some extra features:

  • A profile button that displays all the upcoming events someone is attending.
  • List all the events that your friends are going to.
  • A cleaner, more compact view of all the events.

This would take it in the direction of being a SuperEvent organizer, rather than the promotional tool I was imagining it to be. I’ll be thinking about this some more, and trying to understand how people are using it.

Funhouse Photo User Count: 1,154 total, 59 active. Much as before, I’ve made no changes in the last two weeks, and the growth rate remains the same.

Event Connector User Count: 27 total, 15 active. After its first day in the directory, it’s picked up a some users, though I haven’t seen it used to promote an event yet.

My conference wishlist

List

I stumbled into thinking about organizing conferences online by accident. I was looking for a way to see which of my friends were attending Defrag, there wasn’t anything out there that let me see that, and so I built a Facebook app to solve my problem.

That went down well, so I generalized it into Event Connector, and went looking for more events to try it on. I want to see if its simple services solve painful problems for guests and organizers, which types of events are the best fit, and build a relationship with some early-adopting event promoters to learn more about the market.

I’m also thinking about the folks over at EventVue. They’re building a much more advanced system, a suite of online tools to let conference organizers offer guests lots of interesting services. They’re a sharp team, just graduated from TechStars with an angel round under their belt, and we’ve chatted in the past about their work. I’d like to be able to back up any advice I offer them with some concrete data, and the only way to get that is to try a few things in the wild.

As an attendee, here’s my personal pain-points with conferences:

I don’t know who’s going.
I usually end up bringing up conferences in conversations or emails with acquaintances in the runup to a show, but I don’t always remember, and I don’t ask everyone. Meeting old friends and connections is a big reason for going to conferences to me, so anything that increases my chances solves a big problem.

Nobody else knows I’m going. For both practical reasons, and yes, status reasons sometimes, it’s a benefit to me if I can advertise my attendance at a show. If I’m speaking, or doing something else prestigious there, I would like people to know that too. It’s even useful for past conferences, think of the strings of ribbons people wear to SIGGRAPH to demonstrate they’re old-timers.

It’s hard to organize informal get-togethers. Birds-of-a-feather sessions are usually the most valuable part of the show, but often it can be hard to arrange them, hear about them, and understand which are likely to be most useful.

Discussions finish at the end of a session.
Of course, small groups usually peel off and continue chatting about ideas that came up from a presentation, but these are fragmented and there’s no process beyond arranging to start an email thread to continue them. I’d love to have a online area for each session where questions and discussions could go on past the conference.

Funhouse Photo User Count:
1,143 total, 60 active. Continuing the trend of gradual growth.

Event Connector User Count: 19 total. I reached out to a few prominent people in the tradeshow world like Rich Westerfield, Sue Pelletier and Tim Bourquin. Rich put up a blog post which was picked up by a few other blogs, and that’s helped boost my total. The directory submission is in the queue again. My goal is to get at least one more event using a connector within the next week.

Facebook User Statistics

Funhouse_users
It’s really important to collect a few important statistics to measure a project’s progress. One of my goals is to create an app that has over 25,000 users, an arbitrary number but one that’s high enough to use as evidence that it appeals to people outside the early-adopter geek crowd.

I’ve been collecting daily statistics since I launched Funhouse Photo, and I wanted to do analysis on them. At the top is a static image of the graph I created using Google Spreadsheets, and I’ve included a live link below. I’d never used the Google office products before, and I was pleasantly surprised. They’ve done a good job replicating the usability of a desktop app on the web. Unfortunately my OS X Firefox 2.0.4 wouldn’t display the graphs correctly, and neither would Safari. Luckily, if strangely, FF 2.0.4 on Vista did work, so I was able to complete the job using that.

Visualizing the data immediately gave me two important insights:

  1. There’s a knee in the total user curve, and that corresponds to my introduction of asynchronous image loading. This is strong evidence that it’s something that puts users off using the app, and so makes improving that seem important.
  2. It’s hard to see any other changes in the adoption curve’s slope. This means that all the other upgrades I’ve done to the app haven’t had an impact. Adding more effects, including notifications in user’s feeds and the profile button all failed to increase adoption. Getting a positive review didn’t result in more users.

Facebook recently introduced a "More Stats" option for all apps. This gives you access to a lot more information about the number of adds and removes, as well as a sample of the actual urls people are visiting. There’s no way to download the history, so for now I’ll keep manually entering them every day.



Funhouse Photo User Count: 1142 total, 74 active. Still the same slow growth trend. Extrapolating, the entire planet should be using the app in around 411,000 years.

Event Connector User Count: 11 total. I’m still waiting to hear back on the bug I filed about secret events, and on my resubmission to the directory, but I am talking directly to some event organizers about trying it with their meetings.

FBJS: Facebook JavaScript

Coffee
The best place to start learning about using JavaScript within Facebook apps is the developer wiki. It can be a bit disorienting at first, because they’ve constructed a very effective security sandbox. The only calls you can make are those they explicitly provide, so many common calls like alert() are not available.

There’s no list of all the legal function calls you can make, though the wiki does cover the DOM element calls. I’ve put in a request to the Facebook team to document the whitelist they use to parse scripts, but for now you need to use trial and error to find out which are filtered out. Some are obvious, anything that would let you add arbitrary unchecked content to the page, like document.write or eval(), are never going to be supported.

I had to write a script blocker for SearchMash, so I know how tough it can be. I’m very impressed with the job they do, managing to identify variables within JS and put them in a private namespace by adding a prefix is very clever. I do wonder if anyone’s gone through the full Cross-Site Scripting Cheatsheet though, since there are some funky methods of concealing scripts within html, and even after a few weeks of work I wasn’t able to exclude all of them. I had to deal with arbitrary external pages, so maybe Facebook can avoid those issues by refusing to parse anything that looks even slightly odd, since most of the exploits rely on ill-formed markup that still works in many browsers.

One of the interesting restrictions they have is that scripts in profile boxes will only be run as the result of a user action. This is a nice balance between allowing the app to do interactive things on the profile, but keeping the app from annoying the user when they’re not interested in it.

I’ve already done a big post on Facebook’s MockAjax, but a lot of the same points apply to general FBJS development. You’ll want to get FireBug to help you debug, and expect to spend a lot of time looking at the actual source of the pages Facebook is giving you. Luckily, if you’re the developer they include the FBML before it was processed by their parser, in comments towards the top of the page. This can be a real life-saver when you’re trying to work out what went wrong.

Funhouse Photo User Count: 1124 total, 104 active. Another day of steady growth. I’m going to see if I can chart the statistics I’ve been gathering here, but I’m pretty sure it’s been almost linear since I launched.

Event Connector User Count
: 9 total. Still need to research what they mean by ‘secret’ events, and how to exclude them, and then I can do another directory submission.

Facebook debugging in PHP

Mantis
I’m using PHP to develop my facebook apps. I’ve never done server-side development before, and one of the more awkward aspects is debugging. Luckily, I have done plenty of other remote debugging before, and a lot of the general techniques cross over. Here’s what I use at the moment:

Error logging to a file

PHP writes out a message to /etc/httpd/logs/error_log whenever it hits a syntax error. I generally run this command line to see the latest errors:
tail -n 500 /etc/httpd/logs/error_log

You can also insert your own logging messages into the file using the error_log() function.

Error logging to the HTML output

Sometimes it’s quicker to see the errors right in the browser as you try to load the page. I don’t use this much for syntax errors, but I do often add print() statements to show debugging information. One of the most useful tools is the print_r() function, which displays all the internal elements of arrays and objects.

You can enable inline error reporting by changing the php_flag display_errors line in your php.ini file to ‘on’ if you want to see syntax errors too.

Ajax errors

Debugging Ajax-style server requests was very tricky. One way I found in Facebook was setting the response type to RAW, and then setting that response text directly into a div. Even better was using FireBug, a great extension for Firefox that gives you a lot of information about what the browser is up to.

Choose Tools->Firebug->Open Firebug from the main menu, and click the checkbox in the lower pane that appears to turn it on. Navigate to your ajax page, and click on the Console tab in the FireBug pane. You should now see a POST entry appear for every ajax call you make, with the time it took to get a response. Twirling that open shows a complete description of what you sent, and what the server returned, in Headers, Post and Response tabs.

Advanced debugging

My needs are simple enough that I haven’t moved beyond these basic logging techniques, but you can check out this page if you’re interested in stepping through code and inspecting variables using a traditional debugger with PHP.

Facebook App User Counts:
Funhouse Photo – 917 total, 57 active. Still very unimpressive growth.
Event Connector – 4 total. I’m giving Google adwords a try, to see if I can reach event organizers with he keywords ‘facebook event promotion’, and a very low budget.

Event Connector launched

Defragconnectorscreenshot

I’ve just finished a follow-up to Defrag Connector, Event Connector. It’s got the same functionality for guests, showing who in their social graph is going. The main improvement is that you can now do this for any Facebook event, with a main page that lets you pick from the ones you’re attending. It also lets you add an event button, with a link to the connector, to TypePad and Blogger blogs.

My strategy is to appeal to event organizers, and let them drive the distribution to their guests. That just pushes the distribution problem up a level of course, now I have to reach organizers rather than attendees.

I’m counting on organizers being a lot more motivated than guests to search out promotional tools.  If that’s true, then even fairly passive marketing tools like appearing in the apps directory and word-of-mouth should be effective in reaching them. I’m starting the ball rolling by reaching out to some of my own friends who do a lot of event promotion, and we’ll see where it goes from there.

Here’s the pain-points I’m trying to address:

  • Organizers: Persuades people to attend by supplying the social proof that others they know are going
  • Organizers: Lets people know that the event is happening, by spreading buttons on people’s profiles and blogs
  • Guests: Answers the question ‘who do I know that’s going?’
  • Guests: A simple way to advertise their support and attendance at an event

Funhouse Photo User Count: 917 total, 57 active. Still the same growth as the last week. I don’t have any ideas for making it more involving yet, at least not any that I can do in the time I have available. The statistical usage analysis definitely has to be the next step here, I need to understand what’s working, and what isn’t.

Defrag Connector reaction

Surprisedkid

I’ve had a great response from Defrag attendees to the Connector. Eric sent out a message and put up a blog post, and Brad Feld and Jeff Nolan both had good things to say about it on their blogs. I’m very proud to see some of the people I read daily giving it a thumbs-up.

The app has 95 users, even though there’s only 63 confirmed guests at the event, which is interesting! I wrote it in a generic way, so it will work with any Facebook event if you supply the id in the URL parameters, and it will pull the attendee information, name and logo from the API. I will see about putting up another app that’s not restricted to Defrag, using the same code with some UI added to let you pick and event.

Defrag is going to be a lot of fun. Liz will be joining me after the conference, and we’ll be exploring Colorado for the rest of the week, since neither of us have been before. Liz’s cousin used to live there, and recommended a road-trip, staying in Boulder and then doing a loop through the mountains. It’s a shame we won’t be bringing our mountain bikes, but hopefully we can manage some cross-country skiing and hiking.

Funhouse Photo User Count: 903 total, 57 active daily. Still the same slow growth pattern of the last week. I won’t be making any changes this weekend, since I want to concentrate on some of my other projects.

Defrag Connector done

Defragprofile

I finished off Defrag Connector. You can now search for friends who are going, any mutual friends you share with those attending, and add a button to your profile.

It’s all unofficial at the moment, but I’m checking with Eric Norlin to make sure he’s ok with me publicizing it a bit more. I wrote it to scratch an itch, but I think it could be handy for other attendees too.

Technically, it wasn’t too hard. The biggest hurdle was doing the mutual friends check, since the Facebook API doesn’t offer a direct method for that. Instead, I’m checking every attendee against every friend of the current user, one attendee at a time. This needs an API call per attendee, so it can take many seconds. Since Facebook will show an error screen if you take too long returning a page, I had to implement an ajax callbacks to deal with a few attendees at a time, and update the page. It’s the same technique I used for to solve Funhouse Photo’s loading time problems. It works well with my few dozen friends, I hope it will scale to some of the monster friend counts some of the attendees have!

I also discovered that you can’t add images directly hosted by facebook to the user’s profile, so instead I had to automatically copy the logo onto my server, and then link to my copy.

One nice bonus of creating this was hearing from Rob Johnson of EventVue, a tech stars company that’s got some great ideas on how to create kick-ass conference networking tools. It’s great to see how many good companies are emerging from the program. Rob told me the secret was how clued-in and involved their mentors are. I’m looking forward to continuing the conversation over a beer at Defrag.

Funhouse Photo User Count: 871 total, 54 active. Still not showing any increase in the growth rate. I think my next step should be to add a lot more instrumentation to the app, so I can tell how people are using it, and try to identify parts of the user experience that aren’t clicking. Incidentally, the total now seems to be updated daily, like the active count. I miss the addictive thrill of seeing that tick up through the day!

Defrag Connector

Defragbuttonpete
I’m getting ready for the Defrag conference in November, and wanted to see which attendees were  friends, or even friends-of-friends. The organizer, Eric Norlin, has created a Facebook event, and a lot of the attendees have signed up.

In Facebook, the only way to interact with that information is by browsing an alphabetical list of the attendees. There’s no way to sort or filter them by their closeness in the social graph, or by shared networks.

This seems like an opportunity to build something better using the Facebook API. My goal is to create a simple application that lets me see attendees who I’m socially related to. That seems both technically straightforward and useful to other people who are either attending, or deciding whether to attend.

I’ll be spending my spare time putting that together, I’m hopeful it won’t take too long to get it functional. So far, I’ve added the application information to Facebook, and I’ve started with Funhouse Photo’s code as a template. The challenging bit is going to be efficiently querying the graph, since it will require a lot more database code than I’ve written before.

Funhouse Photo User Count: 839 total, 98 active. This is a nice increase in the total count, and the active users are up a bit. It’s too early to say if this is related to my changes or just noise, since they’ve been in for less than half a day, but it’s good to see nonetheless.