Using Twitter’s Lead-Gen Card to Recruit Beta Testers

It turns out that it’s pretty easy to co-opt Twitter’s Lead Generation card for anything where you want to gather a bunch of e-mail addresses from your Twitter community. I was looking for people willing to alpha test a little side project of mine, and it worked great and didn’t cost anything.

The tweet itself:

I created it pretty easily:

  1. First, go to, log in, and go to “creatives”, then “cards”.
  2. Click “Create Lead Generation Card”. It’s a big blue button.
  3. You can include a title and a short description. Curiously, you can also include a 600px by 150px image. This seems like an opportunity to say a bit more about what you’re doing.
  4. You do have to set up a privacy policy URL. I used a simple google doc.
  5. You also need to configure a fallback URL, which is where people will go if they don’t have a Twitter client capable of the one-click signup. I used a Google form, which let people give me their e-mail addresses directly.

And that’s it! Tweet enthusiastically, then wait patiently, because if you don’t integrate your Twitter card with your CRM, you have to wait ~24 hours for the download link to appear in the Twitter cards manager. The resulting CSV looks like this:

Timestamp,User id,Name,Twitter handle,Email
2013-12-12T23:36:05,774485611,Robots Rule,RobotzRule,

A little bit of awk later and I had a list of e-mails ready to go. I ended up getting 49 responses through the Google form and 197 through the Twitter card. It was easy and I’ll definitely do this next time I need to collect people’s e-mail addresses for a project.

Book Book — Goose!

I like to read. I love bookstores, I like to wander, and to find things that I didn’t know existed. But bookstores don’t have every book that exists. Amazon has most books, but search is a terrible way to discover new things. Amazon’s recommendations most likely maximize purchases, but are a terrible way to find something you didn’t know you were looking for (look at a book like Effective JavaScript, for example, and you get recommendations for Async JavaScriptBuilding Node Applications with MongoDB and BackboneJavaScript Enlightenment). Similarly, top 100 lists are great at showing you popular things that you’re probably more likely to buy, but not very good at helping you find a book with a story or idea that’s unlike anything you’ve read lately.

There must be a better way to explore books.

A random way to explore books would be a good way to start.

Hence, bookbookgoose. Browse randomly. Enjoy!

 Hint: use the ‘n’ key to go forward quickly. I find about .2% of the books are awesome.

Update: you can now find @bookbookgoose on Twitter, sharing one random book per hour.

Update: Dustin Kurtz at Melville House had an eloquent writeup of the beauty in this random literature.

A quick twitter bot, @bc_l

Several months ago, on a whim inspired by an off-hand comment from Chris, I created a bot to bring the wonders of the Unix bc language to twitter.

bc is a command-line calculator that’s fast and has the capacity to do some fairly complex math.

Try it out on the command line:

echo '100 / 10' | bc -l

…Or by sending a direct message to bc_l (if you follow bc_l it will follow you back within a few hours).

I released the code under GPL, and it’s available on github:

John Cook mentions the bot and makes some great observations in his post three surprises with bc.

Art and Technology: Seven on Seven

I’m honored and excited to be participating in Rhizome’s new conference Seven on Seven, where technologists and artists are paired up to create a completely new project in 24-hours.

The formal description:

Seven on Seven will pair seven leading artists with seven game-changing technologists in teams of two, and challenge them to develop something new –be it an application, social media, artwork, product, or whatever they imagine– over the course of a single day. The seven teams will unveil their ideas at a one-day event at the New Museum on April 17th.

I really love this idea because the time constraints and the inherent discomfort of the situation (working in an unfamiliar space with an unfamiliar person) makes it likely that we’ll be able to accomplish something creative and unexpected. Or else it will go completely awry, which will still be amusing for the audience.

I’ve had a lot of fun and been able to work on some interesting projects at hackathons in the past, and I hope this one will be even better.

The event has been covered by an amazing assortment of blogs, including TechCrunch, BoingBoing, Art Fag City, Stowe Boyd and Andrew Parker.

Yahoo OpenHackNYC: The Cake

Last weekend Yahoo came to New York for an Open Hack Day, and it was great!

I was invited to speak on a panel on semantic metadata, moderated by Paul Ford ( along with Marco Neumann (KONA) and Paul Tarjan (Yahoo/Search Monkey). The panel was a lively discussion, and we got some great questions from the audience.

After the panel, I stayed around to participate in the hack competition. Yahoo! provided a fantastic space, with free-flowing coffee, snacks, comfy chairs and plenty of Yahoo folks and other hackers around to give advice and play foosball with. I teamed up with Diana Eng, Alicia Gibb, and Bill Ward to create the Cake!

The cake is attached to a laptop via USB. A program running on the laptop accepts a delicious tag and retrieves a list of recent popular sites for that tag from the delicious API. Finally, it iterates through each URL, downloads the page, and computes the sentiment of that page relative to the tag — basically, is the content of the page positive, neutral or negative?

The signal is output to an ardiuno (hidden in the middle of the cake) which turns on the appropriate set of LEDs. There are four sets of LEDs on the cake, one in each quadrant of the delicious logo, one each for positive sentiment, neutral or inconclusive sentiment, and negative sentiment, and, of course, one to let us know that the cake is turned on.

I wrote the sentiment classifiers between around 3am and 6am Saturday morning, so they really were a hack! I trained them on movie reviews data, working with the assumption that 5-star reviews contain positive terms and 1-star reviews contain negative terms. I wouldn’t recommend this approach for a serious attempt at sentiment analysis, but it worked well enough.

We won the food/hardware hack prize, shared with the awesome MakerBot team!

We had a great time creating and presenting the hack. Thanks, Yahoo, and most of all, thanks to Alicia, Bill, and Diana for a really fantastic, silly weekend.

Further coverage:

Following a group of Twitterers without exhausting SMS

I’m at SXSW, and I want an ability to see the latest Tweets from the group of Twitterers that I follow who are here in the area. I also have a limited number of text messages on my phone (1500, but still).

I coded up a quick app that allows you to great a group of twitterers and see their latest tweet on a mobile-friend page. Check it out.

Comments are welcome!

Create a group Twitter account

Twitter rocks. It’s useful for all kinds of things, but especially for chronicling a live event as it happens, including the pre-event discussion and post-conference wrapup.

We’re very excited to be hosting NewB Camp here in Providence, RI on February 23rd. In preparation for the event, Sara created a NewBCamp Twitter account and I coded up this quick script to pull in all tweets related to the conference.

It examines all of your followers tweets for a particular phrase or tag, and then reposts those tweets containing the tag to its own timeline with the author’s name prepended. I’m running this as a cron job on my hosting account. You can see it in action here.

This is a quick hack. It has a couple of issue that I’m aware of:

  • Someone has to log in and manually add followers.
  • The Twitter API only returns the previous 20 friends posts, and it’s possible we might miss some if we have so many friends that the post rate exceeds 20/50 secs (our permitted API request rate).

I do hope that you find this useful for creating your own Twitter event monitor!

include("twitter.php"); // Twitter API class
// Available:

// configurable options
$twitter_user = "newbcamp"; // Twitter username
$twitter_pass = "passwordgoeshere"; // Twitter password
$tag = "newbcamp"; // tag for friends to use

$twitter = new Twitter($twitter_user, $twitter_pass);

$last_post = json_decode($twitter->getUserTimeline("json",$twitter_user,1), true);
$last_post = $last_post[0]['created_at']; // get the datetime stamp of the last post to the account

// get new posts from friends since last update
$friends_posts = json_decode($twitter->getFriendsTimeline("json",$twitter_user,$last_post), true);

foreach($friends_posts as $key => $post) {
 if (stripos($post['text'],$tag)) { // if the tag is present
  if ($post['user']['screen_name'] != $twitter_user) { // no infinite loops, please
   $new_post = $post['user']['screen_name'] . ": " . $post['text'];
   // post the new post to the newbcamp account with the user's name prepended

Update 10.16.2009: This script is basically superseded by Twitter’s lists feature. Use that instead!