Migrating from Haloscan and Blogger to WordPress

Earlier this year, I was informed that Haloscan would be shutting down.  When I created my blog in 2004, Blogger didn’t support comments.  So I set up my blog to use Haloscan’s comment functionality.  Strangely enough, four days later I received an email announcing that Blogger would be shutting down the functionality to publish blogs via FTP, which is the method that I used.  They say that this method only represents about 0.5% of Blogger users, but as one of those one half percent I am annoyed by their decision.  The alternatives were to change to a Blogspot blog or use what they call a Custom Domain, where the blog is hosted on Google’s servers to which you point your domain.  I liked neither of those options because I have my own domain and hosting.  Therefore, due to Haloscan’s closing and Blogger’s changes I decided to install a blog application on my own hosting account.

I looked at a number of blogging applications on opensourceCMS.  They have demos set up where you can use a live system, which makes comparing applications easier.  I decided to go with WordPress.  I was also looking at Movable Type as it supported static page creation, which is the model that Blogger used.  I heard that WordPress was a lot easier to work with than Movable Type.  Plus, there is a plug-in for WordPress (WP Super Cache) that will handle static generation of pages for increased performance if I want (not that I expect that much load on my site).  Installing WordPress was simple enough: unzip wordpress into a directory, create a database, point the config file to the database, and load the index page.  On the other hand, migrating from Haloscan and Blogger to WordPress was not as effortless.

Even though both Blogger and Haloscan have an export functionality creating an XML file, neither of these files is supported for import into WordPress.  There is support in WordPress for importing Blogger data via the Blogger API, but it didn’t work at first and there still wasn’t a way to get the Haloscan comments into either Blogger or WordPress.  So it became apparent that I would have to improvise to achieve a solution.  Thanks for nothing, Haloscan and Blogger.  In order to illustrate how ridiculous this process became and perhaps to help anyone facing the same problem, I have included the steps I had to take to migrate from both Haloscan and Blogger to WordPress.

  1. Install WordPress:  This is the easy part of the process and no further elaboration is needed.
  2. Temporarily convert to Blogspot:  WordPress supports importing Blogger data, but it is not able to import blogs that use FTP publishing, which is what mine used.  This doesn’t make any sense as the post data is in their database regardless of the method you use to publish the data.  So, in order to use the import feature, I had to convert the blog to a Blogspot blog so that the Blogger API could export the data to WordPress.
  3. Import blog into WordPress:  Once the previous step was taken, importing the post information into WordPress can be done by clicking Import in the Tools menu and using the Blogger option.  It would have been nice if they had some documentation describing the requirements for using the import feature.
  4. Convert back to FTP mode:  Converting the Blogger blog back to using FTP publishing isn’t necessarily required, but I didn’t want to leave the old blog on Blogspot.
  5. Export WordPress posts & import into Access:  At this point, I had all of the posts in WordPress without any comments.  If I was using Blogger’s comment functionality or if I had been able to import Haloscan comments into Blogger, WordPress’s import would have imported the comments also.  So, in order to know the post ID in the WordPress database with which to associate the comments when I import them, using phpMyAdmin I exported the post table from the MySQL database to Excel.  I then imported this data in an Access database.
  6. Export Blogger & Haloscan to XML:  Haloscan used the Blogger post number to link a comment to a post.  So, not only did I need to export the Haloscan comments to an XML file, but I also needed to export the Blogger post data in order to know the Blogger post ID.
  7. Import Blogger & Haloscan into Access:  I used XMLFox to convert the exported XML files into Access databases.  After copying the tables from those databases into the database with the WordPress post data, I finally had all the data in one place.
  8. Export comments from Access into WordPress:  As already mentioned, the link between the Blogger data and the Haloscan data is the Blogger post ID.  It would have been nice if the WordPress import feature had imported the Blogger ID as a custom field for each post, but maybe they figured that there was no reason to make things easy for me.  The only other option I saw was to use the post title to join the Blogger/Haloscan data to the WordPress data.  This necessitated finding and eliminating any duplicate post titles before beginning the whole process.  Joining these tables together, I created a query to output the comment data in the structure of the comments table in WordPress.  Before exporting the query results, I had to do some data sanitizing as the Haloscan XML file imported into Access had plenty of characters that needed to be escaped before an import into MySQL was possible.  After that was completed, I exported the comment data to a CSV file, which was subsequently imported into the WordPress comments table.
  9. Update post count in WordPress:  After all of the comment data was imported, the posts were still not showing the number of comments even though the comments were appearing when viewing the post permalink.  As opposed to being calculated when loading the blog, the comment count for a post is stored in the post table.  So, I created a query in Access to determine the comment count for each post and assemble a SQL statement to update the comment count for each relevant record in the post table in the WordPress MySQL database.  After running those update queries in phpMyAdmin, the comment counts displayed correctly and the process is finally complete.

Oh, and did I mention that I had to do that for 3 blogs that needed to be migrated?  Yeah, not fun.  But after all of that was complete, the fun began in customizing WordPress.  I downloaded a theme I liked, activated, and customized it all in the admin interface.  Since the theme is done in PHP, it is dynamic and allows you do a lot of different things, as opposed to Blogger templates which are in HTML only.  In fact, I am contemplating using an additional WordPress installation in the root of our site as the content management system for those pages using WordPress’s page functionality.

Snow!

It snowed and iced yesterday as everyone living near me already knows. Kara and I went out to play in the snow/ice this morning, and we enjoyed ourselves. I took some pictures, which I have uploaded into the gallery. You can browse them in the album named January 2010 Snow.

Europe

Kara and I returned from Europe this last Sunday. We were quite tired. I was busy with work this last week and have just now gotten all of the pictures posted. We had an incredible time. I think we were able to do and experience a lot. I felt that my mission in Germany gave me a small taste of Europe, but now I have experienced more of the variety that Europe has to offer. I was able to add to my coin collection. I have now 8 non-US currencies represented. It was wonderful to experience other cultures and we enjoyed meeting Kara’s relatives in Nuremberg. We were also glad to return back to our great nation as we were tired and wanted things to be back to normal (not to mention that living out of a suitcase gets old after a while).

Anyway, I uploaded the pictures into their own category in the gallery. Or if you like, here is a list of the individual albums:

Refer to my previous post and the map below for a summary of what all we did. Or you can read Kara’s blog posts that she posted while we were traveling (listed below).


(View larger map)

Itinerary

On Monday, I made the travel arrangements for my work trip to Europe in June. Originally, they said we would be there 4-6 weeks. But they later changed that to a week (although there is the possibility that I could go back later in the year if more time is required for the project). So, Kara and I figured that we would add another week on to that for vacation. During much of that time we will be staying with Kara’s cousin Rebecca in Nuremberg, Germany. Anyway, I figured I would share our planned itinerary (we may add or subtract from this, but this is what it looks like right now).

6/18 – 6/19: Flying from Nashville to Manchester, England via Atlanta arriving just before 9am on 6/19

6/19: At work in Manchester

6/20 – 6/21: The latest info is that we won’t be working on the weekend, so we might take a train down to London on 6/20, we’ll see

6/22 – 6/25: At work in Manchester

6/26: First day of vacation; we will spend the day in Manchester

6/27: Taking an early train up to Edinburgh, Scotland for the day (returning in the evening)

6/28: Flying from Manchester to Nuremberg, Germany via Zurich, Switzerland

6/29: Visit Neuschwanstein Castle (and since we’ll be so close to the border we were thinking of crossing into Austria just because)

6/30 – 7/1: Spend two days showing Kara around Berlin, Germany

7/2: Visit Prague, Czech Republic (while I was in Germany, a number of people there insisted that I should visit Prague sometime)

7/3: So far, I am leaving this day open; since we’ll be in Nuremberg, maybe Rebecca will want to show us around Nuremberg or maybe we’ll do nothing, who knows

7/4: In the evening, flying from Nuremberg to Zurich; then 11.5 hour overnight layover till flight next day (there was no other option that didn’t cost way too much)

7/5: Busy day flying Zurich to Manchester, Manchester to Atlanta, and then Atlanta to Nashville

Re-routed

Today I traveled to Dallas, TX for work, but an interesting thing happened. As mentioned in my facebook status, I booked flights from “Nashville to O’Hare & O’Hare to Dallas/Fort Worth. I normally fly American Airlines direct to Dallas, but I had to use credit from an unused trip on United Airlines.” While I was waiting for the first flight, an agent at the gate desk called a couple names and mine was one of them. She explained that the flight was overweight. She offered to put me on a direct flight from another carrier(i.e. the American flight I would have taken) and give me a flight voucher. Who would say no to this (and was I selected randomly or do they think I am particularly heavy)? On other occasions I have experienced, when they have overbooked or are overweight the airline would want you to take their next flight that day, or in the case of my return from San Francisco in April, they offered to put you up in a hotel and take their first flight the next day (I was tempted to take that deal, but Kara wouldn’t have been happy with that decision). This one, however, was great in that it was all positive. My itinerary changed from having a layover to a direct flight, I got there 3.5 hours earlier, and I didn’t have to fly on a regional jet. Plus, there’s the free flight voucher. For my troubles, they bribed me with a voucher for free round-trip airfare anywhere in the contiguous 48 (well, anywhere that United flies). So, now I have the fun task of deciding how to use this voucher (which has to be used by 5/17/2010). Too bad I can’t use it for Kara’s airfare on our trip to Europe in June. I did have the idea that I could use it to fly somewhere interesting and add some states to my states visited list. That would be fun (perhaps not to Kara). Anyone have suggestions as to where to go?

April’s Travels

Kara almost had a heart attack when she saw that I was writing a blog post. Anyway, I figured I would give an update of what has been going on recently. Work has been fine lately. This month was pretty full as far as travel is concerned. A couple weeks ago I was in San Francisco. On my off time, I went around and saw the Golden Gate, Point Bonita Lighthouse, Coit Tower, Lombard Street (a curvy road with a 100 foot elevation change), Municipal Pier, Pier 39, & the Marina Green Park. San Francisco was a cool city to visit. The last day of the trip was interesting. I got up on Friday around 6:30am, finished up everything for work in the afternoon, and did some final sightseeing in the evening. I took the red-eye at 11:00pm pacific time, landed in Atlanta at 6:30am eastern time, then left Atlanta, and landed in Nashville around 8:45am central time on Saturday. As crazy as it sounds, if I need to go to the west coast in the future I would probably prefer the red-eye on the return trip over waiting till the next day. It just seems like such a waste to burn the next day on travel alone, when you can get in the next morning and still be able to do stuff, albeit drowsy. Anyway, if you want to see the pictures from this trip, see the San Francisco album in the gallery.


(View larger map)

So this last week, I also had to go to Atlanta. Kara tagged along as she wanted to see a number of people she knows there. We also wanted to go see some stuff together. On my off time, we took the subway into town and went to the World of Coca-Cola museum (since I had never been), Centennial Olympic Park (well we walked just outside of it as there was a private event that day that had it closed), and the Underground. I don’t know what the big deal is about the Underground. Maybe it was cooler in the past, but I wasn’t at all impressed (this was my first visit). I am not being judgmental since Kara agrees with my opinion. In fact, I would not be comfortable going there at night. There weren’t even any cool places to shop. For example, there was this store that said it had items “as seen on TV”. We thought that was interesting, so we went inside. It turns out this store had knock-offs of the items “as seen on TV” (i.e. ShamTowel instead of ShamWow). How pathetic? We also went to Stone Mountain. It was a lot of fun despite having developed some kind of sinus illness half-way through the trip. Towards the end of the trip Kara was also feeling under the weather. Needless to say, we were both tired and glad to get back home. To see my pictures from this trip, visit the Atlanta album in the gallery.

I’ll end on one final thought. I already mentioned this in a previous Facebook status, but I will relay the idea for any non-facebookers. I found out last Sunday that I will be going to Manchester, England for 4-6 weeks in June for work. Apparently, most of the people involved with the project my boss and I will be working on are in Manchester. Therefore, we are going over there. I don’t know if it is going to be six weeks all at once or two weeks there, two weeks home, two weeks there. Either scenario, Kara wants to go with me. We’ll have to see how long our budget allows her to tag along for. We would like to use some vacation time and travel through Europe while we’re there. Luckily, we have some money saved up; we just have to decide how much we want to spend (it could get expensive quickly). I hope these plans don’t fall through as I have wanted to return to Europe for a while.

Vacation Pictures

Kara & I enjoyed a full week of vacation last week (when is the last time that has happened?). We went to Panama City Beach with almost the entire family. The condo we stayed at was on the 25th floor. So, as you might imagine, I took copious pictures from the balcony (as well as at the beach). I have created an album in the gallery where I have uploaded the pictures. Enjoy.

Tree Climber

In the interests of practicing some programming skills that I don’t use at work (while I have written a few .Net apps at work, I mainly code in ABAP), I have tried lately to come up with fun projects to work on personally. A while back Mom and I were talking about genealogy and the fact that she mainly has information in PAF on her family and not Dad’s (even though there is lots of info in the Ancestral File on FamilySearch.org). I mentioned that I could probably write a program to extract that data, and she said that data would be good to have. As you already might have guessed, last week I took up the challenge.

I set out to write a C# app to extract all genealogical data in the Ancestral File for my direct ancestors. Of course, I had to give it a cool name. I called it Tree Climber…get it? You know; it’s a program that climbs a family tree. Most people reading this are probably shaking their head at me, but I thought it was clever. I utilized a technique called scraping, where the program gets a web page’s source HTML from which to harvest information. Some websites consider this a violation of their terms of use; so I checked the FamilySearch.org terms of use, which does not mention such a violation. So here’s how it works:

  1. For a given person in the tree (I started the program at this node in the tree), download the GEDCOM file using the link found at the top of the page.
  2. Store nodes 8 through 15 for further processing.
  3. Repeat steps 1 & 2 for all of the stored nodes.
  4. Once all of the nodes have been visited and all GEDCOMs downloaded, merge all of the GEDCOMs into one combined file. This is used to import into PAF.

After a couple days of coding & testing, I was ready to try it out. As mentioned, I started the processing at Caitlin (Mom’s Caitlin, not Shannon’s) to include both Mom and Dad’s genealogical information. I created the program with a textbox that shows the names as they are extracted. While it was running, I was amazed at all of the interesting names and at the volume of names. We were always told that a whole lot of genealogical work has been done on Dad’s Mother’s side. Now I have an idea as to how true that statement is. My program ran for 10 hours before it had completed! It took 6 hours to extract 5,683 GEDCOMs and an additional 4 hours to merge them into one combined file. After I imported the GEDCOM into PAF I discovered that 19,580 names had just been extracted. Holy cow! The volume of names is not nearly as impressive as some of the cool people I found that I was related to.

I was actually going to list the complete descendancy from me to Otto I (just because I can), but I figure I have been long-winded enough. If anyone wants the data I extracted or if you actually want to see the descendancy just let me know.

Bonehead

DeSean Jackson is a bonehead. In fact, he is the bonehead’s bonehead. Check this out; I picked up DeSean Jackson for my fantasy team as I was very week at wide receiver (and pretty much everywhere else). He was playing last night and I needed some points. So he catches a 61 yard pass from McNabb going into the end zone. What happened next must be watched to be believed (see the first clip). That was 6 points he threw right out the window for me. Want to guess what the final score was in my game this week; yeah, I lost 76 to 80. I could have used those points you idiot. Well it looks like he has done this kind of thing before (see the second clip); what a moron. At least I am not the only one vexed by this jerk.

Monday Night Football
2005 U.S. Army All-American bowl

Grass

I had to mow the lawn for the first time this weekend. Luckily, the sodded portion was the only bit that needed it. So it didn’t take nearly as long as it will in the future. The section of the yard that was seeded and strawed started out great but eventually fizzled despite Kara’s dedicated watering routine. The sodded part of the yard, on the other hand, has been doing well, thus necessitating a lawn mowing. Even though I abhor lawn mowing, spending the extra money to get a self-propelled lawn mower(as opposed to entirely “me propelled”) was very much worth it. It is especially useful as the front yard has a little bit of slope to it. My question is why couldn’t dad have spent a little more money on a less painful lawn mowing experience for us back in the day? Surely, this feature isn’t new?

Anyway, I thought I would end this post with a picture of our new front doormat. Isn’t it lovely?