Apple’s best-kept secret

Companystore

Photo by Ondra Soukup

Jeff Nolan just reminded me of one of my favorite parts of visiting the Apple campus in Cupertino – the Company Store. Despite the name it's not restricted to employees, and they have an amazing range of Apple-branded clothes, mugs, mouse-mats, none of it sold anywhere else in the world. It's been my secret weapon for the last few Christmases, there's something for everyone. As Jeff's lovely model demonstrates, they even have the cutest baby-wear:

If you have a loved one who's joined the Apple Borg, I guarantee some serious brownie points!

How to find Twitter communities from keywords

Glueconscreenshot

Twitter.mailana.com started by visualizing your circle of friends, but I want to show networks formed around places or ideas too. Now if you pick a keyword you can see how all the people who've talked about that term are connected. For example, the graph above is a screenshot from the social network that's formed around Gluecon.

So what's this good for? My favorite use is discovery, finding new people in an area I'm interested in. For example I've been learning Flash over the last few months, so I searched for the community defined by 'Actionscript'. Immediately I saw an interesting central cluster:

Actionscriptscreenshot

Looking up some of these folks, @mesh is Mike Chambers, a Flash expert at Adobe, @mdowney is Mike Downey a Flex/AIR expert, @ddura and @leebrimelow are Adobe Flash Evangelists, @flashchemist is Vipin Chandran, an expert Flex developer.

What's important about this list is that you know these are well-connected, active people in the Flash community. In a way their position in the graph is like PageRank, with each conversation a vote for their importance. Most other measures like follower count or update totals can be gamed, but someone's place in the overall network is much tougher to fake. Looking at the whole community around a keyword is a great way of discovering the most interesting people, something no other search technique can match.

Why building a startup is like tuning a radio

Radioboy

Photo by verhoogen.be

I love Joel Spolsky's latest column on the secrets to startup success, it ties together so many of the things I've been wrestling with as I get Mailana off the ground.

The key metaphor he uses is that any software development is like tuning a fiddly shortwave radio. You spend a frustrating amount of time fiddling with the dial listening to static (which is actually pretty mind-blowing once you know it's the echo of thunderstorms on other continents and exploding galaxies). Finally you hear a faint voice, and by carefully tweaking it gets louder. Eventually you get it just right and the station comes through loud and clear.

For a startup the signal you're searching for is customers saying "I want what you're offering". As I know from personal experience working on a long list of projects that I thought were fantastic but never resonated with a large audience, getting that response is hard. That's why getting initial users is so crucial, people are such complex beasts you can't tell what will work until you try it on some volunteers. It's also why listening intently to their reactions is vital. You won't get it right first time but you'll get hints on what you're doing wrong and the right direction to go in.

The other lesson Joel lays out is one that has stuck in my head since reading Paul Graham's essay: Your startup won't die as long as you keep coding. Every line of code represents a chance to tweak that dial, and as long as you're searching you have a chance of hitting that sweet spot. I'm hoping that the combination of frequent changes and listening to feedback will help me constantly improve Mailana for Twitter.

Thanks to everyone who's been giving me brickbats and bouquets on twitter.mailana.com, I hope this explains a little of why I'm so eager to hear back from you all!

Twitter’s best friendships

Friendlyhandshake

Photo by Jeff Bauche

mailana.twitter.com has imported all the messages from 250,000 of the most active Twitter users, which gives me the chance to answer some interesting questions. Who's getting the most out of the service? From the coverage you'd think tech celebrities but the top 50 relationships include none of the usual suspects. Instead it's everyday people talking about their lives in public. UKMelia and Ernmander have exchanged over 2000 messages, and Krowed from Tokyo has two of his friendships in the top 5, but only 68 followers.

Here's the top 10:

1. ukmelia ernmander
2. stefanomuti milaluna
3. dragon_harrower nerdynerak
4. m_non krowed
5. hitmix krowed
6. sabell nerdynerak
7. shaunduke mulluane
8. wherever devilbesideyou
9. carnager makochan200
10. darkfairymomma corruptor

How is the chart ranked? I count the number of conversations between every pair of people on Twitter, looking at how many @ messages from one person include the other's name. To score the strength of a relationship I'm using the minimum of the number of messages sent in either direction. So, according to my data these are the people who send the most tweets to each other out of the millions on Twitter, quite a distinction!

Get paying customers

Dollarcircle

The best part of blogging is the comments. My posts are usually about problems I'm wrestling with, so the ideas and reactions are incredibly useful. Unfortunately I went through a couple of rocky weeks with Intense Debate and lost some comments. Thanks to ID's Michael Koenig I'm back in business, but I wanted to quote one from Gist's Steve Newman that I thought deserved a post of its own. He commented on my Get Customers:

I
completely agree with this point. Exercise the app, label it whatever
you want (alpha, beta) but get it in the hands of users and setup the
necessary feedback framework to collect input and take action. On a
similar note, exercise your business model as soon as reasonable too.
Too often, startup companies keep the first day of revenue collection
on the horizon. Until you really start collecting dollars, you wont
know whether that business plan with the hockey stick growth really
does have a basis in reality. Being successful as a startup has
everything to do with building a product that people USE. Building a
business has everything to do with being nimble, adjusting and striving
to hit your goals in the real world, not in excel.

I couldn't agree more, though it can be a tough discipline to stick to! I always think of the hierarchy as feature, product, company. The key test of whether you're building a living company or just some cool technology (that only has a future if it's rolled into someone else's business model) is if you can persuade people to hand over cold hard cash for it.

How good is your social network?

Birdcouch

Photo by Riot Jane

Robert Shippey asked me a simple but intriguing question: What does a 'good' social network on Twitter look like? What makes it so tough is that it depends on what your goals are. Here's a couple of different answers:

If you want to strengthen an existing team or community

You need a network that's very tightly interwoven with thick links, where most of your contacts talk to lots of other people you know. The advantage of this structure is that it promotes trust, since if you betray anyone in the group they can retaliate by trashing your reputation with all your mutual friends. The deeper level of trust makes it a very safe environment to build friendships and collaborate.

That high cost for any transgressions has a flip side though. It's like a small town, the same mechanism also punishes non-conformity so it's hard to innovate or do anything controversial.

If you want to spread ideas

The most influential people have networks that connect lots of different groups of people. That means they tend to look like a wheel; the influencer at the center with links radiating out to people who are otherwise unrelated. The advantage of diversity is that you can act as the bridge between unconnected communities, so when a good idea appears in one area it can be transmitted to others where it could be useful.

Ronald Burt uses a closure metric to measure how tight-knit your network is. In simple terms, it's the chance that for any random person in your network, they'll know a second random person from your contacts. If everybody in your circle talks to everyone else, then that probability will be 100%, but if you're only connecting people who otherwise don't know each other it will be zero. I might add that to the profiles to give people an idea of where they fall on that spectrum.

How to permanently link to a Twitter profile portrait

Backwardsportrait

Photo by DerrickT

One of the most annoying bugs with twitter.mailana.com has been the missing images that show up in the graphs. I'm only able to scan Twitter every few days, and when people change their profile pictures the old links no longer work.

The ephemeral nature of the portrait links is a known shortcoming of the API, and I was getting a headache thinking about the possible ways to work around it. I'd either have to scan more often and tax both my and Twitter's servers, or creating a dedicated service that would handle the housekeeping of making sure the URLs stayed valid.

Then I discovered Shannon Whitley's SPIURL project, which offered a free static URL for any user's portrait image. Just link to http://purl.org/net/spiurl/<username&gt; (eg http://purl.org/net/spiurl/petewarden ) and you'll get the image data back for that user. I switched my graph viewer over to using those URLs, and now you should never see a missing image again. Thanks so much Shannon for implementing this!

You guys should talk

Straightfromthehorsesmouth

Photo by Brit

I realized yesterday that "You guys should talk" is the perfect tag line for Mailana. For almost anything you're trying to do, there's someone else out there who can help you and benefit themselves from getting involved. I've seen this so many times my life, win-win situations if you can just make the right connection between two people.

I'm a naturally pretty introverted person, if you use Brad's definition of an introvert as someone who recharges their batteries by spending time alone. While I like to think I'm still pretty sociable, I know how tough it can be to build up enough background knowledge on people to be able to suggest fruitful connections.

Mailana is about helping people connect by making it easy to share relevant information on yourself so you can find and be found by others. The best source for that description of what and who you know is your email inbox.

There's massive value to be unlocked in companies, and in our everyday lives from just being able to connect people. You can already see glimmerings of this in social networks like Facebook and LinkedIn which offer computer-aided ways to strengthen and navigate your relationships. Using the implicit data from our existing communications (like I'm experimenting with at twitter.mailana.com) we'll be able to build far more effective tools to link people together.

How to find people by location in Twitter

Compass

Photo by Junjan

One of the hardest things to do when you join Twitter is figuring out who to follow. Once you've added your immediate friends a good next step is people who live locally. There's a variety of ways to do this – first give http://twitter.mailana.com/find.php a try. Enter the name of your city or town, and it will bring up a list of everybody who's recently Twittered from there. It's a stepping stone to graphing the social networks for every location, so stay tuned.

Another good way to find local people is to use Twitter's built-in search. Enter your location in the 'Near this place' field and it will give you recent messages from people nearby.

To get a list of the most active and followed users in your neighborhood, go to http://twitter.grader.com/location and search for your home town. You'll see a ranked list, it's good to pick up on any local net celebrities you might not know about.

How to emulate near in the Twitter Search API using GeoPlanet

Atlassquashed

Photo by Nebarnix

Twitter's Search API is fantastic, but unlike the UI version they don't support using the name of a place to limit your results, only latitude and longitude. I couldn't ask my users to type in coordinates for searches, so I needed some way to translate the names into the form Twitter wants.

The process of converting from human names into coordinates is known as geocoding, and luckily there's some great free web APIs that will do the job for you. I chose Yahoo's GeoPlanet, they allow up 50,000 requests a month, and Tyler Hall has a great PHP wrapper ready to use.

I couldn't find a good example of actually using GeoPlanet in PHP, so I decided to kill two birds with one stone and publish my code as sample code for geocoding, and offer an off-the-shelf solution for anyone else who needs 'near' for Twitter searching. You can download geosearch.php
, and it's included below.

<?php

// Example demonstrating how to use Yahoo's Geoplanet API (via Tyler Hall's PHP wrapper)

// to emulate the 'near' parameter that's available in the Twitter search UI, but not

// through the API.

//

// To install it:

// 1) Put this file and class.geoplanet.php on your server

// 2) Get a free application ID from Yahoo – http://developer.yahoo.com/geo/

// 3) Copy the ID where this file has <Put your own app id in here>

// 4) Remove the die() statement just above it

//

// To use it:

// Call the URL of the file as you would http://search.twitter.com/search.atom

// All the normal supported arguments are passed through to Twitter's API

// If 'near=' is specified, then the place name string is passed to Geoplanet

// The latitude and longitude of the result are passed as 'geocode=' to Twitter

// If you also specify 'radius=' then that is passed, otherwise '25km' is used

//

// Gotchas:

// – It uses a redirect header, so for command-line curl you'll need -L to follow

// – There's zero error or exception handling

//

// Example:

// http://yourserver.com/geosearch.php?q=biking&near=boulder&radius=15km

require_once("class.geoplanet.php");

// If the named parameter was present on the input URL, append it to $url

function copy_url_input($name, $url)

{

if (isset($_GET[$name]))

$url .= "$name=".urlencode($_GET[$name])."&";

return $url;

}

$searchurl = "http://search.twitter.com/search.atom?&quot;;

// If the near parameter is present, then call Geoplanet to turn it into lat,long

if (isset($_GET['near']))

{

$placename = $_GET['near'];

die('You need to put your own app id here and then remove this statement');

$geoplanet = new GeoPlanet('<Put your own app id in here>');

$placelist = $geoplanet->getPlaces($placename);

$topplace = $placelist[0];

$centroid = $topplace['centroid'];

$lat = $centroid['lat'];

$lng = $centroid['lng'];

// The radius parameter is optional. If it's not present then default to 25km

if (isset($_GET['radius']))

$radius = $_GET['radius'];

else

$radius = '25km';

$searchurl .= "geocode=".urlencode("$lat,$lng,$radius")."&";

}

else

{

$searchurl = copy_url_input('geocode', $searchurl);

}

$searchurl = copy_url_input('q', $searchurl);

$searchurl = copy_url_input('lang', $searchurl);

$searchurl = copy_url_input('rpp', $searchurl);

$searchurl = copy_url_input('page', $searchurl);

$searchurl = copy_url_input('sinceid', $searchurl);

$searchurl = copy_url_input('show_user', $searchurl);

// Request a redirect to the URL with the lat,long added

header("Location: ".$searchurl);

?>