As new social media outlets sprout like weeds I have found myself developing a new rule when dealing with them: I'm not uploading my images to your servers. Sure, I may post an iPhone shot or something similar—in fact I often shoot iPhone snapshots specifically for Facebook and I'm leaving already-uploaded images out there for the time being, but my real images are staying on my server. There are a few reasons for this:
- It's work to prepare images for the various outlets and they inevitably compress them too much making them look bad to save some bandwidth.
- I don't really trust them—there is increasing pressure to monetize and control user-generated content.
- I have a idealistic view of the internet as billions of bright, free, individual lights. As we consolidate our creative efforts onto the servers of a select few media companies we weaken the democratization of the internet.
The most ridiculous thing is that corporate news organizations are trusting the new media companies to host their content. So the reporters there are subject to the whims of two layers of corporate media! Talk about dilution.
If you want to break out, your content is going to live in a little boat and will float in a harbor filled with battleships, aircraft carriers, nuclear powered submarines and pirate ships. They either won't care if you stay afloat, or worse, they will try to sink you.
But this presents a problem: I still want to participate in social media.
A solution: The Digital HubIf you have a website, you already have the means of hosting your content. You don't need a third party to duplicate your material on their server, you just need to be smarter about the way you host it so it's ready to interact with other services. Other services allow you to do this by exposing an application programming interface (API). An API is your door into another service; it lets you interact with another piece of software. And that's all social media services are, software. Facebook is just software and Facebook has an API that lets you interact with it. So instead of uploading our content to another service, we keep our content on our server, our digital hub, and serve them through the other service.
We can think of this whole enterprise (my server, their servers, the user's browser) as one big piece of software that is broken into manageable sections which follow the well-known model-view-controller paradigm.
ModelThe MySQL database and related software hosting photo-mark.com which contains the images and the metadata associated with them. (Technically there is more than one model: the journal lives in the database and is distinct from the images and the portfolios, collections of images, form their own models too.)
ControllerThe software which connects the model to various outlets. This is where we implement with the API of other services. This includes code for generating thumbnails on-the-fly, generating HTLM for the website, RSS feeds, and writing FBML and FBJS to the Facebook Canvas.
ViewThe outlets themselves: the photo-mark website, Facebook application, RSS readers, etc. You can think of this as the way the content is presented to the user.
The important thing to note is that the images and metadata live in one and only one spot. If I want to change a caption or alter a photo, I don't need to track down each place that image lives. I can do it once and this change should be reflected anywhere the image is seen. This also is a basic programing tenet: DRY—Do not Repeat Yourself.
Any time a new media outlet pops up that has an API, I can simply write some new controller code that interacts with it and nothing else has to change—my little hub stay the same. Some APIs are so simple that they amount to nothing more than a file format. Google, for example, has a place for images at the top of their profile pages. It gets these by consuming RSS feeds that use the Yahoo Media extension. Most people give it their Flickr feed, but it can be anything you want so long at it adheres to the standard. Here's mine. Those thumbnails are coming from my little hub with links directing flow back to photo-mark.com. That's about as simple as it gets.
The Facebook page isn't quite done and it's not a perfect solution. Adding photos to a photo-mark gallery, for instance won't automatically inject a post into the news feed, and it would be nice to implement comments on photos, but it's a good start. In the end it simplifies my life, keeps me in control of my own content, and makes it increasingly easier to support social media services as they sprout. Little projects like this are one of the reasons I'll tell anyone who will listen that they should develop programming skills and that we should be teaching kids programming principles and languages early in their education. Today and even more so in the future, programming skills will determine your freedom.