How we migrated the Taproot Publishing blog

Last week, we setup a new blog for Taproot Publishing. It’s one of many things we’re doing to better reflect what we envision for Taproot Publishing, the umbrella organization that publishes Taproot Edmonton, our B2B information products, and more projects in the future.

We already had a blog at the Taproot Edmonton site, and we didn’t want to lose what was there. It was important to us to have our existing posts migrated across to the new blog. We also wanted to make sure any existing links would continue to work correctly.

I’m going to share some of the details on how we did that. We’ve often benefited from the lessons and experiences shared by other media startups, so hopefully someone else will find this helpful.

Initial setup

The site currently runs on WordPress, self-hosted in Azure. We decided that we didn’t want to self-host the new blog, so we created a new site at and configured to point to it. We went with WordPress Premium to start.

Thankfully we had picked a theme that is available to sites (Independent Publisher 2) so we configured that and copied over all the styles so it would look pretty similar to what we had before.

The other thing we did was add myself and Karen as users. You’ll want to add any users from the existing site into the new one before you do the post migration, so that you can keep the correct bylines (unless you’re fine with changing those).

Post migration

The next task was to export the posts from our existing site and import them into the new site. While WordPress has built-in functionality for import/export, we discovered it has some limitations. In particular, unless you choose to export "all content", you’re not going to get the featured images that go along with each post.

To solve that, we installed the Export media with selected content plugin to our existing site, so that the featured images could be referenced in the export file.

The export file is just XML though, it doesn’t contain the images themselves. We thought about simply copying the existing uploads folder over to the uploads folder of the new site, but alas, you need to be on the WordPress Business plan or higher for that to work. So we decided to copy them instead to a container in Azure blob storage.

Next, we did a find and replace on the "wp-content/uploads" URLs referenced inside the export file, to instead point them to the new location in Azure blob storage.

Finally, we used the WordPress importer to bring our posts into the new site.

Redirecting old URLs

At this point, our new site was up and running with our previous theme and all of our existing blog posts loading correctly. The next step was to make sure that if someone visited the old URL, at, that they’d be redirected to the new URL, at

To do that, we installed the Redirection plugin to our existing site.

The plugin is both easy-to-use and powerful. You can specific the exact URLs you want to redirect, or you can use regex to match a number of URLs at once. The plugin also lets you choose what to do with any query parameters (such as utm tags that might be appended to your URL). Of course, you can also specify whether the redirects are temporary (302) or permanent (301).

With the redirects all in place, testing was all that was left to do. I realized during my testing that there are other URLs besides the posts to redirect, such as the root /blog and tag or category pages, so don’t forget about those!

Final thoughts

The last step was to update the site menu to point to the new URL. With that, our new blog is setup and ready to help us tell the story of Taproot Publishing!

I’ve moved my personal blog around a number of times over the years, so maybe that’s why this project felt a little like going back in time! This move was all about the future though, and I am excited to get on with the next task.

Feel free to reach out should you have any questions about how we completed the blog migration!

WordCamp Edmonton 2011

WordCamp is coming to Edmonton on November 18 and 19! WordCamp is a gathering of all things WordPress, and is intended for bloggers, content creators, developers, designers, and publishers. Here’s a little more information about the event:

WordCamps are casual, locally-organized, non- profit conferences covering everything related to WordPress, the free and open source personal publishing software that powers over 25 million sites on the web. WordCamps come in all different flavors, based on the local communities that produce them. In general, WordCamps include sessions on how to use WordPress more effectively, beginning plugin and theme development, advanced techniques, security, etc.

We’ve got an awesome little promo video for the event:

WordCamp Edmonton will take place at the Shaw Conference Centre in Salons 5 and 6. I’m pretty excited about the schedule we have been able to put together! We’ve got some excellent speakers, and a wide variety of topics. We’ve also built in some time for conversation, so it’ll be a good opportunity to connect with others in Edmonton who are using WordPress. Tickets for the event are just $40, and that includes both days of content plus lunch on Saturday.

I took the WordPress plunge back in February 2008, converting my entire blog to WordPress 2.3 from Community Server. It was a great decision, and I haven’t ever considered changing platforms since. WordPress is highly capable “out-of-the-box” and has one of the most vibrant plugin and theme communities of any software product. WordPress is now at version 3.2 and it just keeps getting better. Whenever I need to build a new site, I turn to WordPress.

A big thanks to all of our sponsors for helping us make WordCamp happen here in Edmonton, in particular our Gold Sponsors, Jetpack and EEDC. Also, a shout out to the organizing team of Kory, Jeff, and Sebastian, who have had help from myself, Ashley, and Dana. Everyone has worked hard to get this event put together!

We hope to see you there! Get your tickets here! You can follow @wordcampyeg on Twitter for updates.

Using Disqus for Comments

Today I switched the comment system for this blog to Disqus (“discuss”). You’ve most likely already used Disqus on other websites even if you didn’t realize it – they reach over 200 million people each month. Disqus is used by CNN, Fox News, TechCrunch, and many other popular websites. Their reach is all the more impressive when you consider that the company only started in 2007. Here’s how Disqus introduces itself:

DISQUS is a comments platform that helps you build an active community from your website’s audience. It has awesome features, powerful tools, and it’s easy to install.

There are a number of features that Disqus provides that are quite compelling. As a blogger, you get threaded comments, inline media embedding, social integration, mobile support, email support, and much more all “out of the box”. All of that is now available here, on this blog.

Installation was simple – just download the plugin, activate it, and login. One of the primary reasons I felt comfortable switching to Disqus was its integration with WordPress. All new comments will appear in both Disqus and my WordPress database, which means I can remove Disqus at any time without losing any data. All existing comments are now in Disqus too. That process was somewhat trickier – the automatic importing didn’t work properly for me, so I had to manually export some comments from WordPress, and then import them into Disqus. Even that didn’t take much effort though.

Disqus also has really simple integration with Tumblr, so I am using it for comments on my Edmonton Etcetera blog as well.

You can learn more about Disqus at their blog. If you’re a developer, check out the API documentation (I’ll be looking into that more).

Hope you enjoy the new comment experience here!

NV08 – Blogging & Social Media: Where do we go from here?

nv2008 Matt Mullenweg just finished up his keynote and is now answering questions from the audience. His talk about where we are now and where we need to go in the future started out really well, but kind of went downhill in my opinion. He began with the blogger’s hierarchy of needs:

  1. Expression
  2. Public
  3. Interaction
  4. Validation

I think these make a lot of sense. Bloggers seem to have an inherent need to express themselves, they like to do so in public and with other people, and they love checking their stats. My favorite and I think the most important is #2. I agree with Matt that public should be the default.

NV08 Keynote Next he made the comment that 4 million posts are created at each month. Wikipedia has about 2.1 million English-language articles, so Matt reasoned that users create about two Wikipedia’s each month. The only problem with that, of course, is that quantity does not equal quality. It’s kind of an apples and oranges comparison.

Matt then showed a funny video of the "dancing Matt", some dude who he is apparently neck and neck with for the top result in Google for "matt". He asked the audience to ensure they link to so that he can remain #1. Are you kidding me? Does this belong in a keynote?

His next point was that technology companies suck at branding. He cited Google and Microsoft specifically, and used P&G as an example of a company that is great at branding. This wasn’t new for me, as I’ve done a lot of reading about branding, but it is good that Matt brought it up specifically. He didn’t say it explicitly, but I can only assume that he thinks we need to have better branding in technology in the future. A lot of his points seemed very loosely related to the title of the talk.

Matt finished up his talk by essentially professing his love for the open source movement. I agree with him that transparency is good and powerful, but I disagree that open source is the only way to get there. Matt thinks that we must create strong alternatives to commercial solutions. I think we can achieve transparency in other ways.

Stewart Mader liveblogged the keynote, so you might get a better idea of how it went down by reading his post.

It wasn’t a bad keynote, but I think the one Anil Dash did last year was much better. It was more powerful and left you with a great feeling. You can watch it here.

Ah well. Matt is easy to like and he’s a good speaker, but his keynote just didn’t do it for me.

Strange WordPress error

I was doing some work on the servers tonight, and as part of that installed the latest batch of Windows updates. Restarted the servers, and continued working on something else. A little while later my Dad texted me, and said the blogs were down. That’s strange I thought, everything looked like it was running fine. So I got on a test connection and loaded up my blog, only to find this message:

Your PHP installation appears to be missing the MySQL which is required for WordPress.

Bizarre! I hadn’t changed anything with WordPress, PHP, or MySQL. So I entered the message in Google and started going through results. (As an aside, is it just me or is the sentence grammatically incorrect? Specifically the part that says “the MySQL”…)

Lots of people have had this problem, apparently, and I went through dozens of search results until I found this one. His first five steps are the same as many other solutions, but his sixth step was new, and it actually worked for me:

add an environment variable “PHPRC” with the value of your php directory, this is key

That was key indeed. I have no idea why I didn’t need that before, and I have no idea why it makes things work now, but I’m glad it does. If you are unsure of how to add an environment variable, see this Microsoft support page (the steps are the same in both XP and Server 2003).

I suspect the solution to this problem is slightly different for everyone, but hopefully if you stumble across this post the PHPRC suggestion will help.

Read: Fighting Monsters

What's new around here?

mlogo I’m so happy that I’ve made the switch to WordPress! It’s a great platform with a great community. One of the best things about WordPress is the gigantic list of available plugins. If I wanted to add a feature to my blog in Community Server, it was always incredibly difficult to do. With WordPress however, the feature has likely already been written by someone else!

I thought I’d take a moment to share with you some of these features.

  1. Comments rock! One of the biggest complaints my readers had about the old blog was that it never remembered their details on the comment form. I hated that too. That’s no longer an issue with WordPress. But wait, it gets better! I installed the Subscribe to Comments plugin, which means you can check a box when you leave a comment and you’ll get email notifications of all follow-up comments!
  2. Twitter! I displayed my Twitter status on my old blog, but I wrote the code to do it myself. I probably re-wrote it half a dozen times too. Anyway, I installed the Twitter Widget, and it rocks. Nice and simple to use. And best of all, when Twitter goes down, I can just deactivate the plugin – no code changes required!
  3. Collapsible Archives! I’ve been blogging since November 2003, which makes for an incredibly long list of monthly archives. With the old design I had everything contracted by default, but I didn’t really like that. Now I have the Flexo Archives Widget, which shows just the years. Click on a year, and it expands to show the months. Very cool!
  4. Tag Cloud! I’m a big fan of tag clouds, and I’m really happy that WordPress 2.3 includes this functionality right outta the box.
  5. AddThis! On every post is a button that lets you save the link to your favorite service. On the sidebar is a button that enables you to subscribe at your favorite service. This kind of functionality should be included on all blogs I think! I’m using plugins from AddThis.

And some non-WordPress things:

  • A wider page layout! I also made the font size a bit bigger.
  • I am quite happy with the way my icon bar turned out! Click on the icons to access my profiles around the web.

If you’re reading this in an aggregator of some kind, I apologize for the multiple items you likely saw in my feed! Should only be a one-time thing. The feed address shouldn’t need to change, however.

Thanks for reading! If you have any feedback, please let me know!

Community Server to WordPress: Part 3

wordpressMy blog is now running on WordPress! It was quite a bit of work, but the migration from Community Server is now complete. Here is what I wrote last July when I decided I wanted to switch to WordPress. You can also read part 1 and part 2 of the migration process.

Here’s what I did since part 2:

  • Removed some spam comments and invalid data from the CS database.
  • Finished up customizing the theme.
  • Spent far too much time trying to get email notifications working. I’m definitely not a PHP expert, but the way mail is implemented just seems bizarre. I eventually got it working, and decided to use the wpPHPMailer plugin for WordPress.
  • Installed some more plugins that I wanted to use, such as the wonderful Subscribe to Comments.
  • Made some additional adjustments to the code.
  • Upgraded PHP to the latest version.

I also setup a second WordPress installation and changed my website over to that.

After I ran the migration tool I had written, I did some more testing, and discovered a big problem with the redirections! In the C# code I had simply written “datePosted.Month.ToString()” and “datePosted.Day.ToString()” to build the URLs. The problem is that if the month was January, that would return a “1”. Community Server likes to have “01” however! Long story short – I just had to add some regex code to the list of redirections to make it work.

As far as I can tell, it’s all working wonderfully! I’ll be doing more testing over the weekend, and please if you notice anything wonky, let me know.

Next up: my Dad’s blog and the blogs.

Community Server to WordPress: Part 2

WordPress Okay, time for another update on the blog migration. I stopped keeping track of hours, but I would guess I’ve spent about 9 hours or so on it thus far. Part of that time is for the theme though, and I tend to take quite a while working on those.

Here’s what I’ve accomplished since part 1:

  • Discovered that extracting the tags from existing posts was harder than I first thought! That’s because I’ve used three or four different styles for including tags over the years, so I had to update the code to take that into account.
  • Same problem affected the “Read” link at the bottom of a post.
  • Ran into a bunch of crap data problems in Community Server, mainly around trackbacks and and spam comments. For some reason they were appearing to me as posts. I solved the problem by deleting them in the source where appropriate, and accounting for them in the code otherwise.
  • Another crap data issue – one post had four entries!
  • Implemented and tested the redirection code necessary so that existing links will continue to work. I think this part is really interesting because I’ve basically got PHP and ASP.NET running in the same application.
  • Spent some time working on the theme, which you can see at the test blog. It looks more or less the same as this theme, but with some nice improvements.
  • Also spent some time looking into plugins and activated a few.

After some trial and error, I was finally able to import all the content from Community Server to WordPress successfully. Yay!

I didn’t start tagging posts until early 2005, so there’s around 400 or so that aren’t tagged, but even still I think the tag cloud on the test blog is really interesting. Looks like I blog about Microsoft quite a bit! Maybe even more interesting is the fact that I’ve used 1843 different tags.

So I guess I’m about ready to make the switch. Just a few more “clean up” things I need to do (like delete more spam comments). I think I’m going to replace my website with another WordPress installation too, but that shouldn’t take long. The current site is really old, based on ugly code, and it’s mostly out-of-date because updating the pages is so difficult. I think WP will work nicely (plus I can use the same theme).

I’d say the migration is going much more smoothly than I anticipated!

Community Server to WordPress: Part 1

Post Image Back in July I mentioned that I wanted to switch to WordPress. Obviously I haven’t completed that yet, but I have started on it! So far I’ve spent about three and a half hours on the project, and it’s going well. You can see my test blog here.

It’s a difficult migration, for a number of reasons. Firstly, I am on Community Server 1.1 which has been pretty much abandoned. I have no desire to upgrade to a newer version – I’m trying to get rid of CS, after all. Secondly, I want to take advantage of the built-in tags that WordPress 2.3 has, among other things. In my current blog, the tags are actually part of the post content. Thirdly, I don’t want any links to break! So there’s a number of things to worry about.

Here’s what I’ve done so far:

  • Installed a test instance of WordPress 2.3.2.
  • Created a solution in Visual Studio 2008 with three projects: a WordPress data access layer (DAL), a Community Server DAL, and a command line app.
  • Configured SubSonic to automatically generate the two DALs.
  • Wrote some static functions to: extract the tags from my existing posts, remove the footer and reformat the link I sometimes have there, generate a slug for WordPress posts (the words in the link), and build the existing and new URLs for a post.
  • Started implementing the command line app to read a post from CS, apply all of the necessary transformations with the static functions, and then add it to WordPress.

For the most part it’s working well! I’m still tweaking the code a bit to deal with oddball posts, but it’s more or less ready to go. You can see on the test blog that I’ve started testing the code. I think the actual migration will take quite a while, considering I have almost 2000 posts and 5000 comments.

After the migration, I still need to work on a theme, and I need to ensure all the links are redirecting correctly. So there’s quite a bit of work to do, but I think the hardest stuff is out of the way. My goal is to have it all rockin and rollin by Northern Voice.

Switching to WordPress…Eventually!

Post ImageI’ve decided that I am going to switch my blog to WordPress. I am running Community Server 1.1 at the moment, and while it works well enough I know I’d be happier with WordPress. When I have time and have solved the issues with doing such a switch, I’ll make the move.

There’s a very large, very vibrant, and very active community surrounding WordPress. For example, it’s rare to find a blogging tool that supports Community Server – all of them support WordPress. Ditto for widgets and other third party services. Most of all though? WordPress just works the way I want it to.

I’ve used .Text and Community Server for this blog (and DasBlog waaaay back in the day). is still running .Text if you can believe it. My Dad’s blog and the SportsGuru blog we co-author run on MovableType. I’ve played with Blogger, LiveJournal, Windows Live Spaces, and other hosted engines. I’ve seen WordPress used over the last couple years, and was particularly interested when Scoble switched. I started using WordPress quite extensively a couple weeks ago when I started It became clear to me very quickly that WordPress is the way to go. Easy to setup and configure, easy to manage.

These are the goals I have for the switch:

  1. All posts, comments, trackbacks, etc. migrated to WordPress.
  2. All existing URLs will continue to work. The switch shouldn’t break anything.
  3. Existing content will be “cleaned up” a bit (tags stripped and stored in the database using a widget, for example).

I’ve looked around a little, and have come to the conclusion that the only way to achieve these goals is to write some code. WordPress cannot import from Community Server, and an RSS feed isn’t flexible enough to include comments and trackbacks. BlogML is promising, and it might help to an extent, but only with #1. If anyone has suggestions, I’d love to hear from you!

My blog will likely be the last that I’ll switch to WordPress, actually. EclecticBlogs, SportsGuru, and the blogs will all be migrated first, in varying degrees (Blogosphere will likely be a fresh start using WordPress MU and a static archive of what currently exists). By the time I get to my blog, I should be an expert!

Thoughts? Suggestions? I’m all ears! I’ll share my migration experiences here as I go.