Access whitepaper

The Web as a Mirror

Thursday, March 12, 2009 by Aaron Stanton
Sometimes I run into people online who are very rude.  They seem to think that this is excusable because they are "not really like that in real life".  While I understand that behavior changes according to the context, I don't think it's a good idea to misrepresent yourself.  The situation may change, and behavior might adjust, but you should always be yourself.

When you're out doing some business networking and meeting people for the first time, you generally know how to act.  What to say, what kinds of jokes it's ok to tell and what are not, and you can do all that and still be yourself.  Perhaps you are different in a room full of people you know well, and perhaps not.

When you're blogging, you want to humanize your marketing, but at the same time, remember that you are representing your company.  I have a personal blog that I use when I want to say things that I might not say at work - not that there's anything there that I am ashamed of, but it just doesn't fit in a work environment.  Some things I might talk about in both places - software, for example - but if I'm having a bad day, it's not going to show up here.

In both places, I'm myself.  My online presence reflects how I am in person.  If I say something rude online, I'd probably say the same thing if I were in a parallel situation in person.  In a professional environment - here or face to face - I'm pretty much the same.

I believe that this sort of authentic presence is key to having people trust you.  It's certainly worth doing.

Unifying Authentication with freeRADIUS - Part I

Wednesday, March 4, 2009 by Dereck Martin
How does one unify authentication for various technologies across a mixed operating system environment and deploy it transparently to users? 

Well, I have decided to use freeRADIUS as the entry point for our roaming wireless and vpn authentication.  freeRADIUS then passes the credentials on to Active Directory for authentication.  In this part, I will be focusing on getting the box authenticating against Active Directory and the installation of freeRADIUS.

In order for this to work, a Linux box needs to be setup with samba and winbind to work nicely with Active Directory.  If you are experienced with this setup, it can be done in as little as 30 minutes.

I have a basic configuration file for samba that should work with a Windows 2003 Active Directory domain for nearly anyone.

 [global]
security = ads
netbios name = server01
server string = server01
workgroup = DOMAIN
realm = DOMAIN.COM # ip of active directory server
password server = x.x.x.x

idmap uid = 10000-29999
idmap gid = 10000-29999

winbind separator = +
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
# You will need to create /home/DOMAIN if you plan to allow # user to log-in, and setup pam.d stuff
template homedir = /home/%D/%U
template shell = /bin/bash
client use spnego = yes
domain master = no
# ip of wins server
wins server = x.x.x.x
encrypt passwords = yes
server signing = auto
name resolve order = wins host bcast

There is also a krb5.conf file that needs to be edited as well.
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = DOMAIN.COM
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
forwardable = yes

[realms]
DOMAIN.COM = {
kdc = x.x.x.x:88
}

[domain_realm]
.dnsdomain.DOMAIN.COM = DOMAIN.COM
DOMAIN.COM = DOMAIN.COM

[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
You will also need to setup /etc/nsswitch.conf as well.

passwd: files winbind
shadow: files winbind
group: files winbind
protocols: files winbind
services: files winbind
netgroup: files winbind
automount: files winbind
After these three files are setup and tuned to your environment, then start the samba service with /etc/init.d/smb start

HINT: make sure time is synced within 5mins of the Active Directory server or things tend to break. 

The only thing left to do is join the box to the domain.  The command below should be sufficient to do this.  You will need to make sure this machine has a static ip address, and it should have a A record and ptr record in DNS for the hostname of the box.  If not, Active Directory may complain about it with a cryptic error message.

#~> net join -U Administrator

Once that is complete and there are no errors, start winbind.  On some Linux distributions the winbind init script is apart of the samba init script (like Gentoo).
 
#~> /etc/init.d/winbind
 
You should be able to do a wbinfo and get something like below:

#~> wbinfo -a username%password
plaintext password authentication succeeded
challenge/response password authentication succeeded


After this is working, then its time to install freeRADIUS.  I would heavily recommend installing from your distribution's package management system.  This is a common application, and should be available for the big distributions.

There is one thing that will need to be done in order to get freeRADIUS to work nicely with winbind.  If this is not done, then radius will not work right.

#~> cd /var/cache/samba/winbindd_privileged/
#~> setfacl -m u:radiusd:rx winbindd_privileged


Note: on some distributions,  "acl" needs to be added to /etc/fstab.  ACL options for the file system type need to be included in the kernel configuration.  On systems like CentOS and OpenSuSE this shouldn't be a problem. 

In the next part coming soon.  I will discuss how to configure radius for EAP/PEAP authentication for wireless networks. 

Finding what you are seaching for

Tuesday, March 3, 2009 by Brett Fritz
There is a great service where you can call or text a random question to this number and the service provider will give you the answer you are looking for!

If everyone had compendium, the answers your potential customers are looking for would be at their fingertips!  Using Compendium's simple blogging software will not only humanize your marketing strategies but it will also provide you with results! 

Compendium is a SaaS that is build specifically for businesses to win organic search. 


We at Compendium make search easy again!

Taking the Headache out of Blogging

Monday, February 23, 2009 by Douglas Karr
Blogging HeadacheThis morning I had coffee with Chris Baggott and it was a great discussion of the marketing technology landscape.  For online marketers, technology used to be (and still sometimes is) a huge hurdle to overcome.  Every marketer needed a technology guy in his back pocket to make things work.

Some companies succombed to the technology hurdle by moving online marketing into their technology group rather than keeping it within marketing.  No offense to my tech guys, but rendering HTML is not marketing - there's a true art and sophistication to marketing. 

Multiple touch points, consistent branding and messaging, compelling content... and a long-term strategy to lead visitors into an engagement with your company are all key.  They all deal with communication and motivation, not technology.

That meant that technology wasn't always an enabler - it was actually a speed bump that every marketer had to overcome.  Marketers needed to learn about search engine optimization, landing page strategies and usability, integration, API technology, security, privacy, etc., etc.

Luckily for marketers, tools have been invented to overcome those speed bumps.  Chris reminded me of ExactTarget's roots.  The naysayers when ExactTarget started spoke about the cost of the service and that anyone could go start a Listserv, add a bunch of plugins and get the same service. 

That meant that marketers had to learn or work with technology experts to enable email marketing.  A speedbump.

What ExactTarget did was overcome the technology speedbump and provide an email marketing service that the marketer could use out of the box. That's why, in this recession, ExactTarget continues to grow rapidly and successfully.  They enable marketers to leverage the technology without needing to manage it.

This is what I was referring to when I wrote about getting out of the SEO weeds.  We want our clients executing marketing strategies, not worrying about whether or not their comment plugin is working correctly, whether their host can handle the traffic, what SEO plugins they have installed and whether or not they work, how SEO algorithms are changing, whether or not to use meta, alt, title tags, etc.

Compendium Blogware is a SaaS platform that enables marketers to leverage blogging and all of its advantages (human touch, engagement, marketing, search engine optimization, RSS integration) but without the headaches of technology.

HTML Attributes in Unexpected Places

Sunday, February 22, 2009 by PJ Hinton

Introductory discussions on good web user interface development drive home the importance of separating content (HTML), presentation (CSS), and behavior (JavaScript). The most powerful, and usually the slowest, way to interact programmatically with an HTML document on a web browser is to use the Document Object Model (DOM) API.

The principal references for DOM are the W3C standards, but the road to cross browser compatibility is fraught with pitfalls. Consider a document element. Elements can have attributes, which are expressed syntactically in the tags like this like so

    <element_name attribute_name="attribute_value">

In the DOM, elements are represented using DOMNode objects, and they are distinguished from other varieties of nodes by the nodeType property, which is set to the constant ELEMENT_NODE (defined to be 1). One can access, modify, and remove node attributes by calling setAttribute(), getAttribute(), and removeAttribute() respectively.

The collection of all attributes associated with an element is available via the node's attributes property. It is exposed as a NamedNodeMap object, which allows the manipulation of attributes by name (the *NamedItem() methods) or by index (item()).

Given this information, the API sounds fairly straightforward. You can deal with attributes individually by name or as a set that you can iterate over. However, this isn't the only way that attributes can be modified under Internet Explorer.

In IE, an element's attributes are also exposed as properties on the object corresponding to the element node. Save for a few exceptions, like className for class, the property names line up with the attribute names.

What may be surprising is that the converse is true. If you add a property to an HTML element object, Internet Explorer will count that property among the list of attributes, regardless of whether the property corresponds to a valid HTML attribute. To verify this is the case, try this out... In an HTML element, create an element with an ID attribute for reference via the DOM.

<div id="target_element">
    This text is contained by the DIV with id = "target_element".
</div>

Now, within a JavaScript function, use the DOM to get the node corresponding to this element and set a property on the element that does not correspond to a real HTML attribute:

    var target_element = 
      document.getElementById("target_element");
    target_element.fake_attribute = "foo";

Then iterate over the attributes NamedNodeMap for the element, checking to see whether such an attribute exists. In the code below, we check for an attribute name match and then generates an alert dialog informing the user whether that attribute's specified property is set to true or false.

   var attributes_node_map = target_element.attributes;
   for (var i = 0; i < attributes_node_map.length; ++i) {
        if (attributes_node_map.item(i).name == "fake_attribute") {
            alert("Is attribute fake_attribute specified? " + 
                attributes_node_map.item(i).specified
            )
        };
    }

On Firefox, no dialog will be produced because the bogus property does not count as an attribute on the element. With Internet Explorer, the dialog will show up.

This difference came into play for us recently as we were debugging a piece of third-party JavaScript code.  The source poked properties in HTML element objects for internal tracing purposes.  The properties did not correspond to valid attributes, but IE would report them as such via the attributes property.  Another portion of the code, which based its decision on whether there were no attributes set, would malfunction on IE because the attribute counts would be non zero.

Some additional notes on the dysfunctionality of attribute manipulation can be found at the QuirksMode website.

What's a Thesaurus Got to Do with Search?

Friday, February 20, 2009 by PJ Hinton
That question was addressed, albeit briefly, in a recent blog post by Ina Fried over at CNet's Beyond Binary blog.

The post talks about an emerging thesaurus technology being plugged at TechFest, an internal event at Microsoft where project teams at Microsoft Research pitch their efforts to product development teams.  Think of it as the way research migrates to reality in Redmond.

The Next Generation Writing Assistance team is behind the effort, and it employs a novel approach to compute synonyms for words.  Turning to foreign language translation tables, the project's algorithms try to derive synonymous relationships between words if a word in another language translates to two different words.  There is also support for phrase synonymy.

The post acknowledges the foreseeable use of the technology in productivity applications like Microsoft Word, and then Fried goes on to note the other potential use.  Quoting from the article:

But the technology could also help Microsoft in another key area: search.

That's because while search engines are good at finding things like names, that have just one form, they have a harder time finding expressions that can be phrased in multiple ways.

That's less of an issue when searching across the whole Web. For example, searching "Who shot Abraham Lincoln?" "Who killed Abraham Lincoln" and "Who assassinated Abraham Lincoln" all direct you to a page with John Wilkes Booth.

However, when it comes to searching smaller universes, such as a company's intranet, that might not be the case.

A similar issue arises when targeting long tail search phrases for corporate blogging.  You might identify your product as a "widget that can do X", but your customer may be submitting search engines phrases to the effect of  a "whatchamacallit that does Y". 

It's a simple fact of life: not everyone uses the same terminology when describing what they are looking for, and that makes naive string matching a bad matchmaker.

I could see where technology like this, if it reaches maturity, might be a way to enhance the textual analysis of blog posts.  Our compending algorithm takes some degree of synonymy into account.  But it sounds like it will be a while before they'll have something ready for prime time, though.

The Trials and Tribulations of WYSIWYG Editors

Thursday, February 19, 2009 by PJ Hinton
UPDATE: Based on Doug's comments below, I revised this post on 2/20/2008 to clarify what functionality is provided by the editing features supported by the major browsers.

If you write content for the web, chances are you use a rich text editor for writing your material. 

The rich in the name refers to the ability to apply styling to the content via mouse click operations.  For example, to make the text bold, you click on a toolbar button, usually with the letter "B".  To anchor a hyperlink to some text, you click on another toolbar button that interactively asks where the link should point to.  You get the general idea.

HTML 4.01, as spelled out in the W3C specs, doesn't give you this functionality for free.  All it supplies are INPUT and TEXTAREA form elements, and these are just vessels for containing plain text.  So how do web based rich text editors work their magic?

The two major browser architectures, Microsoft's Internet Explorer and Mozilla's Firefox, provide an infrastructure for interactively editing elements. Through the use of JavaScript or HTML attributes, web page content can be made to be editable.  This includes structural elements like divs, not just the standard form elements.  Moreover, the technologies gives web developers a handle for executing edit commands against HTML, so you can do things like insert hyperlinks and images.

Editability allows developers of rich text editors, like the YUI Editor and FCKEditor, a way to layer JavaScript on top of this foundation to create a customizable toolkit.  Web application developers, like Compendium, can then customize these editors to support additional features, like draft submission and keyword strength calculation.

As powerful as these toolkits and the browser APIs might be, there are times where you can run into glitches.  I uncovered one such case recently while troubleshooting some problems that users were encountering with Internet Explorer. 

Suppose you have an editable HTML document, that contains an image (something with an img tag).  With IE, you can click on the image and get some resize handles, like this:

example of image resize handles on IE
As you can see, there are little squares on the perimeter of the image's edges.  Grabbing and dragging these edges allow you to adjust the size of the image interactively.  The resizing is handled entirely within the guts of the browser.  It's outside the scope of the JavaScript world.

Now consider what happens when you are working with a large post where you can start to scroll the image outside the region of the editor.  A well behaved user interface would ensure that the resize handles are not drawn outside of the  the editing area.

I wound up noticing that with Internet Explorer 7, the image resize squares continue to exist outside the editor area.  Moreover, the area belonging to the image's rectangle will prevent user interface elements from getting click events.

demonstration of resize handles outside viewportAs you can see with the image on the right, the resize handles are drawn on the top row of toolbar elements. 

In this state, I coldn't click any of the buttons that fell within the image's rectangle.  Want to click on the insert hyperlink button? Sorry, you'll have to scroll the content so that the rectangle is out of the way.

We were able to reproduce this problem also using the demo of FCKEditor, the editor toolkit upon which our editor is based.

It turns out that this is a problem with Internet explorer.  In the fall of last year, someone reported this anomalous behavior exists in IE version 6 through 8 beta 2.  If that is the case, then it looks like might plague users for some time to come.

Since the issue is in the native code that provides in-place editing for HTML elements, there is little, if anything that web developers can do to work around the issue.

Good SEO Advice and an Application Therereof

Friday, February 13, 2009 by PJ Hinton
When it comes to claims of effective SEO techniques, I'm a skeptics skeptic.  In my line of work, I read and hear a lot of claims about what works. 

Most of the reliable advice is just plain common sense.  There's also a pool of good advice that probably makes sense only to those who work extensively with HTML and algorithms.

On the other side of the quality spectrum you'll find advice that falls into two bins:
  1. shady advice that attempts to game the system.  It might work for a while, but once the search engines adjust, rankings will plummet.  Black hat SEO professionals make their living dishing out this dreck.
  2. harmless, ineffective advice that buys you little or no benefits.  This class of advice is usually rooted in empirical evidence that has been poorly analyzed and then passed around by word of mouth.
Last week Chris Boggs wrote a great post over at SearchEngineWatch.com that reminds the user that SEO advice requires critical thinking skills

Would you make a life or death decision about caring for a sick infant based solely on blog advice, or even WebMD? Would you decide on a retirement strategy by reading a few blog posts or a forum discussion? Probably not. Yet, some marketers choose to base their SEO or paid search strategies on blog posts.

A person without any SEM experience shouldn't trust any single online authority as guidance. Misinformation and outdated tactical guidance seems to be floating up, along with the reliability of many so-called "SEO tools."
 
He goes on to write:

Design and development teams are usually great at sniffing out immediate problems with tactics, but also sometimes need to be reasoned with in order to test a theory or new SEO-friendly workaround. I've received plenty of blog post links from developers and designers in the past, claiming something can't be done or doesn't work. It's crucial to reach an agreement by either finding evidence or testing that the tactic can work.

He's right.  If you're going to come at our team with a request to change something about a page for SEO benefits, you better have some hard data with good analysis to go with it.  The whole post is worth a read and your time.

I thought of this post as I read a listing of tips on image SEO written by Patricio Robles.  I found myself disagreeing with some of Robles' arguments.

Take the "descriptive name for an image" advice.  Providing descriptive label helps, but I would speculate that search engines don't give images nearly the level of weighting that Robles claims.  Unlike text, which can be processed and characterized by an algorithm, images can't be dumped into a machine and then identified.  The means that a someone seeking to game the system could give irrelevant images names of keywords they are trying to target.

I don't buy the "larger images" advantage, either, which the author admits there is no hard data to back up the claim.  If anything, larger images will slow down the rate at which pages load, making your visitors bounce very quickly.  When we shipped a new editor interface a month or so ago, we even added new functionality that resizes images automatically if they exceed a threshold size that would exceed the typical width of a column.  This was to counteract something that Randy, our UI Engineer, refers to as dumbnails -- large size graphics that are displayed at sized much smaller via inline styling on the image tag.

The advice to those who are trying to optimize their website?  Beware and be wise!

Keys To A Great Call To Action

Friday, February 13, 2009 by Compendium Client Marketing
What are the four keys to a great Call To Action (CTA)?


Purpose: Give a reason to follow through with the action that your requesting them to take

Benefit: Remember that a reader is always asking "what's in it for me" - so make it clear

Command: Tell me what to do - click, download, register, etc

Click: Give a visual or text something that shouts CLICK HERE


Remember these 4 keys when creating CTA's for your corporate blog.

Writing Post Content

Tuesday, February 10, 2009 by Sarah Sedberry
Compendium Blogware is a Software as a Service (SaaS) company, meaning that you can login into our platform from anywhere as long as you have a connection to the internet.  However, there are times where logging into the internet are not an option, but you have a great post idea and want to write it down.   Such as right now, where I am waiting for a meeting with a client in Panera and my computer is revolting against me, not allowing me access to their supposed free Wi-Fi....

So what is a blogger to do?  Here are a few tips for writing a post when logging into our text editor is not an option.

1) Find a suitable program to write your post in, we always recomend Notepad or a similar program that does not apply extra formatting. 

2) If you do choose another program, such as Microsoft Word, we highly recommend that you throw your text into Notepad before pasting it into our platform.  There is a very specific reason why we recommend this, Microsoft Word (or most any program) will copy extra formating into the posting area, that is unnessecary and can "break" your template due to all of the extra code.  There are a few easy ways to notice if this is whats happening - the font of your post is different from all the others, or you will notice your sidebar is now missing, and showing up at the bottom of the screen.

3) Once you have pasted your content in from Notepad, simply click "Sumbit" and you are all set!



P.S.  A very big thank you to the representative at Panera's WiFi Support line that finally helped me get connected.  I'm lost without my internet....


How Your Readers Are Consuming Your Blog Post...

Friday, February 6, 2009 by Sarah Sedberry
Recently our VP of Sales, Brian McKay wrote a post that contained the below comic strip and it is the PERFECT way to explain how searchers and readers on the web consume information. 


Most clients I talk to explain that they will spend a lot of their time trying to write a blog post that they pour themselves into, that is "perfect", "world changing", etc, when the reality is you will lose your readers writing this way.  It is much better to write 5 short blog posts than to write one long post. 

I'm sure you can relate that when you come across a page on the web that is mostly text, you typically do not stay and read it all.  You might speed read it, skip through and pick out the good parts, or just move on in general. 

I have shared this comic with several of my clients to help explain why we always encourage the following when writing a blog post:
  • Keep it simple
  • Be pithy
  • Write like you are sending an email to a friend
  • Make it engaging for your readers by adding pictures and links

Most of all - have fun with it, and don't be scared to let your personality show in your company blog.  Customers engage with those that are like them, or can share an experience like theirs.  So let them see that you are able to do that!




HTML as Code?

Thursday, February 5, 2009 by PJ Hinton
I don't always agree with Jeff Atwood, but he does make me think.  Over at Coding Horror, he uses a reader comment as a starting point for a discussion on the question of whether code should generate HTML.

One of the mantras of professional web development is:

Separate content from presentation.

In layman's terms that means information about what to display and how you display it are kept in separate bins. 

Why all the fuss?  By doing this, you gain a lot of flexibility in operation of your website.  Consider our blogging software.  We host the blogs of hundreds of customers.  Each customer has several bloggers, with (hopefully) boatloads of posts.  Each customer has distinctive branding which needs to be emulated by the blog.

Posts are content.  The layout, graphics, and widgets of the blog are related to presentation.  If we didn't separate these things, chances are customers would lose the ability to specify what they want on the page.

As Atwood notes in his post, this separation is typically achieved through a template language.  Templates frequently look like HTML plus some additional stuff that specifies that something goes here and there.  If you've ever used mail merge in a word processor document, you've seen this paradigm in action before.

That other stuff usually looks like special tags or programming notation.  For our application pages, the pages that are seen by content authors and blog administrators, we use the Smarty template engine.  It's based on PHP, and our web application framework has good integration with it.

Atwood argues that for simple page compositions, templating engines are good enough, but things get hairy when you have to do things like repeatedly perform an operation over a list of things.  To demonstrate his point, he uses a snippet of ASP.NET code that uses both looping and conditionals.   It's not pretty.

In Atwood's opinion, the problem is resolved by writing generator functions which return blocks of expanded HTML.  He cites Visual Basic XML Literals and X# as ways to achieve this.

I don't know if I find Atwood's argument to be persuasive.  I think his problem is that he isn't working with a sufficiently powerful templating language.  In this context, "powerful" means that you have the tools to do nontrivial things with concise, yet readable syntax. 

Smarty, for example, supports looping and conditionals, so you don't have to fall back on the clutter of a full blown programming language.  You can also write plug-in modules that will perform specialized generation operations.

An even more powerful concept, which is supported in our web application framework, is the notion of slots and layers.  This allows you to break a complicated page layout into subtemplates that are then combined at render time.  They may also require the calling of additional page rendering operations behind the scenes.

When JavaScript is allowed to be part of the solution, you can introduce a whole other world of opportunities. Tabular and conditional situations can be handled via user interface libraries and AJAX calls to web service endpoints. 

We make extensive use of such techniques on our content creation and administration pages.  For example, let's say an administrator wants to see a listing of users who are associated with a customer account.  The request is handled through a web service endpoint and then displayed using a data table widget supplied by the Yahoo user interface library.  Logic can be either offloaded to the web service by specifying parameters to the API call, or it can be dealt with by the administrator's web browser via JavaScript code.

The display of blog pages is handled by a different apparatus altogether.  We have a web service that is dedicated to the rendering of blog page HTML.  It knows about the types of content that can appear on a page, but it knows nothing about the customer's posts.  That's stored on a completely different server.  It also knows nothing about what a user has specified for display on a page because that is hosted on a different server.

When it's time to display a blog page, the service gets a bundle of data about what will be dropped into the page.  It then fetches a template that describes the layout of the page and transforms the content into real HTML.  To provide security on our end and simplicity for the page designer, we developed a template language that has limited looping and conditional constructs.  It also has a tag set that is descriptive of the types of things that appear on a page.

We've been using this system since late April, and it has proved to be very flexible.  We were able to not only migrate existing customers onto the system, we also introduced a second generation base template with a much better structure and styling design.  Our product support team has been able to use the technology to ensure that our customers' blogs resemble closely the branding used on their primary websites.

Compendium is more than just affordable blogging software.  We are providing a reliable service built on state-of-the-art web technology and best practices.

Photo Blogging

Thursday, February 5, 2009 by Jason Gergely
Remember the old saying, "A picture is worth a thousand words?"

Well its true!

They say that you retain things better when you get a visual media rather than just reading it. The reason is that people can relate the picture to the text that they are reading and by recalling the photo, they can better remember what they just read. The same is true about blogging.

By including pictures in your post, you are not only helping people solve their problem and potentially increasing your business... you are helping those people remember your website the next time they run into a similar problem your company can solve... all by putting a simple picture in your post!

So after you do your company a favor and type up your post... go out and find a picture, any picture that can remotely relate to your topic you are cover. It will help out your company blog and your company tremendously.

If you are still curious as to how to intrigrate them in your post, you can look at some examples from the people at Compendium Blogware!


Simple Content Quality Tip: Image Usage

Thursday, February 5, 2009 by Compendium Client Marketing
Increas the quality of a blog post by including an image that complements the content and context of the blog post. Here are a few examples of Compendium Employee blog posts that do just that:

Example use of image in a quality blog post  Example use of image in a quality blog post  Example use of image in a quality blog post  Example use of image in a quality blog post


Not only should you be including a image but you should properly format it. Formatting an image includes:
  • Where the image is placed in a post (beginning, middle, or end)
  • The alignment of the image (to the right left or center)
  • Spacing between the image and the text (padding)
  • Most importantly from an SEO perspective image descriptions
For details on how to set the formatting up properly in your blog post check out Krystal's step-by-step blog post on Understanding Image Properties.

Design tip from Apple store: Presentation

Tuesday, February 3, 2009 by mikey mioduski
Compendium Blogware might, just might, be offering a new promotion this month in hopes of spreading our word and getting more organizations succesfully blogging for business. I hope this doesn't give it away.

Anyway I was on the Apple store site and I noticed something I hadn't really paid attention to ever before. Plenty of people have already talked about Apple's great attention to detail, and here's another.

using great imagery to help sell the product

The iPod's really caught my eye. Instead of blank screens, or even just the traditional default iPod screen, Apple shows off first and foremost the music. They flaunt specific artists which is cool and smart on a few levels.

First, they look great. The Money Mark blue grabbed my attention, but I also really like that Calvin Harris yellow throwback graphic. Album artwork is some of the coolest art to me, and Apple is doing a great job of sort of reviving it.

The association with these artists also says something to the potential buyer. I have a lot of respect for Beck, and I've known Money Mark through his work with the Beastie Boys, so for me, maybe not everybody of course, but for me it says that I can listen to the music that I like. I don't know Calvin Harris, but I blindly assume he's cool if he's on display with Beck. Apple is able to target a variety of people in doing so.

And looky there! The cross-promotion also just gave me a few ideas of where to spend those iTunes gift cards I got for Christmas. Bird number two.

Music is what we're after, after all. Music's the reason we buy iPods and personal music devices. Music makes the people come together. Right? Right?

This attention to presentation and detail is just another reason why so many associate Apple with great design. Simple, colorful, powerful.





The takeway.


Well, if you're thinking about your own conversion rates from your business blog or your site, maybe pull an Apple. Try to get inside your visitor's head. What are they looking for? What is the benefit of your product or service? Once you've figured that out, give it to them. Literally. Visually. Tangibly.

Sometimes we can't wrap our heads around something until it's presented to us in a context that we can relate to. Like seeing actual music we might listen to on an actual iPod.  Something real. Something we can... touch.


...NO HE DIDN'T!




Understanding Image Properties - Description, Padding, & Alignment

Friday, January 30, 2009 by Krystal Featherston
As a support manager our job is to help our client with Compendium's blogging software.  Once question that we've gotten a lot this week is about the properties when you upload a image - so below are some brief descriptions.

Image Description:
A text field that will assign the alt tag, image title and hover text for the image.  These descriptions are searched by search engine crawlers and while they will not affect the compending of the blog post, it will aid your SEO efforts when keywords are used. Also, adding an Image Description improves the webpage’s accessibility for the visually impaired.

Width & Height:
Assign the size of the image in pixels.  Ratio proportions are locked, to ensure the image is shrunk or stretch proportionately.  By clicking on the padlock icon ratio proportions can unlocked, to allow custom sizing.  When the padlock icon is closed, ration proportions are locked and when padlock icon is open, ratio proportions are unlocked.  Also, note that images are resized to a lower resolution to thereby speed load times

Padding–Horizontal:
Is the spacing on the left and right of the image

Padding–Vertical:

Is the spacing on the top and bottom of the image

Border:
Assigns a black border.  Select a number to modify the border width

Align:
Assigns the alignment of the image in relationship to the text or how to do text wrapping– options include Left, Bottom, Middle, Right, Top.

ALSO .... if you have a question  you can search Compendium's Knowledgebase RIGHT NOW -  or shoot us an email or fill out the online submission form.

I Fought the Phing, and Phing Won

Friday, January 30, 2009 by PJ Hinton
Here at Compendium, we're devoting a substantial amount of effort into automating our testing process.  It started last summer, with the introduction of some basic functional testing with Selenium IDE.  Shortly thereafter, we started using PHPUnit to verify that our web service endpoints were functioning properly.  We've also added some tests for business logic classes.  The creation of unit tests for new features became a mandatory process.

In the fall, a server using CruiseControl was introduced to execute the PHPUnit tests whenever new code was committed.  This helped us keep an eye on whether changes were breaking existing functionality, and it reduced the amount of manual testing we would need to do on our testing days.

Lacking in this picture was automation for the functional tests.  We had some spare developer time the last couple of weeks, so it became my task to figure out how we could automate functional tests from CruiseControl.

Selenium has grown into a suite of tools that not only allow you to create and execute user interface tests, it also has tools for automating and distributing the effort.  As a first pass, we decided to go with Selenium RC, which is a standalone Java application that runs on a machine where the browser tests will be conducted.  The application listens for incoming HTTP requests expressed in a protocol referred to as "Selenese".  Each request corresponds to a Selenium test script operation which is submitted from another host on the network.

Fortunately, developers don't have to learn Selenese to communicate with the Selenium RC server.  The Selenium test API has been mapped into several popular programming languages, which means that you can create a functional test expressed in terms of your favorite language and then run it within the context of a unit testing program on that language.

Moreover, you don't even have to learn the raw API in depth because Selenium IDE has code generation export that allows you to convert a test you just created in the IDE into the target language.

The code generation for PHP just happened to be targeted toward PHPUnit.  This was very nice because it allowed us to create the test in Selenium IDE, export into PHP, drop it into our source code tree, and then add another target for running the tests with our build automation tool, Phing, which is the PHP analogue of Apache Ant for Java.  Once that was done, Cruise Control would be automating the tests.

Unfortunately, there were some bumps on the road to functional testing Nirvana.  First, the code generation for Selenium IDE is not perfect.  The store operation, which caches a computed value for later use, generated references to PHP variables sans the obligatory dollar sign prefixes.  So some of the tests had to be hand edited afterward for syntactical correctness.

More problematic was hooking the tests into Phing.  The tests we had created ran fine when invoked from the command line using PHPUnit.  But the build rule in Phing resulted in failures.  For some reason, the operation to connect to the Selenium RC server was failing.  Some debugging revealed that this was because it was attempting to connect to localhost, rather than the machine where the browser tests were to be run.

This issue seemed odd, because we had used a convention for specifying multiple server parameters that was described in the PHPUnit handbook.  According to the documentation, you could define a public static variable named $browsers to specify an array of settings.  Why was this being ignored when run under Phing?

After a lot more spelunking in the source code, I figured out the cause.  It turns out that Phing uses a test runner class that is completely independent of the test runner class that comes with PHPUnit.  The PHPUnit runner is aware of the $browser variable, while the Phing one is not.  Phing simply ignores the variable, leaving the developer with no other option other than to add Selenium API calls in the set up method of the test class.

This didn't make me a happy camper, because that meant that for a given test, we would have to create a separate class for each browser we wanted to support (e.g. one for Firefox on Windows, and another for Internet Explorer).  After some grumbling and sketching of class hierarchies, I came up with a workaround.
  • Define base classes for each browser type.  The set up method would use the Selenium setBrowser() API to select the browser.
  • Define subclasses that inhert off the browser base classes for each platform.  This would allow us to have different flavors of tests for each platform for browsers that run on multiple OSes, like Safari and Firefox.
  • For each functional test, create a common class that has the generated Selenium test exposed as a public static method called runTest().
  • Also for each functional test, create a class for each browser to inherit from the base classes and then call the common runTest() method.
In essence, this allowed us to get close to multiple inheritance using a language that doesn't support multiple inheritance.  Having been a C++ programmer in a former life with the strongly held viewpoint that multiple inheritance was an abomination, I didn't feel too dirty about this solution.

How to Make Your Corporate Blog Standout!

Thursday, January 22, 2009 by Sarah Sedberry

Marketing is all about how to get your Company or Product noticed so that you drive more business.  The best marketers out there find ways to make their Company/Product stand out amongst everyone else in their industry.  The difficult piece is that it is becoming harder and harder to stand out from the crowd. 

For example, look at Superbowl ads.  They used to be mild and mundane, but every year have become more and more elaborate, as they are all competing against each other to see who had the best 30 seconds of air time (there was a football game played??).  

The same thing happens with a Corporate Blog. The blogs that are most successful are those that stand out amongst their competitors.   So how do you accomplish that when there are companies out there who selfishly use the blog to sell their product and reinforce the idea that Corporate Blog's can't be trusted?? 

 Here are a few tips: 

  • A blog that is HONEST and TRANSPARENT will get noticed:  All of the research out there shows that customers want to buy from someone they can relate to - someone with a similar experience.  Customers will trust a blog that revel tidbits about whats going on inside the company, those that talk about customer problems and competitor products, those that talk like real people!  Those that choose to write in a corporate voice will be ineffective. 
  • Creating CONSTANT CONTENT that your readers can follow: Best blogging practices state that an individual bloggers should post no less than twice per week.  This ensures that searchers and followers of your blog will find new content and feel up-to-date with what is going on.  Nothing drives traffic to your site better than frequent content. 
  • Blogs raise STAFF'S VISIBILITY:  Giving your employees (of any rank or position) allows customers to see what type of people work at your company.  It allows them to relate to these individuals. 
  • SPREAD YOUR PRESENCE on the web:  A company that has several social media sites (Facebook,  LinkedIn, YouTube, Twitter, etc) is more credible than a blog that simply posts text on a weekly basis.  It shows your customers that you want to be out there, want to be found and are marketing wisely to those generations that are up and coming.

 

 

Compendium's Enhancements ....

Thursday, January 22, 2009 by Krystal Featherston
As you may know there have been a few changes the past few weeks with Compendium's software ....

A few weeks ago we launched an updated and enhanced text editor. It was one of our most exciting releases yet. Being apart of the product support team ... it is our job to listen to our clients and to communicate their difficulties and enhancements to our engineering team. Well our clients wanted a new text editor and that's exactly what we did.  Thanks to our engineering team for all their hard work and dedication to the product! 

In additon, to the new text editor we have introduced a knowledge base portion of the help page.  Now clients have the ablity to search for the answer without having to call or email.  I know that I always like to try to find a solution on my own before I send an email! 

Just becausee we now have a knowledge base for our clients to search, they still can submit a request or question via email - help@compendiumblogware.com, phone - (317)777-6255, or by completing the webform.  We will respond to your requests as quickly as possible!! 

Our goal is to make your corporate blogging experience at easy and seamless as possible. So you can focus on what's really important - writing content and increasing your SEO!!!!  

Twitter-ing

Wednesday, January 21, 2009 by Sarah Sedberry

I have a confession to make: 

I have worked for Compendium Blogware for some time now, which is a technology firm, providing software as a service.  I should be someone that is up-to-date on the "going's on" of the internet and social media world. 

 ** Here is my confession - I have never created a Twitter account.** 

 There are several reasons for my lack of motivation to add yet another social bookmarking tool to my belt.

  1. I already have several social media accounts to track
  2. I update my Facebook status on a regular basis - does this not annoy my "friends" enough?
  3. I honestly just didn't take the time to look into it...

 

So why now? What happened that I finally caved in and created a Twitter account?  Two words:  Doug Karr.

 Many of you know him as our VP of Blogging Evangelism, but he is so much more.  Doug has been an invaluable asset to those of us here at Compendium, with his never ending knowledge of Search Engines, and his ability to always keep us in good spirits.Twitter Icons

 So for all of those out there curious about Twitter here is a brief synopsis:

 Twitter: is a free social networking and micro-blogging service that allows its users to send and read other users' updates (otherwise known as tweets), which are text-based posts of up to 140 characters in length.

 

I find it similar to the "Status Updates" on Facebook, and nothing more.  A great way to stay in touch with those you "follow" and always be in constant contact. 

So what does this all have to do with blogging?  Well its all social media of course and you can create twitter accounts for your Company, to go along wiht your Corporate blog.  Just how Compendium has done, it allows us as a company to spread our presence on the web, and keep clients and employees up to date on tips for blogging, special events, etc! 

Now what are you waiting for?

 

Compendium on Twitter:  Click Here!

Compendium on Facebook:  Click Here!

Compendium on YouTube:  Click Here!

Sarah's Twitter Account: Click Here!

 

 

Free Webinar

"How marketers are producing blogging ROI in just 10 min/day."


Hosted by CEO and CoFounder Chris Baggott
July 16th, 2009
Sign up here »

Meet Our Team

Doug Karr Abby Brosmer-Rivera Ali Sales Brian McKay Blake Matheny Brian Millis Chris Baggott Chantelle Flannery The Client Corner Dereck Martin James Litton Jennifer Buscher Jenni Edwards Jim Hyslop Jess Wehner Krystal Featherston Kaila Woodside Lindsey Young Mitch Burk Megan Glover Meghan Peters mikey mioduski P.J. Hinton Randy Cox Sarah Sedberry Tracy Donaldson Brett Fritz Chandra Chavez Julie Murphy