Although Facebook has a nice blogging application that you can integrate, it's also quite simple to publish your RSS feed directly to Facebook

I'm not a huge fan of Facebook's usability - their navigation is all over the place - so here's a step by step:
  1. Log in to Facebook.
  2. Click on Notes:
    Facebook Notes
  3. Click on My Notes:
    Facebook My Notes
  4. Click on Edit Import settings:
  5. Enter your Blog's RSS Feed into the Import an External Blog:
    Facebook Import an External Blog
  6. Facebook will then show you a preview of your RSS feed in its entirety and it will begin publishing your blog to your profile's Notes.
Leveraging RSS is a great corporate blogging strategy and it requires no additional effort!

When you Blog to earn customers, it's important to understand that you become a voice for your company on the search engines.  When I work with clients, the question comes up, "Will anyone even read my Blog?"  The answer is a simple "yes."

The chart below is from Fast Company magazine and really tells the story about how Blogging for SEO can power any business to qualified leads online.  When implementing multi user Blog software you can add multiples to the amount of keyword rich content you can create.

Fast Company Graph
Note that TripAdvisor has 15 million reviews on it's site with 11 million or so visits, versus CitySearch that has only 600,000 reviews boasting over 30 milliion visits.  Blogging for SEO using a multi user blog software amplifies how much search you can win with your Blog posts.

Blogging to earn customers doesn't have to be intimidating.  It's a matter of doing what you do best working on a platform that organizes your content to win search.

Start a business Blog yesterday, and do it for the right reasons.  This is a reputation economy where everyone has an opinion about their experiences.  Shouldn't you have a voice in the conversation?

Blue Grass Mailing, on demand printing, corporate bloggingYesterday I had the pleasure of spending most of the day with BlueGrass Mailing in Lexington Kentucky.  Why would a lettershop in Kentucky be interested in Corporate Blogging Software?

Well they want to drive more leads.  What's great about BlueGrass is that they have a fully baked Corporate Blogging Strategy that leverages Compendium's Multi User Blog Software to generate lots of great content based on real-life stories about their customers.  

BlueGrass recently invested in a new on demand printing system from Xerox that will greatly expand their printing capacity and is a great compliment to their existing lettershop and mailing fulfillment business.

The idea is to start a business blog program that will leverage employee bloggers and real customer stories (Just like Josh Bernoff recommended in his latest report: Time To Rethink Your Corporate Blogging Ideas)

By telling lots of those stories,  and leveraging the right keywords and Compended blogs they will dramatically increase their organic traffic and more importatnly increase their engagement and conversion.   

I'll keep you posted, but be assured, this is a blogging best practice for printers or any type of business.

Josh Bernoff of Forrester, blog, Corporate blogging, trustHat's off to Josh Bernoff, Forrester Analyst and co-author of Groundswell for an insightful new report:  "Time To Rethink Your Corporate Blogging Ideas"

Obviously Josh grabs your attention that "Corporate blogs rank at the bottom fo the trust scale...."    Basically Josh points out that business blogs that act like commercials or PR vehicles are no more credible (actually less) than TV or PR...heck, more people said they trust the Yellow Pages which didn't make a lot of sense to me.

Josh is bravely telling business that blogging is a terrific media if used correctly.  Most of his advice comes right out of the Compendium Playbook:

"Blog about the customer's problem. Don't blog about your products; blog about something your customers care about. Rubbermaid blogs about getting organized, for example.  Emerson Process Experts blogs about factory automation.  If you can bring value to your customers around their problems, they'll remain interested in you. Blogging about your customers' problems makes it far more likely that bloggers in your space will link to your blog, which increases both traffic and search relevance."

The greatest marketing tactic in the history of mankind is the similar situation.   Nobody cares about you.  They care about solutions to problems.   Blogs give you the ability to tell stories (as Seth says) about customers who have had similar problems that have been solved by you.   Talk about problems and solutions in the real world.

When you think about blogging and search...people search on problems not on brands.   

Another terrific piece of advice from Josh:

"For B2B companies, get your employees in on the act. In companies that sell to other businesses, corporate communications typically sponsors the corporate blog.9 This is a mistake because product executives, product managers, and field marketing or sales support people better understand audience needs. When these staffers speak, B2B audiences recognize their expertise, trust their messages, and engage in the conversation. This is how dozens or hundreds of corporate-sanctioned bloggers at companies like HP, Microsoft, and Sun develop product connections with their particular customer groups."

Regular readers here know that this is the core of the Compendium value proposition.    I'm a huge fan of the Richard Edelman study that found "Employee bloggers to be 5 times more credible than C-level Bloggers."

I have to respectfully disagree with Josh Beroff on limiting this to B2B companies only.  We have lots of examples of retail and other B2C's.   I had a call yesterday with LL Bean discussing this very issue.   Why shouldn't buyers blog about how and why they pick certain products for the book.  Every time I see the J. Peterman skits on Sienfield I think what great blog content this would be to know the stories behind the products.   

Home Depot, Corporate Blogging, BlogsAlthough not a client, I talk about Home Depot a lot.  Who better to tell me stories about customer situations that might be similar to mine or educate me on the classes in my local store than the people who actually work in the store?  Home Depot has 2400 stores and nearly 250,000 employees.   There have to be at least several hundred that would be terrific (and trustworthy) bloggers.   These are real peole, they live in my community.  Their kids go to school with my kids, they support the same local causes I support...Let them Blog!

Anyway,  Josh Bernoff?  If you are out there listening.  Thank you.   Great wake up call for a lot of  Corporate Blogging Programs.

The Saturday edition of the Indianapolis Star ran an article about troubles with the Hoosier state's new website for reviewing scores for ISTEP, the state's standardized educational progress test.

It's rare that a website launches completely without a hitch, but if there are issues, it's better that they be small items rather than critical component failures.  Cases of the latter leave frustrated users with a bad impression and a reduced desire to visit again.  Quoting the article:
Tempted by the promise of seeing test results, breakdowns by type of question and images of their children's answers, many parents found that when they tried to create their required accounts, the system froze. They were unable to access anything.

"We were sitting at home wondering, 'Is it just us or is it everybody?' " said Stan Brown, a Noblesville parent who tried to access the system twice Thursday and again early Friday morning. "I think they didn't do a very good job with it. It's laughable."
The article is vague about the cause of the problem, but it suggests that the problem was localized to a subset of users:

State officials worked throughout Thursday and Friday with vendors to resolve the problem, which affected about 15 percent of the hundreds of thousands of parents whose children took the exams, said Jason Bearce, spokesman for the Indiana Department of Education.

The site works, he said, but the process to create an account sometimes doesn't.

"It's been up and running the entire time. It's just been that not everyone's been getting through."

My guess the problem resides in one of the following areas:

  • new user account creation code
  • existing user authentication code
The issuance and validation of user credentials both qualify as critical application components.  With a test score website, where sensitive personal data are stored, authentication makes sure that only those who are supposed to see the data actually see the data.

A bug in the new account creation module may result in bogus entries in the database.  These entries may cause the authentication code to fail when the user tries to log on later.  If the user authentication code has a bug, regardless of whether the user database has valid entries, access may be blocked for one or more legitimate users.

The old saying about a chain being as strong as its weakest link is true for web applications.  Apps are typically comprised of smaller modules that need to work together.  The modules have dependencies that link one another together, and if there is a module that is depended upon by many others, its failure can make the rest of the application unusable.

What are some of the ways we work to make sure that this doesn't happen to our application?
  • We write test programs that verify that our web service endpoints are functioning properly.  These tests are run after code changes to make sure any breakages are caught early.
  • We set aside a day before a release to review and test new features so that bugs are caught before being introduced into production.
  • Once code has been reviewed, tested, and cleared for release, a copy of the candidate is put on a staging server so that we can verify that critical parts of the application work under heavy loads.
We try to keep an eye on those critical links within our application so we don't run into problems like those described in the article above.


So because Willow is not allowed in the Compendium Offices any more (per Building Management) - I have decided to make her an honorary member of the Client Success Team! Furthermore, give her a title: Da Duh Duh DAAAAHH!!! Blogging Wonder Mutt.

And she is here to talk about one of our newest user interface tools: blogging content ideas. We know that it is sometimes difficult for the company blogger to come up with an idea for a blog post - but it doesn't have to be. Our easy blog software has become even easier to use -- by helping you with the actual content. 

The content ideas panel, located directly in the user interface, pulls in news articles that are relevant to your business blog and the keywords you are targeting.This is a really great starting point. Simply read the article and then blog about it. Give your reactions to the article. Blog about whether you agree or disagree. Do you have a product/service that will help combat the issue in the article? Just write about it!

Let your corporate blogging strategy become relevant when people are searching for the services your provide and the news.

Signing off,
Wonder Mutt

Erich Schonfeld has a post at Tech Crunch about how Facebook recently experienced a data loss that resulted in evaporation of its user's e-mail notification preferences.  He takes comfort in the fact that it was a loss that should provide only a minor, and short-lived, annoyance to users, but he also notes that had the preference been something that regarded privacy settings, the results could have been much worse.

As a developer, I have an idea of what might have happened in the data loss.  I wouldn't want to be the person who was responsible for the data loss.  It's good that we see these stories because it's a sobering reminder of the dangers of working with live data.

Almost every web-based application has to persist data.  Facebook stores profile information in addition to preferences.  E-mail services store messages and the preferences that govern the behavior of the application's user interface.  Content management applications (blogs included) store posts, comments, and page layout information.

Usually this data goes into a relational database management system (RDBMS) like MySQL, MS SQL Server, or Oracle.  But performance issues have led some to question the database design best practices that have been in use over the past two or three decades.  Others have one so far as to speculate that RDBMSes may be so ill suited to some data persistence uses that one should consider using something else.

Regardless, the data you submit to a web application gets poked into some means of persistence, and then later on it is read by the application for generating pages (like this blog post) or making a decision (like whether to notify an administrator immediately when a blog post has been submitted for approval).

The world is neither perfect nor static.  Sometimes a bug in an application can result in the creation of bogus database entries.  It's not enough to stop the application from doing that again, it's also important to determine if the damaged data can be repaired.  If the damage is on the order of hundreds or thousands of items, a script may need to be created to repair the damage.

Here is where things can get dangerous.  Repair scripts sometimes need to make destructive changes (i.e. SQL DELETE statements) to a table.  It is very important for the script's author to have an understanding not only of the table being modified but also any quirks in the semantics of column entries. 

For example, rows created early in the application's history may not have stored ID values for certain types of entries.  When these things are not taken into account, a repair script may inadvertently delete rows that may not be valid in current application usage but are still essential pieces of data.

When things like this happen it's not always obvious that something has gone wrong in the application.  For the most part things may work fine, but then all of the sudden people notice that information on certain pages is missing.

Times like this, it's nice to have a backup of the database from which to restore the lost data.  My guess is that the Facebook development team decided that the loss was not severe enough to perform the recovery.  On the other hand, if the decision was based on the lack of a recent backup to restore from, then shame on them.

Here at Compendium, we devoted a code review a couple months back to developing some standards and best practices for writing database repair and maintenance scripts.  This helped us to move from an ad hoc patchwork of scripting styles to a more consistent, reliable, and reusable body of code.  Some of the guidelines that emerged from those discussions:
  • Proposed database schema changes should be vetted by all members of the engineering team.  Once agreed upon, the system engineering team needs to be notified of these changes so that backup scripts can be adjusted.
  • Environment settings (e.g. production or development) should be specifiable from the script's command line arguments and then determined programmatically by the framework if not specified there.  There should be no hard coding of these values.
  • If there are model classes or data access objects that can be used to manipulate the data, the script should use these rather than using hand crafted SQL strings.
  • One-time use scripts should be named after the work item number that they were created for.  Multiple use scripts should be flexible to handle a wide number of use situations, named for the tasks they perform.
  • All repair and maintenance scripts should be placed under revision control.
These guidelines help us to ensure that when things need to be fixed or reconfigured, they are done with minimal risk to the data.

It was a little over a year ago that I interviewed for my current job here at Compendium.  It started out as a fluke.  I saw a short-lived job announcement that a recruiter had posted to a technical employment board, and the list of skills and technologies floored me... Agile development?  Amazon Web Services? LAMP stack?  Surely this was too good to be true!  It read more like a job posting for somewhere other than Indy, perhaps San Francisco or Seattle, but not here.  Indianapolis was the land of .NET and Java EE development within a staid corporate environment.

Although the announcement disappeared after a day or two, my interest did not.  I decided to use long tail search queries involving phrases from the job announcement to see if I could figure out what company might have been advertising the role.  A combination of references to Amazon Web Services and Indianapolis turned up a post on a personal blog maintained by Blake Matheny, who had hired on with Compendium a couple months before.  The post mentioned how he had recently moved to the area, was looking for new talent, and wanted to hear from people who might be interested. 

I had a good idea he might have something to do with the job announcement, so I e-mailed him using the contact address for the blog, telling him:
At first glance, my work experience might not be a perfect match, but I have a track record for adaptability and the ability to learn new things.  I also believe that the skills you're looking for constitute a career direction that I would like to pursue, especially with respect to web technology and agile software development.  I also happen to be local to Indianapolis.
That was the start of a conversation that would lead to two interviews and eventually a job offer.  As you might have guessed, I gladly accepted and have been here since.

Startups can be demanding.  I knew that coming into this role because I had worked at a startup the previous two years, a place that had big ideas but not enough resources and discipline to execute on them.  But I also knew that my unusual software development background, which involved small companies and lots of original development work, made me a good match for the kind of things startups do.  In sort, Compendium is the kind of place that I could thrive in... and I have done so.

Over the course of almost 11 months, I have worked with a large number of technologies... PHP, JavaScript, MySQL, Amazon SQS, Google Visualizations, the Yahoo User Interface library, XSLT, XML/HTML DOM, memcache, XML-RPC web services, RSS search feeds, just to name a few.  Early on in the job, I told Blake that this job seemed like a professional fountain of youth for me, and I still feel that way to this day.

Within our group there is a culture of professional development.  We do more than just write code.  We have regularly scheduled reading group meetings where we can talk about technologies that we could incorporate into future versions of our application.  We also have regular code reviews where we get a chance to improve our skills and codify our own set of guidelines and best practices.

So, on a day where we set aside time to express gratitude for the good things in our lives, I would have to say that this job is among them.  But it wouldn't stop there...

There are a lot of startups with neat ideas and fun technologies, but a lot of them don't survive.  Difficult economic times make the body count all the higher.  When I was considering Compendium for employment, I did some homework, recalling stories I had seen about Chris Baggott and Compendium over the course of 2007.  Chris' experience as an ExactTarget co-founder was a strong point because he had been successful in getting a startup off the ground. 

Moreover, having been a reader and author of blogs in the past, their message about the potential for corporate blogging made sense.  After all, it was through search that I had found Blake's blog.  The company has done well over the past year, with progress that would make most startups green with envy.  We've managed to do all of this in spite of the tumutuous economic condtions.  Whereas big names like Technorati and SixApart are cutting salaries and trimming budgets, we're looking for new people.

So I am also thankful that I work for a company that is as well run as it was well conceived.

Finally, I am thankful for my coworkers.  Within my own department, Blake has done a great job of putting together a technical team that works well together, even when things get stressful.  There is a shared sense of humor, perhaps a bit quirky at times (a paper DUNCE cap, a junk food laden trip to the State Fair, an inflatable sword have all been involved) that helps us keep our sanity.  We get a lot done, but we do so with a lot of laughs throughout the day.  The other departments are pretty cool, too.  As I learned on the company rafting trip in late July, even though I am a bit older than most of them, they still don't have any issues with me hanging with them. :-)

So, yeah, I do have a lot to be thankful for.

Recently, I was faced with solving the following problem as part of a larger programming task:
Given two flat arrays A and B, each of which contain strings as elements, write a function f(A, B) that returns true if an element in A also appears in B.  Otherwise, return false.
Fortunately, I was working in PHP, which has a very rich set of functions for working with arrays.  Here is what I wound up implementing:
function hasCommonElement($a, $b)
{
if ( !is_array($a) || !is_array($b) )
throw new BadFunctionCallException('Non-array value supplied as argument.');
/*
* Iterate over the shorter array. Convert longer array
* into associative array to get O(1) lookup.
*/
if ( count($a) < count($b) ) {
$iteration_array = $a;
$query_array = array_fill_keys($b, null);
}
else {
$iteration_array = $b;
$query_array = array_fill_keys($a, null);
}

foreach ($iteration_array as $query_key) {
if ( !is_string($query_key) )
throw new BadFunctionCallException('Array must contain only strings.');
if ( array_key_exists($query_key, $query_array) )
return true;
}

return false;
}
Here at Compendium, the engineering team has code review meetings every other week, usually focusing on a major feature that shipped in the past week's release.  The above function was part of the most recent review, and one of the team members asked me why I went to the trouble of implementing a function when I could have just used array_intersect() and gotten away with a lot less coding.

My response was that array_intersect()was designed to solve a more general problem and was much more expensive computationally.  In our case, we were interested only in the existence of the intersection, not the elements of the intersection themselves.  Once one element was found in common, the function could return rather than proceeding with the more exhaustive search-and-list operation.

Assuming that sets A and B were of similar size, say of length N, then the cost of finding all members of the intersection would be O(N2) in the worst case with array_intersect().

On the other hand, the function hasCommonElement() answers the question adequately in O(N) operations, and most of that is spent converting the larger set into an associative array so that we can enjoy the cheapness of doing O(1) lookups.

This idea of returning a result when there is enough information to answer the question to the level of detail is a manifestation of the principle of short-circuit evaluation, which is a common feature for evaluating logical statements in many programming languages.

Short circuit evaluation is frequently used to implement a fail-fast design philosophy.  Most people look upon fail-fast as a means of keeping the detection of adverse situations close to their origin, but that's not the only situation where you can use this idea to your advantage.

Situations where you are trying to filter select pieces of data from a larger stream, like monitoring a network interface for TCP packets corresponding to a higher-level protocol, are made for this kind of thinking because you want to minimize the amount of time you spend processing packets that are not of interest to you.  While we weren't doing anything as high performance as network traffic monitoring, this kind of thinking helped us to avoid a potential bottleneck.

Having faith in the people behind a business makes doing business with them much easier.  This is a great reason why blogs and business go together.  Blogs for business introduce your staff to the customer - they aren't hidden behind a fancy brochure never to be seen.  We're proud of our staff and you should be, too.

In meeting our employees and reading both their biographies and blogs, you'll learn how much talent we have and gain trust in our company.  Do you know who's writing your software?  You're making a major investment in us - we think you should.

Working with our fantastic (and tiny) marketing team, we recently launched our Blog page to introduce the remarkably talented team we have, as well as provide you a path to their blogs.

Meet Our Bloggers
The page was pretty fun to build.  Our web designer, Mikey, put together the layout fantastic flash slider to meet each of our bloggers.  You can click on each person and see their bio as well as get a link to their blog.

On the right hand side we used Magpie (a free PHP aggregator) to serve the latest blog posts.  I added a little more code to clean out any HTML tagging, properly space the descriptions, and shorten the excerpt. 

For the first time, I utilized jQuery for the expand and contract mechanism to preview the excerpt. Click on the small preview button to the right of each of the post titles, and you'll get an excerpt of the post.  I've tried jQuery in the past and felt like I was writing in some new programming language - but I'm changing my mind now.  It took 10 lines of code to add all the visual effects there!

Introduce your employees to your prospects and clients!

Vontoo, Compendium Blogware, Voice Messaging, Corporate Blogging SoftwareI was happy to see some great press today from my friend Dustin Sapp, managing partner for data-driven voice messaging software company Vontoo.   Dustin&Vontoo have a soft spot in my heart, because the were the first customer ever for Compendium Blogware.

More importantly, my respect for Dustin comes from his vision and courage in starting Vontoo in the first place.  A lot of times we talk about Entrepenurship in terms of creating a new market.   Perhaps the hardest thing to do is add reall innovation to something that everyone else thinks is old and tired.  

Vontoo is the worlds only data-driven voice messaging company.   The idea is to first get permission (never unsolicited calls) and then set messages up using real human voices.   The key is to trigger those messages at the right time to the right people.

For example, we use Vontoo to remind people of our Corporate Blogging Webinars.  Typically we get 500-700 registrants for our webinars (like this Thursday with Doug Karr and I reviewing 200 blog content ideas)  Usually we wind up with about 20% of those registering actually attending the webinars.   Several months we tested a pre-webinar voice message from Vontoo.  Our attendence grew by 50% vs. and email reminder.   Now we use Vontoo for all of our Webinars and are looking for other areas.   Compendium will be testing a follow up voice message from a whitepaper download and we are considering Vontoo for our collections dept.

Anyway, great press Dustin...well deserved.


 Richard H. Levey, of DIRECT, wrote a strong article on direct marketing to Millennials.  I thought it was a well researched peice that hit's home how different the game is when it comes to connecting with this viable group of consumers.

As great as Richard's article was, I found one of the comments on his article to be even more insightful, and if whoever posted this comment would be interested in talking, please reach out.  This was an excerpt from their post:

1) Yes, we'll approach you, but when I do, how are you going to compete for (and win) my 15 seconds of attention before I move on? This right now is a perfect example. I was researching new sites to tag and bookmark for DM information. I performed my google search (always, like many of "us" do, ignoring the sponsored links to the right), opened a new tab for each link I thought might have what I was looking for and, after opening about 10 or 12 tabs, I quickly went through each, scanned the homepage for article titles and headlines, determined if the site was relevant to my needs, and moved on to the next. If it wasn't, I closed it. If it was, I left the tab open and went on to the next. Of those 10 or 12 sites that made the first cut (from the search results), only three remained. I went back, performed a more detailed review and decided to bookmark 2 of the 3 - this being one of them.

The identity of the post author was not revealed, but the message is viable.  Gen Y'ers are not going to wait around for you, or adapt to a model that is easily trackable.

By adopting a Blogging for SEO mindset, you can reach people that mere $ will not reach, and on a medium that they use relentlessly.

Below is one quick blogging techniques that can really add a little spice to your blog posts! Videos are a creative way to get your message out and grab your readers attention!!

Follow these 6 steps and you'll be on you way to a writing a better business blog!

1. Obtain the embed code from the video hosting group
Step 1 to embedding a video in your blog post
2. Begin to create your post as you normally would. Once your ready to add the video click on “Edit HTML Code”. This button looks like <>.
Step 2 in embedding a video in your blog post
3. HTML formatting will appear in the body of the post.

4. Paste the embed code of the video you choose at the bottom of all of the text listed in the body of the post.

5. Click back off of “Edit HTML Code” and the body of the post in the text editor will look the same as it did before you added the video.

6. The video will not appear in the text editor. You much chose “Preview Post” to see the video.
Step 3 in embedding a video in blog post

If you have any questions send a quick email to help@compendiumblogware.com.

Coding Horror author Jeff Atwood created a great post a few days ago about the link between writing and coding. He starts off by citing a blog post by Coding the Wheel author James Devlin, which draws programming lessons from Strunk and White's classic micrograph on writing, The Elements of Style.

The centerpiece of Atwood's post is this passage:
Writing programs that the computer can understand is challenging, to be sure. That's why so few people, in the big scheme of things, become competent programmers. But writing paragraphs and sentences that your fellow humans can understand -- well, that's even more difficult. The longer you write programs and the older you get, eventually you come to realize that in order to truly succeed, you have to write programs that can be understood by both the computer and your fellow programmers.

Of all the cruel tricks in software engineering, this has to be the cruelest. Most of us entered this field because the machines are so much more logical than people. And yet, even when you're writing code explicitly intended for the machine, you're still writing. For other people. Fallible, flawed, distracted human beings just like you. And that's the truly difficult part.

I concur with Atwood and Devlin that there is a strong link between coding and writing.

I did my undergraduate study at Rose-Hulman which specializes in science and engineering, and although it does not offer degrees in the humanities, the leadership at the school strongly encouraged a respect for language, literature, and the arts. Indeed the president of the school at the time, Sam Hulbert, exhorted the student body to be "Renaissance Men" (it was an all-male school at the time :-) ). I took this advice to heart, working hard to hone my skills as a writer.

I had two additional influences during my years as a student. As a junior and senior in college, I took classes taught by Prof. Stuart Leipziger, who whose eloquence as a lecturer was profound. I don't think my understanding of heat transfer and thermodynamics would have been as enriched without his ability to illustrate and enlighten.

In graduate school, I had the good fortune to take a class by the late Prof. J.J. Carberry, who was not only a distinguished scholar in the field of reaction engineering, but also a very gifted writer. His textbook, Chemical and Catalytic Reaction Engineering, uses a writing style seen rarely in the field, rich in its choice of adjectives and elegant in its flow.

These experiences shaped my outlook towards communication, helping me to realize how much of a difference could be made by channeling energy in that direction. By thinking through the process of expression, the weak points of a position could be identified, thereby giving guidance on how to refine the ideas that comprised them.

Back in the mid-90s, when I was trying to make a transition from FORTRAN to C programming, I picked up a cheap book titled C Programming Proverbs and Quick Reference. The author, Ron Wodaski, put lots of emphasis on being a conscientious programmer, someone who was not only coding to solve the problem of the moment, but also solutions that could be reused and maintained by others.

Early on in the book, Wodaski borrows the notion of a "Reader Over Your Shoulder" from the book by that name, written by Robert Graves and Alan Hodges, to instill a sense of self awareness about one's own code.

Calling this awareness the "Programmer Over Your Shoulder" (or POYS, for short), Wodaski pictured him or her as being an intelligent, friendly, yet uncompromising software developer who sits with you as you write code. He even goes so far as to give the metaphorical awareness a name. He called his POYS "Clarence".

One of the goals of having the POYS was to catch yourself when you were about to cut corners on coding. While it is hard to see your own mistakes as you write code, it isn't hard to feel it in your gut when you're about to do something half baked. Maybe it's deciding not to write some comments about some code that's less than obvious, lying to yourself that you'll get back to it later, or perhaps it's deciding that throwing in sanity checks to protect against an error condition would be just too much trouble, given the deadlines that must be met.

The POYS fusses about the things you'd rather ignore, but you know deep down that you shouldn't. It can take some self discipline and brutal honesty to develop a helpful POYS. I believe that Wodaski's writings, published in 1992, presaged the onset of pair programming, which attempts to do code review in real-time. Instead of trusting yourself, you get a real-life POYS to help keep you honest.

At the heart of Atwood's paradox is the central truth that meaningful computation seldom occurs in a vacuum. Time, talent, and treasure are devoted to programming because it is believed that computer applications can satisfy a human goal, be that to inform, to engage in commerce, to facilitate logistics, to forecast future conditions, or even to provide amusement.

These applications operate within the context of an imperfect world. Network hardware fails, people overdraw their bank accounts, bad weather strikes, models get created with faulty assumptions, and people try to circumvent security infrastructure. Useful code has to take into account these and many other edge cases. The firm logic of a programming language must be molded around this imperfect surface of reality.

Careful communication helps mitigate the turbulence of confusion. Agreeing on precise use of terminology helps avoid misunderstanding between product owner and development team. Regular status meetings with meaningful commitments and accountability help keep things on pace. Well documented specifications help developers blaze the trail, and accurate comments help the maintenance programmer follow along. Relevant documentation helps the end user assault the learning curve.

The gift of expressiveness both in code and prose makes a software engineer more valuable because he or she must bridge the worlds of the flawed but forgiving human and the logically rigid, unforgiving, yet incredibly stupid machine.


A good reason to blog for your business is to boost your company's reputation.  Search engines find your content, and search engine users find you.  If your content is compelling, a relationship may be established.  Your blog is a chance to make a first impression with a potential customer.

Amid all the buzz of blogs and business, something usually gets short shrift -- application security.  The multinational law firm Pinsent Masons maintains an IT and e-commerce issues blog called OUT-LAW.COM, and a recent post takes up this issue.

Citing some statistics and advice from a white paper by computer security system vendor Network Box (free registration required), the post gives some ideas on the scope of the issue and recommendations on what a blogger can do to mitigate the risks, which include potential damage to your company's reputation.

The white paper identifies comment spam and SQL injection as the top threats to a blogging environment. 

Comment spam is one of the ways that malicious third parties can abuse the visitor content creation features to your detriment.  This was one of the forms of "virtual blight" that Google spam fighter Matt Cutts discussed in his talk from this past Wednesday.

Compendium addresses from several angles:
  • Comment forms require a name and a syntactically valid e-mail address. The comment will be rejected if these form elements are not provided.
  • A CAPTCHA must be successfully completed, otherwise the comment will be rejected.
  • The text of the comment is stripped of all HTML tags.
  • URLs are converted to hyperlinks with the the rel="nofollow" attribute to prevent spammers from feeding off of your search engine reputation.
  • Comments must be reviewed and approved by the company's local blog administrator before going live.  There is no way for the spammer to bypass this.
SQL injection attacks are an ulcer point for all web application developers who have to interact with a database.  This is where a malicious party determines, through either good guesses or trial-and-error, how to create inputs to the application that allow the execution of database commands that he or she shouldn't be running.

Cautious parameter validation on the server side provides a first line of defense.  The next line is using care in how query strings are formed.   Consideration of these points is an integral part of our development process, not an afterthought.  Moreover, they are backed up with regular code reviews and continuous refinement of our coding standards.

Unfortunately, bugs are a tough thing to completely eliminate in the real world, so vendors typically have to issue security updates.  The Network Box white paper recommends that corporate blog applications be updated when new releases come out.

Here is where relying on sotware as a service, like Compendium Blogware, has a distinct advantage.  Instead of tracking when a vendor updates and then going through the process of rolling out the new version to production, the hosted application provider takes care of the updates for you.  Here at Compendium, releases are usually pushed out on a weekly basis, so when isues are found, it won't be long before a fix is on the way.

When you base your corporate blogging platform on Compendium Blogware, many of the issues of maintaining a secure blogging environment will be taken out of your "worries" tray.  Isn't that a price worth paying?

When I first started blogging (which was like a month ago), I had no idea How to blog. It was a difficult concept for me to grasp because I was trying to think about it way too much. So what I did was read some blogs that some of my co-workers here at Compendium had posted and it was one of those "Ah-ha" moments my high school English teacher used to talk about.

For anyone starting out blogging, one thing that you have to remember is don't think about it too much. It doesn't matter if it "Proper Speech" because when I think of a blog, I think of a public diary or journal about experiences. You don't even have to make up an outline about what you want to blog about, like you might when writing a large paper or proposal. Just pick a topic... then start typing. Very simple. (but when you are done, make sure you read through you blog post and correct any sentences that might not make sense... because it happens sometimes) A blog shouldn't be to thought out because then you are working too hard on it. Just open your mind and let your fingers go.

In my opinion, I think that blogging is similar to that of a diary (yet it is visible by others). You can simply climb online and blog about anything you wish. Blogging gives the opportunity to people to talk about their experiences and it allows people to read about it. After I started working at Compendium, I realized what kind of world there is out there for blogging. I realized that you if you are looking for "inside" information other than reviews (which sometimes you can't really believe), you can look for a blog about it and read up on the first hand experience of an individual who had already done it. For instance, if you are looking for some independent restaurants in downtown Indianapolis, you can look on the Indy Restaurants blog, where people post about the highlights of places in Indy.

Many of our customers and prospects are PPC (Pay Per Click) geniuses.  PPC is a fairly simple approach to 'buying' traffic to your site.  PPC also has the added simplicity of generating fantastic toolsets to gauge the competitiveness and cost of keywords and key phrases you're trying to obtain.

We pay a lot of attention to PPC at Compendium because its a great indicator for our clients when we review their compended blogs and what keywords and phrases they are after.  However, there are some very important differences between Pay Per Click and Blogging.
  • PPC ads have a very short title and description as opposed to a blog.  A blog offers both can leverage a full post title and lengthy description so a blogger can write incredibly compelling content that a searcher can decide on.
  • PPC ads obtain 5% of a Search Engine Results Page (SERP) where as Organic Search results obtain 95% of the click throughs.
    SERP Click Tracking
  • Blogs are seen as trusted resources for conscientous purchasers online.  So not only do more people click-through, they're more likely to purchase after reading a blog rather than a web site.
  • A PPC advertisement is a one-time event that you have to actively pay for for the duration of the campaign.  A blog post is there for as long as your blog is alive and well - always ready to be a relevant response to a visitor's request.
  • PPC  ads don't 'combine' to build trust nor authority with Search Engines.  Blogs do!  The more content you post, the smarter you're making the search engine on how your website is relevant to searchers.
  • PPC  ads are only an acquisition tool, to get people to your site.  Blogs are both an acquisition and a retention tool to obtain new clients and continue to maintain a relationship with them after they are on board.
  • PPC can only be won by spending more money than the next person.  Blogs can win organic search simply by being more relevant.  The popularity of a blog through trackbacks, number of blog posts, and the richness of the content can drive your result to the top of the Search Engines.
Does this mean that you should dump PPC for Blogging?  Absolutely not, PPC advertising can be very cost effective.  If you find value in PPC advertising, though, then you would be remiss if you weren't looking at using Compendium as well!

One of the most frequent questions I receive is, "What exactly is an RSS Feed?" 

I have spent much time with clients review how RSS feeds can help them blog and what exactly an RSS feed is.  But, I recently stumbled on a video on YouTube that very clearly explains this to anyone, even the most basic internet users.



So now that you have seen the video, why are RSS feeds important to blogging?
  1. RSS Feeds help writers generate content ideas by knowing what is going on it their industry at any moment
  2. Allows readers to receive frequent updates on content that is posted on any specific blog


What happens when two Compendium employees share the love of Saturday Night Live Digital Shorts and blogging?  You get am amazing video about blog best practices.  Well, maybe this is not an "amazing" video, but it is pretty entertaining. 

If you have not seen the SNL digital short of "Lazy Sunday", we suggest taking a peak at it before viewing ours.  It gives you a better understanding of the motivation behind this masterpiece.  Click here to view the SNL version.

We hope you enjoy the video!