I: The Comfy Chair
Back in 1978 – when I was just fifteen – I begged my parents to let me enroll in a course at the local community college (the equivalent of TAFE) so that I could take ‘Data Processing with RPG II’. I wrote my first computer program in RPG II. I typed that program onto a series of punched cards, one statement per punched card. Once I’d completed typing the deck of cards which comprised my program, I dropped them off at the college’s data processing center, where they went into the batch queue. You returned in 24 hours and were returned your deck of punched cards, along with a long string of ‘green-bar’ paper, which printed the results (or errors) in your program. If you’d made a mistake on one of the cards – a spelling error, or a syntactical no-no, you’d be forced to repeat the process, as needed, until you got it right.
Woohoo. Sign me up.
From around 1980 – when I went off to MIT to study computer science – computers have been my constant companions. I’ve owned cheap ones (Commodore’s VIC-20), expensive ones (one of the first Macintosh IIs to roll off the assembly line), tiny ones (iPhone), and big ones (SparcStation 3). I have never owned a computer that I have not written code for. In my mind, the computer and the act of programming are inseparable.
Programming languages are something one acquires, like computers; but you don’t put those languages in the bin – mostly. In preparation for this talk, I made up a list of all the programming languages I’ve learned over the years, beginning with RPG II – which I’ve since forgotten. BASIC came next, and I thought it a wonderful, useful, incredible language, my true starting point.
I spent many years programming in assembly language on a variety of systems – CP/M, MS-DOS, embedded microcontrollers. I bought a cheap C compiler in 1982, a copy of Kernighan & Ritchie, learned pointer arithmetic, and crashed my computer repeatedly in the process. Now that was fun.
I did take up C++ when it was still new, when Stroustrup was still implementing features of the language. (Oh, wait, he’s still doing that, isn’t he?) Buried myself in class designs and object hierarchies and delegation models. I can probably still program in C++. If someone were to threaten me with a taser.
In the 1990s along came the Web and LINUX, the open computing platform. Suddenly a language was more useful for its ability to communicate with other entities than for its raw processing power.
I sat down at the 3rd International World Wide Web conference with a few folks from SUN Microsystems, who were touting this new, portable programming language they’d invented, which they called ‘Oak‘. I wonder whatever became of that?
It didn’t take long to learn – Python isn’t a difficult language – but for just that little bit of learning I got so much power, well – I don’t have to explain it to you. You understand. It’s a bit like crack, Python is. Once you’ve had that first hit, you’re never quite the same again.
I put Python on everything: on my Macs, on my servers, on my mobile – everything I owned got a Python install. I didn’t know exactly what I’d do with all this Python, but somehow that seemed unimportant. Just get it everywhere. You’ll figure something out.
In some ways discovering Python was very frustrating. By my early 40s I’d basically stopped programming; not because I hated coding, but because my life had turned in other directions. I teach, I research, I lecture, I write, I do a little TV on the side. None of that has anything to do with coding. I had the best tool for a grand bit of hackery, and no time to do anything with it, nor any real reason to drive me to make time.
My biggest Python project (before last week) was a simple script to create a video used in the opening of my 2008 WebDirections South keynote. I wanted to show the ‘cloud’ of Twitter followers I had started to accumulate – around 1500. Not just a ‘wall’ of different faces, but a film, an animation, where each person I followed on Twitter had their moment in the sun. The script retrieved the list of people I follow, then iterated through this list, getting profile information for each individual, extracting from that the URL for the user’s avatar, which it then retrieved, Using Python Imaging Library, it then embossed the user’s handle onto the image. After that it was a basic drag-and-drop operation into Adobe Premiere. Presto! – I had a movie. Thank you, Python.
For half a decade I’ve been thinking about social networks. This little film project allowed me to tie my research together with my desire to have a pleasant excuse to hack. When I sat back and watched the film I’d algorithmically pieced together, I began to get a deeper sense of the value of my ‘social graph’. That’s a new phrase, and it means the set of human relationships we each carry with us. Until just a few years ago, these relationships lived wholly between our ears; we might augment our memories with an address book or a Rolodex, but these paper trails were only ever a reflection of our embodied relationships. Ever since Friendster, these relationships have exteriorized, leaped out of our heads (like Athena from Zeus) and crawled into our computers.
This makes them both intimately familiar and eerily pluripotent. We are wired from birth to connect with one another: to share what we know, to listen to what others say. This is what we do, a knowledge so essential, so foundational, it never needs to be taught. When this essential feature of being human gets accelerated by the speed of the computer, then amplified by a global network that now connects about five billion people (counting both mobile or Internet), all sorts of unexpected things begin to happen. The entire landscape of human knowledge – how we come to know something, how we come to share what we know – has been utterly transformed over the last decade. Were we to find a convenient TARDIS and take ourselves back to the world of 1999, it would be almost unrecognizable. The media landscape was as it always had been, though the print component had hesitatingly migrated onto the Web. To learn about the world around us, we all looked up – to the ABC, to the New York Times, to the BBC World Service.
Then the world exploded.
We don’t look up anymore. We look around – we look to one another – to learn what’s going on. Sometimes we share what we hear on the ABC or the Times or the World Service. But what’s important is that we share it. There is no up, there is no centre. There is only a vast sea of hyperconnected human nodes.
The most alluring and seductive of all of the hyperconnecting services is unquestionably Facebook. In three years it has grown from just fifteen million to nearly half a billion users. It might be the most visited website in the world, just now surpassing Google. Facebook has become the nexus, the connecting point for one person in every fourteen on Earth. Facebook is the place where the social graph has come to life, where the potency of sharing and listening can be explored in depth. But it is a life lived out in public. Facebook is not really geared toward privacy, toward the intimacies that we expect as a necessary quality of our embodied relationships. Facebook founder Mark Zuckerberg is on the record talking about ‘the end of privacy’, and how he sees it that a side-effect of Facebook’s mission ‘to give people the power to share, and make the world more open and connected’.
A world more open could be a good thing, but only if the openness is wholly multilateral. We don’t want to end up in a world where our secrets as individuals have been revealed, while those who have the concentrations of capital and power, and their supporting organizations and networks, manage to continue to remain obscure and occult. This kind of ‘privacy asymmetry’ will only work against the individuals who have surrendered their privacy.
This is precisely where we seem to be headed. Facebook wants us to connect and share and reveal, but – particularly around privacy, user confidentiality, and the way they put that vast amount of user-generated data to work for themselves and their advertisers – Facebook’s business practices are entirely opaque. Openness must be met with openness, sharing with sharing. Anything else creates a situation where one side is – quite literally – holding all the cards.
I have been pondering the power of social networks for six years, so I am peculiarly conscious of the price you pay for participation in someone else’s network. I’ve come to realized your social graph is your most important possession. In a very real way, your social graph is who you are. Until a few years ago we never gave this much thought because we carried our graphs with us everywhere, inside our heads. But now that these graph live elsewhere – under the control of someone else – we’re confronted with a dilemma :we want to turbocharge our social graphs, but we don’t want anyone else having any access to something so fundamental and intimate. If the CIA and NSA use social graphs to find and combat terrorists, if smoking, obesity and divorce spread through social graphs, why would we hand something so personal and so potent to anyone else? What kind of value would we receive for surrendering our crown jewels?
By the end of last month it was clear that Facebook had become dangerous. Something had to be done. People had to be warned. In a Melbourne hotel room, I drafted a manifesto. Here’s how I closed it:
There is only one solution. We must take the thing which is inalienable from us – our presence – and remove it from those who would use that presence for their own gain. We must move, migrate, become digital refugees, fleeing a regime which seeks only its own best interests, to the detriment of our own… We may be the first, but we will not be the last. We must map the harbors, clear the woods, and make virgin lands inviting enough that it will be an easy decision for those who will come to join us in this new country, where freedom goes hand-in-hand with presence, where privacy is not a dirty word, and where the future knows no bounds.
So I quit. But I didn’t do it suddenly or rashly. I’d been using Facebook to share media – links and articles and videos – so I set up a Posterous account, where I could do exactly the same kind of sharing. Over the course of two weeks, I posted a series of Facebook updates, telling everyone in my social graph that I’d be quitting Facebook – beginning by posting that manifesto – and giving them the link to my Posterous account. I did this on five separate occasions in the week leading up to my account deletion.
The responses were interesting. Most of the folks in my social graph who bothered to respond were in various stages of mourning. My own aunt – whom I’ve been corresponding with via email for twenty years – wrote how much she’d miss me. Another individual expressed regret at my leave-taking, given that we’d only just reconnected after many years. “But,” I responded, “I’ve shown you how we can stay in touch. Just follow the link.” “That’s too hard,” he replied, “I like that Facebook gives me everyone in one place. I don’t have to remember to check here for you, or over there for someone else. This is just easy.”
I can’t fault his logic: Facebook is just like the comfy chair. It’s a pleasant place to be – even when surrounded by Inquisitors. Facebook users are simply so grateful that such an amazing service is on offer – seemingly for free – that they haven’t thought through the price of their participation. And unless something else comes along that’s as powerful and easy as Facebook, things will go on just as are. Unless a disruptive innovation upends all the apple carts.
This is when I had a brainwave.
II: And Now For Something Completely Different
What is the social graph? At its essence, it is a set of connections, connections which define certain flows of information. These connections are both figurative and literal. If I say that I am connected to someone, I mean that we have some sort of relationship. But I also means that we have established protocols for communication, channels that can be used to send messages back and forth. For the last three hundred years this has been embodied in the ‘visiting card’, presented at all occasions when there is an invitation to connect. The ‘visiting card’ evolved into the ‘business card’ we share freely and promiscuously when there’s money to be made, or a connection to be had. The business card of 2010 must provide four significant pieces of information: a) the name of the caller; b) the address of the caller; c) the telephone number(s) of the caller; and d) the email address of the caller. Other information can be provided on the card – and often is – but if a card is missing any of these four essentials, it is incomplete. Each item represents a separate sphere of connectivity: the name is the necessary prerequisite for social connectivity; the address for postal connectivity; the telephone number and email addresses are self-explanatory. Each entry has a one-to-one correspondence with some form of connectivity. When we exchange business cards, we are providing the information necessary to establish connectivity.
We now have digital versions of the business card; we hand out vCards, or provide QR Codes that can be scanned and translated into a pointer to a vCard. Yet what we do with these digital versions of the business card not has changed: we stuff them into ‘address books’, or into the contact lists on our mobiles. If we have the right tools, we can upload them to Plaxo or LinkedIn. There they sit, static and essentially useless. A database with no applications.
That’s kind of weird, isn’t it? I mean, here we are, each of us walking around with a few hundred contacts on our mobiles, and essentially doing nothing with them unless we need to make a phone call or send an email. It doesn’t make sense. Somehow we’ve lost sight of the fact that the digital item is active in a way the physical object is not. Facebook understands this. Facebook takes your ‘calling card’ – the profile that you loaded up with your personal information – and makes it the foundation of your social graph. Everyone connects to your profile (which is you), and these connections become the cornerstone of fully bilateral sharing relationships. Anyone connected to you can send you a message, or initiate a chat, or look at the photos you uploaded of your holiday in the fleshpots of Bangkok. That one connection becomes the cornerstone for a whole range of opportunities to share media – text, images, video, links, music, events, etc. – and equally an opportunity to listen to what others are sharing. That’s what Facebook is, really, a giant, centralized switchboard which connects its members to one another. That’s all any social network is.
It’s easy – really easy – to connect together. We have so many ways to do so, through so many mechanisms, that really we’re drowning in choice, rather than a poverty of options. Instead of a monolithic solution, the Internet, like nature, tends to favor diversity and heterogeneity. Diversity creates the space for play and exploration; a tolerance for heterogeneity allows that there is no right answer, no one way to play the game. Is it possible to design an architecture for human connectivity which favors diversity and heterogeneity.
For the past few weeks those of you following me on Twitter have seen me tweet about ‘Project Thunderware’, which was the silliest code-name I could think up for a project that is actually entirely serious. The real name is Plexus. Plexus is design for a second-generation social network. It is personal – everyone runs their own Plexus. It is portable – written entirely in Python so you can drop it onto a USB key (if you want), and take it with you anywhere you can get Python running. It is private – no one else has access to your Plexus, unless you want them to. It’s completely open and completely modular. Plexus is designed to take the passive social graph we’ve all got tucked away in our various devices, translating it into something active, vital, and essential.
There are three components within Plexus. First and most important is the social graph, a database of connections known as the ‘Plex’. Each of these connections, like a business card, comes with a list of connection points. These connection points can be outgoing – ‘this is how I will speak to you’, or incoming – ‘this is how I will listen to you’. They can be unilateral or bilateral. They can be based on standard protocols – such as SMTP or XMPP, or the APIs of the rapidly-multiplying set of social services already available in the wilds of the Internet, or they can be something entirely home-grown and home-brewed. They can be wide open, or encrypted with GPG. Everything is negotiable. That’s the point: something’s in the Plex because there’s an active connection and relationship between two parties.
The Plex is only a database. To bring that database to life, two other components are required. The first of these is the ‘Sharer’. The Sharer, as the name implies, makes sure that something to be shared – be it a string of text, or a link, or a video, or a blog post, or whatever – ends up going out over the negotiated channels. The Sharer is built out of a set of Python modules, with each particular sharing service handled by its own module. This means that there is no limit or artificial constraint on what kinds of services Plexus can share with.
Conversely, the third component, the Listener, monitors all of the negotiated channels for any activity by any of the connections in the Plex. When the Listener hears something, it sends that to the user – to be displayed or saved or ignored according to the needs of the moment. Like the Sharer, the Listener is also a set of Python modules, with each monitored service handled by its own module. The Listener should be able to listen to anything that has a clearly defined interface.
When Plexus starts up, it reads through the Plex, instancing the appropriate Sharer and Listener objects on a connection-by-connection basis. Everything after initialization is event-driven: the Plexus user shares something, or the Listener hears something and offers that to the Plexus user.
That’s it. That’s the whole of the design. As always, the devil is in the details, but the essential architecture will probably remain unchanged. Plexus creates your own, self-managed social network, both entirely self-contained, and also acts as a connected node within a broader network. Because Plexus functions as plumbing – wiring together social services that haven’t been designed to talk to one another – it performs a service that is badly needed, filling a growing void. Plexus is your own plumbing, under your own control.
Let’s talk through a use case. I give a lot of lectures, and I make sure to put my contact details – email, blog and Twitter – on my slides. I meet two people at a lecture – we’ll call one of them Nick, and the other one Anthony. (Those names just came to me.) Nick is an affable person, he just wants to be able to follow all of my output, as I put it out. He needs are a list of the dozen-or-so public contact points where I present myself. That’d be my name, the six or seven blogs I write, my Twitter feed, my Posterous, my YouTube account, and Viddler account, and so forth. He gets that nugget of data off of markpesce.com/markpesce.plx – it’s basically a nice little bit of JSON (I don’t care for XML, but you can microformat to your heart’s content) that he can drop directly into Plexus, where it will go into the Plex. As the Plex digests it, this nugget instances the necessary Listeners. Now, whenever I say anything – anywhere – Nick knows about it. Which makes Nick happy.
Anthony is a different story. He’s a l33t user, and doesn’t want to be forced to rub shoulders with the hoi polloi at any of the normal social web services. Instead, Anthony wants to get a personally-addressed email from me every time I have something to share. Apparently he’s developed some excellent email filtering and management tools, so that even if I get quite chatty, it won’t clog up his inbox. So, he negotiates with me – Plexus-to-Plexus – and goes into my Plex as a contact, so that when I instance my Sharers, one is specifically set up to send him anything I share via SMTP. He doesn’t have to do anything to his Plexus, because he’s not using his Plexus to listen to me.
Use cases are all the more meaningful when they’re backed up by working code. Hence, I went back to the code mines last weekend – with a spring in my step and a song in my heart – and created a very, very embryonic version of Plexus. In just a little over two days, I created Sharer modules for Twitter, Posterous, Tumblr and SMTP, and Listener modules for Twitter and RSS. I reckoned that would be sufficient for the purposes of a demonstration – though if I’d had more time I could easily have wired in a few hundred other web social services.
[ To see the demo, go here. ]
There you go. That’s Plexus. The project is open source – after all, why would you trust a social network when you can’t inspect the code?
III: How Not To Be Seen
Plexus is grass-roots, bottom-up, and radically decentralized. That means the big boys will probably try to ignore it. Social media isn’t about the people, after all. It’s about humungous accumulations of capital going hand-in-hand with impossibly large collections of data, and, somewhere in the background, all the spooks, reading the paper trail. Social media is an instrument of control, the latest and the greatest. Sit still, read your feed, and comply.
But what if we refuse to comply? Is that even an option? Is it possible to be disconnected and influential? That’s the Faustian bargain being offered to us: join with the collective and you will be heard. And managed. And herded. Or suit yourself, and weep and gnash your teeth in the outer darkness. But in that Interzone, outside the smooth functioning of power, what happens when we connect there?
Reflect back on March of 2000. Napster, the centralized filesharing network, had recently be shut down by court order. A different crew created a decentralized filesharing tool, known as Gnutella, releasing both the tool and the source code to the world on March 14th. When AOL/TimeWarner – parent company of the folks who wrote Gnutella – found out about and put a stop to the source code release, it was too late. It couldn’t be recalled. The bomb couldn’t be un-invented. The music industry is more authentic than it was a decade ago, more open to innovation, to outsiders, to diversity and heterogenetity. All because a few hackers decided to change the way people share their music.
History never repeats, but it does rhyme. We share everything now; we worry that we overshare. Now it’s time to take our sharing to the next level. We need a social2.0, something that reflects what we’ve learned in the past half-dozen years. That’s not just a slew of new services. That’s an attitude change. Consider: the wiki was invented in 1995. It’s Precambrian web tech. But we didn’t start using wikis until after 2001, when Wikipedia began to take off. Why? It took us a while – and a lot of interactions – to understand how to use the tools on offer. Social technology is uniquely potent – so much so that we’ll be learning its strengths and weakness for a decade or more. The time has come to step out, seize the means of communication, and make them our own.
I reckon you can now understand why Python was such an obvious choice for Plexus. In no other language, with no other community, is the idea of sharing so much at the core. There is a Python module or code sample to do nearly every task under the sun, precisely because sharing is a core ethic of the Python community. Python is the language of the Web because it lends itself to the same sharing that the Web fosters. Python is the language of Plexus because Plexus needs to inherit all of Python’s best qualities, needs to be straightforward and open and flexible and extensible and easily shared. I need to be able to drop a Plexus module into an email and know, at the other end, that it will just work. ‘Take this,’ I’ll say, ‘and feed it to your Plexus.’ You’ll do that, and suddenly you’ll find that we have a secure, obscure and nearly invisible means of sharing – a darknet, how not to be seen – that can be as private and personal or open and public as we agree it should be. And you can turn around, think up something else, and mail that to me, or to someone else, or to the world.
The social web must be a social project, an opportunity to embody exactly what we’re trying to create as we are creating it. It’s the ultimate dogfooding. Success requires a willing surrender that rejoices in cooperation.
So here it is. This is the best I can do. It may be the best that I will ever do. I place it before you this morning, a humble offering, written in a language that I barely know, but which I’ve used to express my highest aspirations. Plexus is naked, newborn, and needs help. It will only benefit from your input, comments, recommendations, pointers and critiques. It is an idea that can only grow and mature as it is shared. That’s what this is all about. It always has been.
The slides for this presentation can be found here.