scratch that niche!

The Bernardo O’Reilly Factor

One of my favorite movies of all time is The Magnificent Seven. You just can’t go wrong with this movie. The theme music (later repurposed to great effect by the Marlboro folks), the simple story, the backdrop (the era of the Old West and its tough hombres coming to a close) and the actors (Yul Brynner! Steve McQueen!! Robert Vaughn!!! Charles Bronson!!!! James Coburn!!!!! WOW!) make for compelling movie watching.

The best part is the dialogue. This movie is about as quotable as Pulp Fiction but a lot more appropriate in mixed company. Who can forget Steve McQueen, leaning against the pole, and saying in a menacing tone to Eli Wallach, “We deal in lead, my friend”? Or when Robert Vaughn, whose character is running from his own fears, says, “Yes. The final supreme idiocy. Coming here to hide. The deserter hiding out in the middle of a battlefield,” who can’t feel the pathos?

Anyway, there’s one scene there near the end that speaks volumes to me. The pitched battle between the Seven and the bad guys is drawing to a close. Yul Brynner’s character calls out to Charles Bronson’s character, “Bernardo O’Reilly.” It’s the first time we’ve heard this character’s full name, otherwise it’s just O’Reilly.

O’Reilly turns around and says, “Yes, that’s right, Bernardo O’Reilly. Mexican on one side, Irish on the other, me caught in the middle.”

This line of dialogue always resonated with me as a kid (father’s American, mother’s Panamanian, but I was never enough of anything to make either side of the family entirely comfortable) but now that I’ve spent 10 years in the Web business, it resonates even more.

It occurs to me that a web site is some kind of weird hybrid, part design and marketing, part technology beast that needs to be tamed like any other engineering feat. A successful web site has to have buy-in from IT, marketing communications, PR, management, graphic design, and copywriting stakeholders. If the company provides support or customer service through their web site, then add them to the mix. And don’t get me started on the SEO folks, the accessibility gurus, and the KM pros.

The web site becomes this joint multidisciplinary project, but unfortunately, in many cases each group sees the web site solely in its own terms. The designers tend to put aesthetic value at the top of the list, the technology guys are looking at infrastructure, the marketing folks care about converting sales leads, the copywriters want sharp punchy copy but management wants to water it all down with corporate-speak.

The result is often a web site that’s been pulled this way and that, literally caught in the middle of a giant multi-way tug-of-war. It ends up having a little bit of everyting except focus and effectiveness, and oh yeah, a scintilla of empathy for the most important person out there–the web site visitor.

Did I mention what happened to Bernardo O’Reilly right after that snippet of dialogue? He tries to save a bunch of kids who wander out into the middle of the fighting and gets cut down in the cross fire. Not that the demise of this character diminishes his heroism, but I can’t help feeling what a waste it is every time I watch the movie.

And so it goes with web projects. A simple plan up front, a content strategy, some users to test the site, and an easy to install and configure content management system would eliminate the Bernardo O’Reilly Factor. Then we could all get busy doing what matters: crafting an online presence that communicates an enterprise’s value to the marketplace.

Don’t kid yourself: the best compliment you can get about your web site is “I understand what you guys do.”

Guerilla Content Strategy

I’m not one to bandy about terms like “guerrilla this” and “guerrilla that” mainly because I think that most of the folks who tell you they want you to practice “guerrilla marketing” really want you to use more direct mail instead of TV ads. Blech.

However, we get quite a few questions here about content strategy. After all, we’ve developed a pretty good CMS of our own and deployed sites with other CMS tools, and I’ve been writing for web sites and formulating strategies for way too long now. Plus I’ve been very fortunate, having worked with some very fine colleagues who have helped me shape my thinking on web content.

Like any other strategy formulation, the best ones grow from a quirky combination of time, flexibility, and plenty of contact with the real world. Of course, our clients want a workable content strategy now, not six months from now when they’ve already launched their site and have to rework it top to bottom. I tell them it’s possible to attack the problem using some core tenets from the guerrilla marketing movement.

So let me be clear about what I think true guerilla whatever means.

  • Guerilla methods should be highly focused on achieving a stated goal. Please don’t stop along the way to tackle a whole bunch of other (un)stated goals or objectives. You want a content strategy? So stay on target already.
  • Guerilla methods use unorthodox tactics to achieve goals. By unorthodox, I don’t particularly mean edgy, artsy, or neo-whatever. I’m not advocating that everyone in marketing should formulate a web content strategy by dressing up in chicken costumes and having a limbo contest (although the image is amusing). Instead, try something radical–like watching a portion of your audience try to dig through your content now and then asking them simple questions like “What do you think we offer to the marketplace?” It’s painful, humiliating even, but you’ll learn a lot.
  • Guerilla methods are all about using materials, ideas, and approaches that are at hand. Whoever heard of a guerilla warrior during WW2 who had an entire armored strike force at his disposal? They had side arms, machetes, home-made explosives–and they made life really interesting for the opposition. Translation: stop spending your wad on formulating a content strategy–instead, use your money to generate content! Nobody ever goes to a site to admire its content strategy.

Here goes. A small disclaimer before we go any further. The ideas in this post were first formulated by Mary McCommon, Bill Radding, and I while we were at Vignette at the very end of the dot-com bubble. We were trying to come up with an easy way to both organize and visualize a content strategy for a partner extranet so we could communicate it not only to our content developers but also management. I think we did a pretty good job, and I’ve used the model in my subsequent consulting.

Imagine a pyramid not unlike those predator/prey pyramids you remember from biology class. At the bottom of the pyramid, at the widest portion, are all the plankton. Above that strata is a slightly smaller, less wide, strata, full of tuna and bass. Go up one level and you have sharks. At the very top is the Killer Whale or somesuch, but there’s only room for one or two of them because the top predator’s strata represents the narrowest part of the pyramid, or the apex.

How does this relate to content strategy? Well, it goes something like this:

  • Your bottom layer, your plankton, will be filled with what is most likely the easiest kind of content to create. We’re talking calendar events, discussion forums, support notes, how-to snippets, upgrade patches, and detailed technical or product sheets. (Yes, even most blog postings go here too.) Any site will need a lot of this kind of material because it is the kind of stuff used every day by your customers and prospects. Not all of them will have time to download full-blown white papers, they may only need your latest data sheet or software driver.
  • The next layer up is not how-to, but who-did-it and how-they-did-it. What’s the difference? Well, here’s where you put your customer testimonials, case studies, and shorter white papers that are focused on a specific topic, like how to use your product to attack a problem in a specific customer niche. This is the strata that is the most absent on web sites, even those that are loaded with lots of how-to information.
  • The layer above that is why-do-you-do-it. Here’s where you can take some time to generate position papers, longer white papers, reports, ebooks, and even books (IBM’s successful Redbooks series come to mind) on why you should take one particular approach over another. For example, there are dozens of ways to approach the problem of connecting to a database with any scripting language. Should you grow your own method? Should you use a public API? Should you go another route? What are the pros and cons of each? This kind of information empowers and educates your customer.
  • Finally, at the apex of your pyramid live the roadmap pieces. These content items pull everything together, providing signposts and guidance through your content. They can be as simple as an annotated list of links or as comprehensive as guides for new customers. Here is a good place to have interactive Flash movies that visually demonstrate the power of your product or service. At the apex you don’t want depth, you want to give your readers an indication of your overall breadth.

Does everyone need to do this? No.

Can everyone do this? Sure, with enough discipline, dollars for content creation and editing, and time, you can. You have to start somewhere, and most people start with the plankton and work their way up, than put some nice capstone pieces in place when they’re done. My experience tells me that its best to have a few things from each strata when you launch, particularly the roadmap content, because then everyone is clear on what you’re trying to achieve.

That’s it. Everything you wanted to know about content strategy but were afraid to ask the CMS guy. (Well….not really. In the future I’ll talk about the other faces of the pyramid.)

A simple script to sort HTTP access log by IP address

Sometimes you need to know how many times any particular host is hitting your web site. In fact, you may need to know who your top 10 (or 20 or 50) referers are. When working on a project back East, I came up with a quick Perl script to analyze Apache’s access_log file and give me back a list of IP addresses and hits from those IP addresses.

Here is the script.
#!/usr/bin/perl
sub hashValueDescendingNum {
$ips{$b} < => $ips{$a};
}
open(LOG, “/var/log/httpd/access_log”) or die “couldn’t open LOG!”;
open(OUT, “>/tmp/ipaddrlog”);
while ($line = <log>){
#match IP address at beginning of log file line
$line =~ m!(\d+\.\d+\.\d+\.\d+) !gi;
$ips{$1}++; #save to hash, incrementing value by 1 each time
}
foreach $key (sort hashValueDescendingNum(keys(%ips))){
print OUT $key . ” : ” . $ips{$key} . “\r\n”;
}
close LOG;
close OUT;

This script will open a log file in /tmp called ipaddrlog and read through your access_log file (you may have to adjust the script to meet your local filesystem needs).

The results look like this:
192.168.1.123 : 590003
192.168.1.11 : 588332
192.168.1.232 : 23302
...

Recursively searching for a string in UNIX

Have you ever had to look for an elusive variable or function name in your code? Are you developing on UNIX or Linux? Then you’re in luck, because you have any number of ways to find every single file that contains the string you’re looking for.

The first way involves the use of xargs, a command that allows you to build and execute command lines from standard input. What we usually do is run a find command to narrow down a list of files, then pipe that list of files to xargs and run a grep.

For example, let’s say that you were looking for every instance of the $_GET variable in PHP inside a WordPress installation. First we cd to the root folder that contains all your WordPress files.

Then we run:
find -name \*.php | xargs grep $_GET

The result is a list of files:
./xmlrpc.php:include('./wp-config.php');
./wp-mail.php:require(dirname(__FILE__) . '/wp-config.php');
./wp-pass.php:require( dirname(__FILE__) . '/wp-config.php');
./wp-blog-header.php:if ( !file_exists( dirname(__FILE__) . '/wp-config.php') ) {
./wp-blog-header.php:require_once( dirname(__FILE__) . '/wp-config.php');
./wp-trackback.php:require_once( dirname(__FILE__) . '/wp-config.php' );
./wp-comments-post.php:require( dirname(__FILE__) . '/wp-config.php' );
./wp-register.php:require('./wp-config.php');
...

Another way to achieve the same thing is to run a recursive grep command, like this:
grep -rl "$_GET"

You’ll notice that this method is a lot slower than running find and piping it to xargs, but it is a lot easier to remember.

« Previous Page