Jun 04

BlogCFC2WPlogo1.gifI looked around for a migration script to port my blog from BlogCFC over to WordPress and didn’t find anything so I wrote one. First lemme say that BlogCFC is a great piece of software and I don’t want to encourage anyone to move away from it. For myself the decision to move to WP was one of those “eat your own dogfood” choices. 100% of the stuff we’re building at Grid7 right now is centered around Structured Blogging and Microcontent. WordPress and Moveable Type are currently the only two authoring tools that have plugins that support this. For me to advocate microcontent without having the ability to publish it would be like Ray advocating BlogCFC and hosting his own blog on WordPress. Plus removing barriers to exit on a piece of software should theoretically increase the adoption of its usage because people can now safely use it knowing that they aren’t locked in permanently. Anyways, I asked Ray if he was cool with me releasing this code and he had no problem with it. There is a Readme included but basically here’s what you do:

Download the BlogCFC2Wordpress.zip file

  1. Setup a new instance of WordPress (you’ll need to be able to run CF and PHP side by side)
  2. Configure a datasource in CF administrator for your new WordPress db.
  3. Extract the contents of the zip file to a directory on your site
  4. Modify the config.ini file to reflect the source and target datasources
  5. Provided you want a fresh install you should clear out the dummy data that comes with WP
  6. Run the RunMe.cfm file
  7. Delete the BlogCFC2Wordpress directory
  8. Two optional last steps
    1. put the rss.cfm file in the root of your wordpress blog to keep all your old subscribers
    2. put the index.cfm and qBlogCFCPosts.xml files in your root to handle redirects for all your old links

Provided that it worked you should see a screen that looks like this->

BlogCFC2WPscreenshot1.gif

Obviously you’ll need to mimic the directory structure of your BlogCFC instance so all the files referenced in your posts continue to work. I just moved my downloads and images directories over and it worked fine. I updated the stylesheet to include the .code classes so inline code would display properly. There were some weird idiosyncracies with the way that the inline embedded flash player was handled by WordPress/php but that was really the only gotcha and I just referenced it in a new window on entries where it broke (it was something to do with the tag). If you do the last two steps your users should never have to change anything and all your legacy links should continue to work.

The code is actually commented (i know, crazy right?) and makes heavy use of components so it may have some instructional value. There’s some other nuggets in there and one technique in particular that I’ve started doing (and I don’t know whether this equates to CFUnit or another type of unit testing – i’m admittedly horrible about not writing unit tests) but it’s been a time-saver on another project where I’m dealing with a long sequence of calling various components that access external systems to get the objects I need to do an operation. Basically it’s a few lines of code that lets you serialize the object and write it to a file so that for testing rather than calling the components each time, you can instead read the file and deserialize it to create the same object so it behaves as if it were getting it from the prior sequence. This may be old hat for others but it’s a technique that has saved me time and the pain of repeatedly clearing out database entries.

The performance of the migration script is fine for me (it took 13secs to move 73 posts, 75 comments, 130 category mappings and 18 categories). It’s admittedly not optimized (I prefer the syntax and I realize it instantiates the component on each request under this method). There’s plenty of room for improving this with the function-style syntax for instantiating objects and for someone like Ray who has 5000+ posts you might have to (or else bump your Timeout in the CFadmin) but it worked fine for me and I have no desire to do this. I’ve tested it against CFMX7, MySQL 4.1 and Win2k3 with BlogCFC v. 3.8 to WP v.2. There are some new fields in the latest version of BlogCFC so you would need to make a few minor modifications to the query syntax but it should be pretty painless. Also the sql is vanilla with no stored procs (all the logic is in the cfc’s) so it should also work with other databases like Postgres or MSSQL and it should run fine on BlueDragon. It should be noted that I did end up using a queryToArray utility found here and this is embedded in a util component in the distribution.

The usual discalimer applies on this code – backup your WP db before you use it if there’s anything that is worth saving! I’m not providing support on the code. You can repost it and take it apart and make it better if you want but please leave the original comments and license intact. It’s the MIT license which is as close to having no license as you can get.

One thing – I was on the fence about using feedburner because athough I wanted the stats and the other promotional and convenience features they offer, I didn’t like the idea of promoting an RSS link I don’t have control over (ie. they decide to start charging and have you hostage by having control over your feed). My partner came up with the great idea to use a link that redirects to feedburner. Simple and genius.

Big ups to Ray Camden and Matt Mullenweg for writing useful Blog authoring tools. Hopefully this migration utility makes both products more accessible to others.

Oh, and in the never-ending pursuit to master the art of the tripodless qtvr, I took one yesterday in the middle of the pool at this pool party we went to on the side of Camelback Mountain. It was like the house they blew up in Lethal Weapon 2 and it was was every bit as ridiculous as it looks.

altitudePoolPartyQTVR1.jpg
May 19

Following the lead of my man James Archer on his latest post “Powering a Professional Web Firm” here’s a run-down of the technology we’re using inside Grid7. Colorcoded by opensource, Freeware/shareware and commercial products.

Software

Communication/Collaboration

Environment

  • Server platform (Grid7) – Apache FastCGI serving Ruby on Rails 1.1, Python
  • Server platform (Lights Out, G7 website) – IIS 6 serving ColdFusion MX 6.1, BlueDragon, PHP 4, ASP.NET, Perl

Frameworks

Development

Design

Reporting

Productivity / Administrative

Miscellaneous Apps

Miscellaneous Services

Hardware


Future Plans

What’s interesting is how central the iPod device has become as far as a platform for communication for us. We use it for capturing and syndicating the audio from meetings and I use it personally along with the Griffin iTrip to stay ontop of the latest conferences and interviews with industry experts via ITconversations and Venture Voice. I can’t comment on all the Mac applications as that’s Kimbro’s realm (hopefully my realm eventually). If you have any critical pieces of infrastructure you’re using in your company that aren’t on this list, do tell.

© 2005 Lights Out Production – All Rights Reserved Worldwide

May 15

What do Percocet, Vicodin, Lidocaine, coldpacks, physical therapy, Flexall 454, a sling and acupuncture all have in common? They’re all pain-alleviating technologies I’m using right now on my shoulder after sustaining a rotator cuff injury on my birthday last weekend. Check out this xray from the emergency room:

Unfortunately it doesn’t do much to show the knotted muscles or convey the level of pain associated with this injury. And I didn’t get the films for the MRI I had on wed (ever have a 4″ needle jammed into your shoulder socket to inject contrast dye? wheeeee). I’m fairly certain that if torture experts learned about this, the “bamboo under the fingernails” technique would be quickly replaced. We had a great time for Cinco de Mayo and took the party bus out and celebrated my 31st. Unfortunately my truck’s battery somehow died that night and even though I got it started by jumping it the next morning, it crapped out in traffic on my way to buy the battery. I guess being dehydrated, amped by the adrenaline of having cars whizzing around you and trying to push a one-ton automobile out of the road by yourself is a bad idea… I got it moved but not before ripping the muscles apart in my left shoulder.

Odd things I’ve learned this week being one-handed:

  1. For the first time since high school, I am able to write faster with a pen than I can type.
  2. Flossing is one of the more difficult activities to achieve with one hand.
  3. I’ve actually found a practical use for the electric pepper grinder gag gift I got for my brother for Christmas
  4. How much we take for granted the absence of pain everyday

On a different note, the window for applying in the 4th round of submissions for the 9rules Network is tomorrow (Wed) one day only. My friend Chris is currently syndicated through them and says it has tripled his readership so it’s worth it for anyone who uses his/her blog to reach potential clients

I’m scrambling to complete Phase I of the ABC project this week to meet their deadline. I feel like the runner that comes around the final turn only to pull a hamstring and wind up clawing his way across the finish line though- typing is waaay hindered right now and it’s going to come down to the wire. I will do an extensive writeup on what I learned and all that was involved in delivering this system once it’s live. It’s been an enormous exercise in pushing the limits of screen scraping techniques to essentially emulating a browser and writing a wrapper API for a system that had no way of exposing its internals and then to automate a bunch of business processes via the API I created. The most challenging thing is not that this company fails to provide an API to their system but that they have countermeasures in place to thwart people like me from doing what I’m doing so essentially I have to defeat those first before I can make the screenscraping work. My legacy integration stuff is all done in ColdFusion running on BlueDragon JX and entirely done using cf components and xml mapping files. What’s nice is when this company inevitably changes the formfields in their system, I only have to update an xml mapping file and the client-facing application theoretically should not have to change at all. The guys from Fivetwenty Web Services were an absolute pleasure to work with (I subbed the client-facing portion to them so I could focus entirely on all the legacy stuff). Their stuff is all .NET and we talk XML back and forth. The next phase will encompass all the financial data and involve extending the legacy integration to talk with a housing provider app that rides ontop of a FoxPro db, a custom Cobol accounting system and an AS400 that has all the data from the social workers- all this to avoid the volley of faxed patient information that is their current process. Everything must be HIPAA-compliant so it’s all stored encrypted in the db and the encryption key actually resides on a different network segment (thanks to the 520 guys)- it has been quite an experience setting it up… I will definitely share what I’m allowed to as far as lessons learned.

BTW, Pandora rocks – if you haven’t used it yet, be sure to check it out. It’s a free, flash-based music discovery service that lets you setup your personal radio stations and learns to recommend artists you like. What’s cool is you can share stations with friends. I just added their js widget to my blog on the right column to syndicate my stations. This replaces shoutcast now for me as being the music of choice during the day.

© 2006 Lights Out Production – All Rights Reserved Worldwide

May 09

MCping.comToday we released a cornerstone, enabling technology that serves as a librarian/notification service to allow structured blogging content created using microcontent to be funneled to easily consumed by edge aggreator services. My partner Kimbro wrote the structured blogging plugins for both WordPress and Moveable Type which have been available for a few months. Adoption of the plugins is a chicken/egg conundrum however until there exists a compelling reason to create content using micontent definitions.

MCPing is the equivalent to the “Ping-o-matic” service of blog posts and provides a central, open notification system to any edge aggregator that wishes to subscribe to a certain MCD channel. Soon to follow is the next project we have been developing, Rawjobs.com – the first edge aggregator to consume these structured posts and provide a job posting service.

Read more about what’s to come on the Grid7 site and be sure to subscribe to our new podcast that promises to provide a more tangible, organic means for sharing the insights we gain through our pilot program.

© 2005 Lights Out Production – All Rights Reserved Worldwide

Tagged with:
Apr 29

“Value-for-Value” as my friend Ed Nusbaum would say… if I hadn’t already filed my taxes this year I would try this approach:
************************

Dear Internal Revenue Service:

Enclosed you will find my 2005 tax return showing that I owe $3,407.00 in taxes. Please note the attached article from the USA Today newspaper dated 12 November, wherein you will see that the Pentagon (Department of Defense) is paying $171.50 per hammer and NASA has paid $600.00 per toilet seat.
I am enclosing four (4) toilet seats (valued @ $2,400) and six (6) hammers (valued @ $1,029), which I secured at Home Depot, bringing my total remittance to $3,429.00. Please apply the overpayment of $22.00 to the “Presidential Election Fund,” as noted on my return. You can do this inexpensively by sending them one (1) 1.5″ Phillips head screw (see aforementioned article from USA Today newspaper detailing how H.U.D. pays $22.00 for each 1.5″ Phillips head screw). One such screw is enclosed for your convenience in matching the correct type of screw.

It has been a pleasure to pay my tax bill this year, and I look forward to paying it again next year.

Sincerely,

TAXPAYER
************************

note- this came on a printed page from my grandmother so I don’t know to whom it can be attributed but it’s genius. Odds of the IRS finding the humor in this…zilch. Odds of getting audited after this stunt…solid to very solid.

Apr 28

pasteurizedThought

Paul Scrivens over on 9rules Network recently advised prospective applicants for their network to maintain consistency in the frequency with which they post. I’ve seen this advice given elsewhere so I don’t mean to pick on Paul but I respectfully disagree with this. Blogging is not about informative journalism, it’s about taking what’s in your head and bubbling it up into a virtual playground which extends beyond the earshot of the people you normally share your ideas with and making them available for anyone on the playground to consume, synthesize, criticize, remix and respond. It’s not about grammatically-perfect language, absence of spelling errors or slick design (though those elements help the digestibility and transmissibility of your thoughts)- it’s about unadulterated expression of the things that are core to one’s being and it’s about connecting with other people on a very fundamental level. The term blog when used as a verb still feels hoaky to me because it seems to imply that you’re practicing a different art that involves customary practices. Dude, you’re not- you’re writing. Period. It just so happens that your publishing mechanism incorporates certain features that make it easy for people to monitor and respond to your words but there’s nothing inherent to this act of writing when it’s on a blog that should demand it occur on a certain schedule. I went 3wks this month focused on other things and now this is my 3rd post in the past 12hrs… If you’re looking for traditional journalism with regular frequency of publishing you pick up a trade publication or periodical (ahem, periodic-intervals…). Imposing artificial consistency and forcing regularity on one’s blog posts robs them of the characteristic that makes them interesting to begin with- their "raw-ness."

The critical thing to understand here is that the people writing the interesting blogs out there are not writers by trade- they are wacky people in weird professions doing bold things and chronicling what happens. It’s the realest of the reality shows- an uncut, from-the-source account of what is happening. Would you rather read the blog of a media journalist or the blog of a deep-sea treasure hunter? How about a forest fire smoke jumper? Or an arctic explorer who hiked to the North Pole on foot ? Call me crazy but a few weeks without posts from any of those people would be completely acceptable. I don’t proclaim to have nearly as sexy a job as any of those people but I’m extremely excited about the projects I’m part of right now and I’ll go stretches of several weeks without posting and instead focusing intensely on other pursuits. Being able to write at will and not adhere to any deadlines (I believe) is core to the proposition of what makes blog content compelling. If you have ever tried writing a piece of music by a schedule it’s the same effect. So "why do you write?" is the question my buddy Keith asked. It’s a stew of motivations for me, namely:

  1. expression: idea catharsis from all the things that pile up in one’s head
  2. connection: a basal desire everyone has of connecting more intimately with other human beings
  3. uncertainty: that "you-neva-know-whatchu-gonna-get" thrill of the random backflow of ideas and people you meet
  4. archival: consolidation of insights and techniques and references in a spot you know you can come back to and refer others to
  5. credibility: hosting a living resume that anyone can traverse to learn your capabilities
  6. encoding: writing helps with retention and recall of concepts later on
  7. exposure: shameless self-promo for whatever you do and a way of reaching new potential customers

Running your raw observations through any purification process dillutes the effect of each of the above and removes the edginess – at that point you’re not truly L-I-V-I-N as Wooderson would say. Google’s blog as useful as the info is, has the distinct flavor of being run through five approval layers and tweaked by marketing folks until all the impurities are gone and it "meets criteria for alignment with corporate vision" or whatever. What’s funny is getting syndicated by 9Rules is on my laundry list of goals – arguably criticizing the advice of their founder is counterproductive to the realization of that goal and yet reserving one’s honest opinion for the sake of advancing is an empty win and in doing so you trash the validity of what you’re you’re trying to get syndicated. And therein lies the rub…but that’s just my non-journalism-major take on this subject. Oh and I swore I would never fall into the trap of blogging about the act of blogging like Dennis but here I am doing it- I suppose it’s inevitable at some point.

© 2005 Lights Out Production – All Rights Reserved Worldwide

preload preload preload