Keyring v1.5 & Social Importers v1.4

Yesterday, I released version 1.5 of Keyring, and version 1.4 of the Keyring Social Importers bundle for WordPress. This update moves the Social Importers away from using a postmeta value (keyring_service) and introduces a new taxonomy that keeps track of where posts were imported from. It’s optimized towards management within wp-admin, but you can also use it for front-end queries of your posts. The update for Keyring introduces a new service file for Moves, and fixes a bug in the OAuth2 base service.

The new taxonomy for the Importers is called keyring_services on the backend, and is labeled “Imported From” in the admin UI. It will auto-create itself based on all of the importers installed. You’ll see it within wp-admin under the Posts menu, and will be listed on the “All Posts” listing as well:

Screen Shot 2013-09-15 at 9.10.59 PM

Clicking the name of a service under the “Imported From” heading will filter the posts list by that service (e.g. Twitter). The main reason that the taxonomy is exposed through the admin UI is so that you can tweak the slugs if you’d like to. I noticed that on my install, I’d already used things like ‘twitter’ and ‘foursquare’ as tags, and so they had claimed the namespace for that slug. WordPress’ shared terms are annoying like that :). So, if you’d like to use the slugs of source services in URLs, you might want to rename them:

  1. Go to Posts → Tags
  2. Search for and rename the slug for each of the services (e.g ‘twitter’, ‘foursquare’, ‘flickr’). Name the slugs something like ‘twitter-3’
  3. Go to Posts → Imported From and rename the slugs for each service to the “clean” version (without a ‘-2’).
  4. Optionally go back to Posts → Tags and rename those tags again back to the -2 versions.

As part of this change, you’ll want to update any previous posts that you imported to using the new taxonomy. I’ve included a quick and dirty script to do this. It’s called migrate-keyring-postmeta-to-taxonomy.php and can be found in the root of the plugin. To use it, you need to move it to the root of your WordPress install, and then you can just access it through your browser. It’s likely that it’ll run out of memory or time out, but it’s written in a way that you can just run it over and over again until it finishes cleanly. On my server, once it was finished and produced no output, Chrome decided to display a “friendly” error message instead of anything useful. Once that’s done, your existing posts should all be converted over to using the new taxonomy, and there should be no more postmeta entries for keyring_service.

If you’re doing a clean import, I recommend doing it without auto-import enabled, and then once you’ve fully imported everything, enable auto-import and let it run from there.

Hurricane Sandy Aftermath

Right now, I am considering myself very lucky. I’ve just lived through not only my first ever, but the most intense hurricane in New York’s history. Hurricane Sandy.

Within less than a few miles in 3 directions (North, South, West) homes are destroyed, roads are flooded, power is out. Right where I am (Park Slope) we have a lot of leaves on the ground, a few branches down and some minor damage on buildings. It’s pretty amazing how little impact we’ve directly had. It’s definitely not completely over, but we’ved fared a lot better than folks very nearby. Now we see how long it takes for NYC to get back on its feet and get things running again.

Subways are still all out of commission. 7 tunnels between Brooklyn and Manhattan are flooded. Buses will hopefully start coming online later today. What’s left of Lower Manhattan is a mess. It will be a long time before things are “back to normal” for everyone. Here’s how it looked from my perspective:


WordPress is Your Digital Hub

This post continues on from a previous post: Where is Your Digital Hub/Home?

In a previous post, I talked about POSSE and PESOS, and publishing on your own site vs other platforms, syndicating content back and forth and content ownership. I mentioned that I’d opted for the PESOS approach, and that I was publishing content on other platforms, then syndicating it back to my own site. Let’s take a look at how that happens.

First of all, I’m running WordPress. Since I’ve been working with WordPress for years, and since my full time job has me working with it as well, this made a lot of sense. Even without those motivators though, WordPress has a huge community, is open source, is a really solid publishing platform, is built from the ground up to be completely customizable through plugins, and has an incredibly powerful themeing system (which basically allows you to do whatever you want).

One of the other things WordPress has going for it is a long history of providing data import and export tools. You’ve always been able to get data into and out of WordPress with relative ease, so it seemed like getting a bunch more data in there would be a reasonable goal. With the advent of Post Formats (in WP 3.1), WordPress also has a native way of hinting at how different types of data should be displayed, plus Custom Post Types (since WP 3.0) mean that if you really want to get crazy, you can step completely outside of the normal “Post” model and get really custom.

One of the things that got me started down the road of actually getting control over my content was “The Great Twitter 3200 Tweet Debacle” (I made that name up). Because of technical constraints, Twitter only allows you to access your most recent 3200 tweets. I’ll give you a few seconds to let that sink in. Twitter. Only allows you to access. Your most recent 3200 tweets. Your own tweets. Has that hit home yet? Here you are producing all this stuff, thinking it’s yours, and Twitter actually decides what you can and can’t access. Before I hit that 3200 mark (I was up to around 3100 at the time), I vowed that I’d get something figured out to get a copy of all of my tweets stored somewhere that I controlled.


Where is Your Digital Hub/Home?

I’ve been using WordPress to power my own website for a while now, and working with it in some way or another for even longer. Over the years, I’ve developed the belief that it’s a pretty perfect platform for people to build their own “digital home on the web”, considering the range of plugins and themes available, the flexibility of the publishing options it offers, and the fact that it’s completely open source, so you can do whatever you want with it.

That last bit is important in more ways than you might immediately think. Apart from just being able to write my own plugins or tweak my themes, this also means that I own my own data. I think in this MySpace/Facebook generation, people are all too loose with the data trails they create — giving up ownership of their digital self at the drop of a hat. In case you didn’t realize, when you use something like Facebook, it is not the product, you and your data are the product.


WordPress Authentication Framework: Keyring

Keyring: An authentication framework for your plugins

Quite a while ago (like, in at least 2009), I started thinking about regaining control of all the content I was producing online. I was posting photos to Flickr, saving bookmarks to Delicious. I started Tweeting. I was checking in. All fun and games, and all of those services offer great tools for interacting with them (let’s face it, tools that are much better than WordPress’, because they are focussed on one thing). So I figured, why not write importers for these services and pull my content back over to my WordPress. And keep doing it periodically, so that I could keep using those tools. I want WordPress to be my “home on the web”, my digital hub, but I want to use these neat tools with their fancy apps and what-have-you.

Very quickly, I realized that if I was going to do anything useful on most web services, I’d need to be able to authenticate with them. No biggie, right? I know my username and password… Oh. Right. OAuth. Turns out that most web services use OAuth (or something similar) to authenticate, and it turns out that that’s actually a bit of a bear to implement, when all you want to do is write a simple little Twitter importer. And then again for a Foursquare importer. And a Flickr importer.

What I needed was a shared, generic authentication framework that would do all the heavy lifting for me. I would tell it I wanted a connection to specific service, and if it didn’t have one, it’d walk the user through the process of getting one. It’d give me a standardized format of authentication credentials and abstract out all the complexity of making authenticated requests against those services. Then it would make me a coffee*. What I needed, was Keyring.

Federated Social Web Summit

I’m in Portland today and taking part in the Federated Social Web Summit, before attending OSCON for the next week. Today is so far packed with lighting presentations from all sorts of companies, projects and protocols in the space to bring us all up to speed. After lunch we’re going to all be discussing and looking at how we can put together all the building blocks and bring to life this concept of a federated social web. Here are my (long) notes on all the projects etc from the morning:

Apologies to any names I’ve misspelled, product names I’ve left out, etc.


Twitter API/Developer Meetup Notes

Here are some notes I took during the Twitter developer meetup that was tonight, at Twitter Headquarters. They’re probably not complete, because I only took bits and pieces on my iPhone, then filled out some details when I got home. It does sound like Twitter are really trying to bulk up their efforts to support developers and let their community flourish, which is probably a great approach given their “we are a platform” strategy. Taken/formatted via ListML, thus the very-hierarchical list approach. Enjoy.