<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.soupgiant.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en" xml:base="http://bigredtin.com/wp-atom.php">
	<title type="text">Big Red Tin</title>
	<subtitle type="text">Thoughts about the web and business from the large pantry</subtitle>

	<updated>2010-07-28T05:03:50Z</updated>

	<link rel="alternate" type="text/html" href="http://bigredtin.com" />
	<id>http://bigredtin.com/feed/atom/</id>
	

	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.soupgiant.com/bigredtin" /><feedburner:info uri="bigredtin" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
		<author>
			<name>Peter Wilson</name>
						<uri>http://peterwilson.cc</uri>
					</author>
		<title type="html"><![CDATA[Delay loading of print CSS]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.soupgiant.com/~r/bigredtin/~3/1EHY3KG-e2k/" />
		<id>http://bigredtin.pressgiant.net/?p=689</id>
		<updated>2010-07-28T05:03:50Z</updated>
		<published>2010-07-28T05:03:50Z</published>
		<category scheme="http://bigredtin.com" term="Behind the Websites" /><category scheme="http://bigredtin.com" term="coding" /><category scheme="http://bigredtin.com" term="CSS" /><category scheme="http://bigredtin.com" term="JavaScript" /><category scheme="http://bigredtin.com" term="WordPress" />		<summary type="html"><![CDATA[Recently I stumbled across an article detailing browser performance with the CSS print media type. In most recent browsers the print stylesheet held up rendering.

The article suggested a solution, which I decided to automate for WordPress.]]></summary>
		<content type="html" xml:base="http://bigredtin.com/behind-the-websites/delay-loading-of-print-css/">&lt;p&gt;Recently I stumbled across an article on zOompf &lt;a title="detailing browser performance with the CSS print media type" href="http://zoompf.com/blog/2009/12/browser-performance-problem-with-css-print-media-type"&gt;detailing browser performance with the CSS print media type&lt;/a&gt;. In most recent browsers, Safari being the exception, the print stylesheet held up rendering of the page.&lt;/p&gt;
&lt;p&gt;The zOomph article suggests a solution, to load print stylesheets using JavaScript once the page has  rendered (ie, on the &lt;code&gt;window.onload&lt;/code&gt; event), with a backup for the JavaScript impaired. You can see their code in the original article.&lt;/p&gt;
&lt;h4&gt;Automating the task for WordPress&lt;/h4&gt;
&lt;p&gt;Most sites I develop are in WordPress so I decided to automate the process. This relies on using &lt;code&gt;wp_enqueue_style&lt;/code&gt; to register the stylesheets:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function enqueue_css(){
  if (!is_admin()){
    wp_enqueue_style (
      'bigred-print', /* handle */
      '/path-to/print.css', /* source */
      null, /* no requirements */
      '1.0', /* version */
      'print' /* media type */
    );
  }
}
add_action('wp_print_styles', 'enqueue_css');&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above code will output the following HTML in the header:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;link rel='stylesheet' id='bigred-print-css'  href='/path-to/print.css?ver=1.0' type='text/css' media='print' /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The first step is to wrap the above html in noscript tags, the WordPress &lt;a title="filter" href="http://codex.wordpress.org/Plugin_API#Filters"&gt;filter&lt;/a&gt; &lt;code&gt;style_loader_tag&lt;/code&gt; is ideal for this.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function js_printcss($tag, $handle) {
  global $wp_styles;
  if ($wp_styles-&amp;gt;registered[$handle]-&amp;gt;args == 'print') {
    $tag = "&amp;lt;noscript&amp;gt;" . $tag . "&amp;lt;/noscript&amp;gt;";
  }
  return $tag;
}
add_filter('style_loader_tag', 'js_printcss', 5, 2);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The filter runs for all stylesheets, regardless of media type, so the function checks for print stylesheets and wraps them in the &lt;code&gt;noscript&lt;/code&gt; tag, other media types are left alone.&lt;/p&gt;
&lt;p&gt;The first two arguments are the filter and function names respectively, the third argument specifies the timing (5 is the default) and the final argument tells WordPress how many arguments to pass to the filter – two – in this case $tag and $handle.&lt;/p&gt;
&lt;p&gt;With the new filter, WordPress now outputs following HTML in the header:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;noscript&amp;gt;
&amp;lt;link rel='stylesheet' id='bigred-print-css'  href='/path-to/print.css?ver=1' type='text/css' media='print' /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The next step is to add the JavaScript to load the stylesheets, we can do this by changing our original function,  &lt;code&gt;js_printcss&lt;/code&gt;, and making use of a global variable:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$printCSS = '';

function check_for_print($tag, $handle){
  global $wp_styles, $printCSS;
  if ($wp_styles-&amp;gt;registered[$handle]-&amp;gt;args == 'print') {

    $tag = "&amp;lt;noscript&amp;gt;" . $tag . "&amp;lt;/noscript&amp;gt;";

    preg_match("/&amp;lt;\s*link\s+[^&amp;gt;]*href\s*=\s*[\"']?([^\"' &amp;gt;]+)[\"' &amp;gt;]/", $tag, $hrefArray);
    $href = $hrefArray[1];

    $printCSS .= "var cssNode = document.createElement('link');";
    $printCSS .= "cssNode.type = 'text/css';";
    $printCSS .= "cssNode.rel = 'stylesheet';";
    $printCSS .= "cssNode.href = '" . esc_js($href) . "';";
    $printCSS .= "cssNode.media = 'print';";
    $printCSS .= "document.getElementsByTagName(\"head\")[0].appendChild(cssNode);";
  }
  return $tag;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The code creates the PHP variable &lt;code&gt;$printCSS&lt;/code&gt; globally, which is then called into the function using the global command.&lt;/p&gt;
&lt;p&gt;After wrapping the tag in the &lt;code&gt;noscript&lt;/code&gt; tags, the new function uses a regular expression to extract the URL of the stylesheet from the link tag and placing it the variable &lt;code&gt;$href&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Having extracted the stylesheet&amp;#8217;s URL, the function then appends the required JavaScript to the PHP global variable &lt;code&gt;$printCSS&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The final step is to add the JavaScript to the footer of the HTML using the wp_footer action in WordPress. The PHP to do this is:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function printCSS_scriptTags(){
  global $printCSS;
  if ($printCSS != '') {
    echo "&amp;lt;script type='text/javascript'&amp;gt;\n";
    echo "window.onload = function(){\n";
    echo $printCSS;
    echo "}\n&amp;lt;/script&amp;gt;";
  }
}

add_action('wp_footer', 'printCSS_scriptTags');&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above code uses &lt;code&gt;window.onload&lt;/code&gt; as dictated in the original article. A better method would be to use an event listener to do the work, for those using jQuery we would change the function to:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function printCSS_scriptTags(){
  global $printCSS;
  if ($printCSS != '') {
    echo "&amp;lt;script type='text/javascript'&amp;gt;\n";
    echo "jQuery(window).ready(function(){\n";
    echo $printCSS;
    echo "});\n&amp;lt;/script&amp;gt;";
 }

}
add_action('wp_footer', 'printCSS_scriptTags');&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above solution had been tested for very limited circumstances only and found to have worked. Were I to use the function in a production environment I would undertake further testing.&lt;/p&gt;
&lt;p&gt;Another question to ask is whether all this is actually worth the effort – even when reduced through automation. On Big Red Tin, the print.css is 595 bytes, the delay in rendering is negligible.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bigredtin/~4/1EHY3KG-e2k" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://bigredtin.com/behind-the-websites/delay-loading-of-print-css/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://bigredtin.com/behind-the-websites/delay-loading-of-print-css/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://bigredtin.com/behind-the-websites/delay-loading-of-print-css/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Peter Wilson</name>
						<uri>http://peterwilson.cc</uri>
					</author>
		<title type="html"><![CDATA[Thesis V WordPress, Pearson V Mullenweg]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.soupgiant.com/~r/bigredtin/~3/CyBl3t3jHzI/" />
		<id>http://bigredtin.pressgiant.net/?p=669</id>
		<updated>2010-07-19T01:23:28Z</updated>
		<published>2010-07-15T01:33:38Z</published>
		<category scheme="http://bigredtin.com" term="Behind the Websites" /><category scheme="http://bigredtin.com" term="blogging" /><category scheme="http://bigredtin.com" term="Chris Pearson" /><category scheme="http://bigredtin.com" term="GPL" /><category scheme="http://bigredtin.com" term="Matt Mullenweg" /><category scheme="http://bigredtin.com" term="Movable Type" /><category scheme="http://bigredtin.com" term="themes" /><category scheme="http://bigredtin.com" term="Thesis" /><category scheme="http://bigredtin.com" term="WordPress" />		<summary type="html"><![CDATA[Mullenweg believes that, because WordPress is released under the GPLv2 license, all themes and plugins developed for WordPress must also be released under the same license. Pearson disagrees. I believe that Mullenweg is wrong. WordPress themes can operate on other blogging platforms with minimal changes.]]></summary>
		<content type="html" xml:base="http://bigredtin.com/behind-the-websites/thesis-v-wordpress/">&lt;p&gt;Reading my WordPress feeds this-morning, it appears a &lt;a title="war of words" href="http://thenextweb.com/socialmedia/2010/07/14/wordpress-and-thesis-go-to-battle-mullenweg-may-sue/"&gt;war of words&lt;/a&gt; broke out overnight between Matt Mullenweg (the lead developer of WordPress) and Chris Pearson, the developer of the Thesis theme.&lt;/p&gt;
&lt;p&gt;In brief, Mullenweg believes that, because WordPress is released under the &lt;a title="GPLv2 license" href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt"&gt;GPLv2 license&lt;/a&gt;, all themes and plugins developed for WordPress must also be released under the same license. Pearson disagrees.&lt;/p&gt;
&lt;p&gt;This situation has never affected us directly at Soupgiant so we haven&amp;#8217;t needed to, and this is important, ask our lawyer if my interpretation is correct. &lt;strong&gt;This is a layman&amp;#8217;s opinion and should be treated as such&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The battle comes down to these clauses in the GPLv2 license:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;You must cause any work that you distribute or publish, that in    whole or in part contains or is derived from the Program or any    part thereof, to be licensed as a whole at no charge to all third    parties under the terms of this License.&lt;/p&gt;
&lt;p&gt;If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works.&lt;/p&gt;
&lt;p&gt;&amp;#8211;source &lt;a title="GPLv2 license" href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt"&gt;GPLv2 license&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Due to the second clause quoted above, I believe that Mullenweg is wrong. WordPress themes can operate on other blogging platforms with minimal changes. This has been done before with the &lt;a title="Sandbox theme for WordPress" href="http://www.plaintxt.org/themes/sandbox/"&gt;Sandbox theme for WordPress&lt;/a&gt; which was successfully ported to &lt;a title="Movable Type" href="http://plugins.movabletype.org/sandbox/"&gt;Movable Type&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;WordPress themes output &lt;abbr&gt;HTML&lt;/abbr&gt; with a series of calls to the blogging platform. To output the post&amp;#8217;s title and contents in our base theme, we use the code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;h2 class="entry-title"&amp;gt;&amp;lt;?php the_title() ?&amp;gt;&amp;lt;/h2&amp;gt;
&amp;lt;div class="entry-content"&amp;gt;
    &amp;lt;?php the_content("Continue reading " . the_title('', '', false)); ?&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To output the same &lt;abbr&gt;HTML&lt;/abbr&gt; in a Movable Type theme, we would output:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;h2 class="entry-title"&amp;gt;&amp;lt;$mt:EntryTitle$&amp;gt;&amp;lt;/h2&amp;gt;
&amp;lt;div class="entry-content"&amp;gt;
    &amp;lt;$mt:EntryBody$&amp;gt; &amp;lt;$mt:EntryMore$&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In terms of a page&amp;#8217;s output, the above code is a minor part of the page. &lt;em&gt;The theme&amp;#8217;s template is mostly made up of HTML and CSS, HTML and CSS operate in the browser and not in the blogging platform&lt;/em&gt;. It&amp;#8217;s for that reason that I believe that Pearson is correct in this case.&lt;/p&gt;
&lt;p&gt;I acknowledge that WordPress hooks may complicate the matter but these hooks output such a minor part of a theme&amp;#8217;s HTML, that I consider the theme &lt;em&gt;uses&lt;/em&gt; the platform but isn&amp;#8217;t &lt;em&gt;derived&lt;/em&gt; from the platform. I&amp;#8217;ve left plugins out of this discussion as these are a more complicated matter: they can output HTML or they can build on the platform.&lt;/p&gt;
&lt;p&gt;The above said, were I to release a WordPress theme I would probably release it under the GPL as a hat tip and thank you to the community that has assisted me so much. However, if the theme was as complicated as the Thesis theme, I may feel differently about the matter when it&amp;#8217;s crunch time.&lt;/p&gt;
&lt;p&gt;Again, this is a layman&amp;#8217;s opinion and should be treated as such. If you have a layman&amp;#8217;s opinion too, &lt;a title="we'd love to hear it in the comments" href="http://bigredtin.com/behind-the-websites/thesis-v-wordpress/#comments"&gt;we&amp;#8217;d love to hear it in the comments&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bigredtin/~4/CyBl3t3jHzI" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://bigredtin.com/behind-the-websites/thesis-v-wordpress/#comments" thr:count="3" />
		<link rel="replies" type="application/atom+xml" href="http://bigredtin.com/behind-the-websites/thesis-v-wordpress/feed/atom/" thr:count="3" />
		<thr:total>3</thr:total>
	<feedburner:origLink>http://bigredtin.com/behind-the-websites/thesis-v-wordpress/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Peter Wilson</name>
						<uri>http://peterwilson.cc</uri>
					</author>
		<title type="html"><![CDATA[Getting the bloginfo correctly]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.soupgiant.com/~r/bigredtin/~3/kp5ZCXf8CN0/" />
		<id>http://bigredtin.pressgiant.net/?p=646</id>
		<updated>2010-07-13T07:17:16Z</updated>
		<published>2010-07-13T02:12:30Z</published>
		<category scheme="http://bigredtin.com" term="Behind the Websites" /><category scheme="http://bigredtin.com" term="bloginfo" /><category scheme="http://bigredtin.com" term="coding" /><category scheme="http://bigredtin.com" term="domains" /><category scheme="http://bigredtin.com" term="plugin" /><category scheme="http://bigredtin.com" term="theme" /><category scheme="http://bigredtin.com" term="WordPress" /><category scheme="http://bigredtin.com" term="WordPress MS" />		<summary type="html"><![CDATA[One of the standout problems when using plugins with WordPress MS is when they define a constant for the plugin’s url as the script starts executing.]]></summary>
		<content type="html" xml:base="http://bigredtin.com/behind-the-websites/getting-the-bloginfo-correctly/">&lt;p&gt;This site runs on an &lt;a title="WordPress MS" href="http://codex.wordpress.org/Create_A_Network"&gt;WordPress &lt;/a&gt;&lt;abbr title="Multi Site"&gt;&lt;a title="WordPress MS" href="http://codex.wordpress.org/Create_A_Network"&gt;MS&lt;/a&gt;&lt;/abbr&gt; install, along with a number of other small sites. You can see the full list of sites &lt;a title="on the directory page" href="http://pressgiant.net/"&gt;on the directory page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As with most WordPress sites we use plugins to enhance WordPress, including &lt;a title="Donncha O Caoimh" href="http://ocaoimh.ie/"&gt;Donncha O Caoimh&lt;/a&gt;&amp;#8216;s excellent &lt;a title="WordPress MU Domain Mapping" href="http://ocaoimh.ie/wordpress-mu-domain-mapping/"&gt;WordPress &lt;abbr&gt;MU&lt;/abbr&gt; Domain Mapping&lt;/a&gt; plugin. As the name implies, the domain mapping plugin allows us to use top level domains for each site rather than being stuck with sub-domains. In the case of this blog, without the plugin it would reside at &lt;a title="bigredtin.pressgiant.com" href="http://bigredtin.com"&gt;bigredtin.pressgiant.net&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Taking care with plugins&lt;/h4&gt;
&lt;p&gt;Many plugins are tested for the single site version of WordPress only. I don&amp;#8217;t have a problem with this as most plugins are released under the GPL and free in terms of both speech and beer. If I&amp;#8217;m not paying for software, it&amp;#8217;s up to me to test it in the fringe environment of WordPress &lt;abbr title="Multi Site"&gt;MS&lt;/abbr&gt;.&lt;/p&gt;
&lt;p&gt;Now that WordPress is WordPress &lt;abbr title="Multi Site"&gt;MS&lt;/abbr&gt; is WordPress, more developers may test in both environments but they certainly can&amp;#8217;t be expected to test with all manner of combinations of plugins.&lt;/p&gt;
&lt;h4&gt;The standout problem&lt;/h4&gt;
&lt;p&gt;One of the standout problems when using plugins with WordPress &lt;abbr title="Multi Site"&gt;MS&lt;/abbr&gt; is when they define a constant for the plugin&amp;#8217;s url as the script starts executing, the PHP code may look similar to:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

  define('PLUGIN_DIR', get_bloginfo('url') . "/wp-content/plugins/peters-plugin");

  function plugin_js_css(){
    wp_enqueue_script('plugin-js', PLUGIN_DIR . '/script.js');
    wp_enqueue_style('plugin-css', PLUGIN_DIR . '/style.css');
  }

  add_action('init', 'plugin_js_css');

?&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above stands equally for themes mapping the stylesheet directory at the start of execution:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

  define('THEME_DIR', get_bloginfo('stylesheet_directory') );

  function theme_js_css(){
    wp_enqueue_script('theme-js', THEME_DIR . '/script.js');
    wp_enqueue_style('theme-css', THEME_DIR . '/style.css');
  }

  add_action('init', 'theme_js_css');

?&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;a title="get_bloginfo" href="http://codex.wordpress.org/Function_Reference/get_bloginfo"&gt;&lt;code&gt;get_bloginfo&lt;/code&gt;&lt;/a&gt; and &lt;a title="bloginfo" href="http://codex.wordpress.org/Function_Reference/bloginfo"&gt;&lt;code&gt;bloginfo&lt;/code&gt;&lt;/a&gt; functions return information about your blog and your theme settings including the site&amp;#8217;s home page, the theme&amp;#8217;s directory (as in the second code sample above) or the stylesheet url. &lt;code&gt;bloginfo&lt;/code&gt; outputs the requested information to your &lt;abbr&gt;HTML&lt;/abbr&gt;, &lt;code&gt;get_bloginfo&lt;/code&gt; returns it for use in your &lt;abbr&gt;PHP&lt;/abbr&gt;. &lt;/p&gt;
&lt;p&gt;Outside of code samples, &lt;code&gt;bloginfo&lt;/code&gt; and &lt;code&gt;get_bloginfo&lt;/code&gt; are interchangeable throughout this article.&lt;/p&gt;
&lt;p&gt;The problems occur when a subsequently loaded plugin needs to change something retrieved from &lt;code&gt;bloginfo&lt;/code&gt;. In this site&amp;#8217;s case, Domain Mapping changes all URLs obtained through &lt;code&gt;bloginfo&lt;/code&gt;, but it could be a plugin that simply changes the stylesheet url to a subdomain to speed up page load.&lt;/p&gt;
&lt;p&gt;In a recent case, a plugin – let&amp;#8217;s call it &lt;a title="Disqus" href="http://disqus.com/"&gt;Disqus&lt;/a&gt; – was defining a constant in this manner. As result an &lt;abbr title="Cross-site scripting"&gt;XSS&lt;/abbr&gt; error was occurring when attempting to use Facebook Connect. Replacing the constant with a &lt;code&gt;bloginfo&lt;/code&gt; call fixed the problem.&lt;/p&gt;
&lt;p&gt;The improved code for the first sample above is:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

  function plugin_js_css(){
    wp_enqueue_script('plugin-js', get_bloginfo('url') . '/wp-content/plugins/peters-plugin/script.js');
    wp_enqueue_style('plugin-css', Pget_bloginfo('url') . '/wp-content/plugins/peters-plugin/style.css');
  }

  add_action('init', 'plugin_js_css');

?&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;bloginfo doesn&amp;#8217;t hit the database everytime&lt;/h4&gt;
&lt;p&gt;I presume the developers set their own constants because they&amp;#8217;d like to avoid hitting the database repeatedly to receive the same information.&lt;/p&gt;
&lt;p&gt;Having run some tests on my local install of WordPress, I can assure you this is not the case. Running &lt;code&gt;bloginfo('stylesheet_directory')&lt;/code&gt; triggers a db call on the first occurrence, the information is then cached for subsequent calls.&lt;/p&gt;
&lt;p&gt;I realise I sound incredibly fussy and that I&amp;#8217;m suggesting we protect against edge cases on our edge cases. You&amp;#8217;re right, and &lt;a title="it's not the first time" href="http://bigredtin.com/behind-the-websites/javascript-the-wordpress-way-part-1/"&gt;it&amp;#8217;s not the first time&lt;/a&gt;, but as developers it&amp;#8217;s the edge cases that we&amp;#8217;re employed to avoid.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bigredtin/~4/kp5ZCXf8CN0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://bigredtin.com/behind-the-websites/getting-the-bloginfo-correctly/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://bigredtin.com/behind-the-websites/getting-the-bloginfo-correctly/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://bigredtin.com/behind-the-websites/getting-the-bloginfo-correctly/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Peter Wilson</name>
						<uri>http://peterwilson.cc</uri>
					</author>
		<title type="html"><![CDATA[&#8216;Skip to Content&#8217; Links]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.soupgiant.com/~r/bigredtin/~3/HkT25U48gxM/" />
		<id>http://bigredtin.pressgiant.net/?p=635</id>
		<updated>2010-07-08T02:03:45Z</updated>
		<published>2010-07-08T02:03:45Z</published>
		<category scheme="http://bigredtin.com" term="Behind the Websites" /><category scheme="http://bigredtin.com" term="accessibility" /><category scheme="http://bigredtin.com" term="Best Practice" /><category scheme="http://bigredtin.com" term="coding" /><category scheme="http://bigredtin.com" term="content" /><category scheme="http://bigredtin.com" term="JAWS" /><category scheme="http://bigredtin.com" term="screen readers" /><category scheme="http://bigredtin.com" term="WordPress" />		<summary type="html"><![CDATA[Josh and I were discussing the positioning of Skip to Content links on a website. In the past I've placed these in the first menu on the page, usually positioned under the header.]]></summary>
		<content type="html" xml:base="http://bigredtin.com/behind-the-websites/skip-to-content-links/">&lt;p&gt;Big Red Tin co-author, Josh, and I were discussing the positioning of &lt;em&gt;Skip to Content&lt;/em&gt; links on a website. In the past I&amp;#8217;ve placed these in the first menu on the page, usually positioned under the header.&lt;/p&gt;
&lt;p&gt;According to the &lt;a title="fangs plugin for firefox" href="http://www.standards-schmandards.com/projects/fangs/"&gt;fangs plugin&lt;/a&gt;, the &lt;a title="JAWS" href="http://www.freedomscientific.com/products/fs/jaws-product-page.asp"&gt;JAWS&lt;/a&gt; screen reader reads the opening of &lt;a title="Soupgiant.com" href="http://soupgiant.com/"&gt;Soupgiant.com&lt;/a&gt; as:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Page has seven  headings and forty-three  links Soupgiant   vertical bar  Web Production  dash  Internet Explorer Heading level one Link Graphic Soupgiant   vertical bar  Web Production Heading level five Heat and Serve Combine  seventeen  years of web production experience, twenty  years of  television  and  radio experience,  put it all in a very large pot on a  gentle heat.  Stir regularly  and  serve. Soupgiant goes well with croutons  and  a  touch of parsley.List of five  items bullet &lt;strong&gt;This page link  Skip to Content&lt;/strong&gt; bullet Link Home bullet Link About bullet Link Contact bullet Link Folio&lt;/p&gt;
&lt;p&gt;- my emphasis&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;That&amp;#8217;s a lot of content to get through, on every page of the site, before the Skip to Content link. It would be much better if the skip to content link were earlier on the site.&lt;/p&gt;
&lt;p&gt;As the &lt;abbr&gt;HTML&lt;/abbr&gt; title of the page is read out by JAWS, the best position would be before the in-page title. The opening content would then read as:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Page has seven  headings and forty-three  links Soupgiant   vertical bar  Web Production  dash  Internet Explorer &lt;strong&gt;This page link Skip to Content&lt;/strong&gt; Heading level one Link Graphic Soupgiant   vertical bar  Web Production&lt;/p&gt;
&lt;p&gt;- again, the emphasis is mine&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;That gives the JAWS user the title of the page and immediately allows them to skip to the page&amp;#8217;s content. I don&amp;#8217;t read the header of on every page of a site, nor should I expect screen reader users to.&lt;/p&gt;
&lt;p&gt;I realise screen readers most likely have a feature to skip around the page relatively easily, regardless of how the page is set up but our aim should not be &lt;em&gt;relative&lt;/em&gt; ease, our aim should be &lt;em&gt;absolute&lt;/em&gt; ease.&lt;/p&gt;
&lt;p&gt;As a result, we&amp;#8217;ve decided to move the skip to content links on future sites to earlier in the page.&lt;/p&gt;
&lt;p&gt;Sadly, this revelation came up as a result of what I consider to be a limitation of the WordPress 3.0+ function &lt;code&gt;&lt;a title="wp_nav_menu" href="http://codex.wordpress.org/Function_Reference/wp_nav_menu"&gt;wp_nav_menu&lt;/a&gt;&lt;/code&gt;, the inability to add items at the start of the menu. I should have considered the accessibility implications much earlier. It serves as a reminder, to all web developers, that we should constantly review our practices and past decisions.&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;ve recently changed something you&amp;#8217;ve always done, &lt;a title="we'd love to hear about it in the comments" href="http://bigredtin.com/behind-the-websites/skip-to-content-links/#comments"&gt;we&amp;#8217;d love to hear about it in the comments&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bigredtin/~4/HkT25U48gxM" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://bigredtin.com/behind-the-websites/skip-to-content-links/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://bigredtin.com/behind-the-websites/skip-to-content-links/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://bigredtin.com/behind-the-websites/skip-to-content-links/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Josh Kinal</name>
					</author>
		<title type="html"><![CDATA[Designing a User Interface with Caveat Emptor]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.soupgiant.com/~r/bigredtin/~3/1CKaGQeljUw/" />
		<id>http://bigredtin.com/?p=617</id>
		<updated>2010-07-06T02:04:39Z</updated>
		<published>2010-07-06T01:52:33Z</published>
		<category scheme="http://bigredtin.com" term="Design" /><category scheme="http://bigredtin.com" term="amazon" /><category scheme="http://bigredtin.com" term="communication" /><category scheme="http://bigredtin.com" term="ecommerce" /><category scheme="http://bigredtin.com" term="expectations" /><category scheme="http://bigredtin.com" term="kindle" /><category scheme="http://bigredtin.com" term="shopping" /><category scheme="http://bigredtin.com" term="usability" />		<summary type="html"><![CDATA[There are lots of elements that go into making a good online store. One of the most important is that customers have access to all the information they need to make an informed decision.]]></summary>
		<content type="html" xml:base="http://bigredtin.com/design/designing-a-user-interface-with-caveat-emptor/">&lt;p&gt;Recently an &lt;a href="http://www.amazon.com/gp/product/B0015T963C?ie=UTF8&amp;#038;tag=boxcutters-20&amp;#038;linkCode=as2&amp;#038;camp=1789&amp;#038;creative=390957&amp;#038;creativeASIN=B0015T963C"&gt;Amazon Kindle&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=boxcutters-20&amp;#038;l=as2&amp;#038;o=1&amp;#038;a=B0015T963C" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt; came into my life.&lt;/p&gt;
&lt;p&gt;To test it out I obtained a free copy of &lt;a href="http://books.google.com.au/books?id=UFhlhCvQigkC&amp;#038;printsec=frontcover&amp;#038;dq=hound+of+the+baskervilles&amp;#038;source=bl&amp;#038;ots=6BDrd2XvtZ&amp;#038;sig=7gnwjXpUalRLTHxlTqvMbzKZV7w&amp;#038;hl=en&amp;#038;ei=aXkyTI2sO463cbHI2bgD&amp;#038;sa=X&amp;#038;oi=book_result&amp;#038;ct=result&amp;#038;resnum=3&amp;#038;ved=0CDIQ6AEwAg#v=onepage&amp;#038;q&amp;#038;f=false"&gt;The Hound of the Baskervilles&lt;/a&gt; from the online store and started reading. I was an instant convert. I loved the experience and I loved the concept.&lt;/p&gt;
&lt;p&gt;Until, that is , I found my way into Chapter 2 and there were vital passages missing from the text. It soiled my experience with the Kindle.&lt;/p&gt;
&lt;p&gt;There are a number of lessons here. Obviously, there&amp;#8217;s the whole &lt;em&gt;caveat emptor&lt;/em&gt;, you get what you pay for scenario. A little bit of research would have shown me &lt;a href="http://www.amazon.com/review/RX146XZB1IJWQ/ref=cm_cr_rdp_perm"&gt;this review&lt;/a&gt; that tells me up-front what to expect:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt; This edition is missing certain passages&amp;#8230; Whenever there is a point in the story where a character reads out of a newspaper or other document, that passage is missing from this Kindle edition. Spend a dollar and get a different version. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;But the other lesson is more a question for thought. Why would Amazon keep the book in their store if it&amp;#8217;s not what people are expecting? There is no obvious avenue to inform Amazon of the problem with the book and no way to ask them to remove the book so other people don&amp;#8217;t fall into the same trap.&lt;/p&gt;
&lt;p&gt;When building the user interface of an online store, there are many things to take into account. Feedback is vital for any business. Amazon and &lt;a href="http://www.zappos.com/"&gt;Zappos&lt;/a&gt; have built empires with great customer service but customer service is about a lot more than just an attentive complaints department or a good returns policy.&lt;/p&gt;
&lt;p&gt;Great customer service starts with the user interface. It&amp;#8217;s the experience a customer has when they browse or purchase a product. A bad UI is like having a rude salesperson on the shop floor. A customer should be able to trust that the seller is looking out for them. There should be a way to bring issues of faulty products to the attention of the sellers. &lt;/p&gt;
&lt;p&gt;Sometimes there are use-cases that just aren&amp;#8217;t foreseen. But when they reveal themselves it&amp;#8217;s important for an online store to be able to adapt.&lt;/p&gt;
&lt;p&gt;So there are things that Amazon could have implemented to make my experience better. A roll-over information box that showed me the start of the most helpful review, for example, could have given me the information I needed to make my decision to purchase or not.&lt;/p&gt;
&lt;p&gt;These are the small design things; the small usability things that we try to develop every day.&lt;/p&gt;
&lt;p&gt;Recently I designed some wireframes for an online store. It&amp;#8217;s hard. I had to balance the client&amp;#8217;s budget with the limited information I had, the inclusion and prioritisation of use-cases, and a degree of future-proofing to allow for unforeseen developments.&lt;/p&gt;
&lt;p&gt;There is a lot of information to include in an online store. There are lots of buttons and lots of icons to demand a customer&amp;#8217;s attention. It&amp;#8217;s important to remember, however, that customers want something very simple: They want to buy stuff and for it to behave as expected. Give them that and the rest will follow.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bigredtin/~4/1CKaGQeljUw" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://bigredtin.com/design/designing-a-user-interface-with-caveat-emptor/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://bigredtin.com/design/designing-a-user-interface-with-caveat-emptor/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://bigredtin.com/design/designing-a-user-interface-with-caveat-emptor/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Josh Kinal</name>
					</author>
		<title type="html"><![CDATA[Reply to Emails to Manage Expectations]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.soupgiant.com/~r/bigredtin/~3/1gwKMfVA_4Y/" />
		<id>http://bigredtin.com/?p=603</id>
		<updated>2010-06-28T06:18:55Z</updated>
		<published>2010-06-30T23:15:50Z</published>
		<category scheme="http://bigredtin.com" term="Business" /><category scheme="http://bigredtin.com" term="communication" /><category scheme="http://bigredtin.com" term="email" /><category scheme="http://bigredtin.com" term="inbox zero" /><category scheme="http://bigredtin.com" term="information-management" /><category scheme="http://bigredtin.com" term="time-management" />		<summary type="html"><![CDATA[The cost to benefit ratio of replying to email is tiny. In contrast, not replying to email can be detrimental to your reputation and your relationships. It's your choice.]]></summary>
		<content type="html" xml:base="http://bigredtin.com/business/reply-to-emails-to-manage-expectations/">&lt;p&gt;There are many great blog posts about managing your email. Most of them are by &lt;a href="http://inboxzero.com/inboxzero/"&gt;Merlin Mann with his Inbox Zero philosophy&lt;/a&gt; which will soon be available in book form. If you&amp;#8217;re unfamiliar with it, I recommend checking it out and especially taking the time to &lt;a href="http://inboxzero.com/video/"&gt;watch the one hour video&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The nature of email, of course, is communication.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve worked with people who might have scanned the subject lines for something interesting but I could never rely on them having read an email I sent. Their inboxes became a communication void.&lt;/p&gt;
&lt;p&gt;If I wanted them to read an email I had to send them an instant message or SMS to tell them I sent an email I wanted them to read. Other times I&amp;#8217;d send the email and then print it out and put it on their desk. It was not a very efficient way to communicate.&lt;/p&gt;
&lt;p&gt;It might take anywhere between 30-60 seconds to reply to an email.&lt;/p&gt;
&lt;p&gt;Sometimes the reply might only require &amp;#8220;Thanks&amp;#8221; and then it takes even less time.&lt;/p&gt;
&lt;p&gt;As part of my work with &lt;a href="http://boxcutters.net"&gt;Boxcutters&lt;/a&gt; I often have a need to email US-based television publicists. It&amp;#8217;s becoming an increasingly futile exercise. They never reply. I may as well shout my requests across the Pacific Ocean.&lt;/p&gt;
&lt;p&gt;If they can&amp;#8217;t help me, then I&amp;#8217;d at least like a simple:&lt;br /&gt;
&lt;blockquote&gt; I&amp;#8217;m sorry but we don&amp;#8217;t deal with [Australians / Podcasts / People we've never heard of].&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt; Or even the generic:&lt;br /&gt;
&lt;blockquote&gt;We can&amp;#8217;t assist you with your request at this time.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;An email that requires a lot of attention could be acknowledged really quickly with something like:&lt;br /&gt;
&lt;blockquote&gt;Thanks, I&amp;#8217;ve flagged this to read later and I&amp;#8217;ll let you know my thoughts within a week.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt; That says a lot. It says: &amp;#8220;I know you&amp;#8217;re telling me something you think is important but please understand that I&amp;#8217;m busy and I can&amp;#8217;t give it my full attention right now. I will read it and let you know what I think in my own time.&amp;#8221;&lt;/p&gt;
&lt;p&gt;This is called managing expectations in email. Email doesn&amp;#8217;t need an instant response. A lot of email only needs a response at some stage that day. Some needs a response at some stage that week. Some doesn&amp;#8217;t need any response at all.&lt;/p&gt;
&lt;p&gt;You need to work out your own criteria for prioritising email but be one hundred percent sure that if someone  has taken the time to write to you personally, they are hoping for some kind of reply or acknowledgement that you are paying attention.&lt;/p&gt;
&lt;p&gt;Similarly, if you&amp;#8217;re sending an email, maybe include a line about how soon you need a reply. It will help the other person formulate their response. And please, if something is really urgent, &lt;a href="http://en.wikipedia.org/wiki/Telephone"&gt;use the telephone&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Replying to email doesn&amp;#8217;t take very long, doesn&amp;#8217;t cost much but works wonders to strengthen relationships.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bigredtin/~4/1gwKMfVA_4Y" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://bigredtin.com/business/reply-to-emails-to-manage-expectations/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://bigredtin.com/business/reply-to-emails-to-manage-expectations/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://bigredtin.com/business/reply-to-emails-to-manage-expectations/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Peter Wilson</name>
						<uri>http://peterwilson.cc</uri>
					</author>
		<title type="html"><![CDATA[Blog Post: This Tweet Looks Unloved]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.soupgiant.com/~r/bigredtin/~3/fGNTxfd8Fd0/" />
		<id>http://bigredtin.pressgiant.net/?p=588</id>
		<updated>2010-06-28T01:03:19Z</updated>
		<published>2010-06-29T00:30:03Z</published>
		<category scheme="http://bigredtin.com" term="Content Strategy" /><category scheme="http://bigredtin.com" term="blogging" /><category scheme="http://bigredtin.com" term="blogs" /><category scheme="http://bigredtin.com" term="CoTweet" /><category scheme="http://bigredtin.com" term="Statistics" /><category scheme="http://bigredtin.com" term="Twitter" /><category scheme="http://bigredtin.com" term="Twitterfeed" />		<summary type="html"><![CDATA[We had Twitterfeed set up at this blog's old location and took the opportunity to compare click-throughs from manual tweets versus automated tweets. Manual tweets had a substantially higher click-through rate than the automated tweets.]]></summary>
		<content type="html" xml:base="http://bigredtin.com/content-strategy/unloved-tweets/">&lt;p&gt;Any blogger worth their salt knows of &lt;a href="http://twitterfeed.com/"&gt;Twitterfeed&lt;/a&gt; or a similar service. For the uninitiated, Twitterfeed converts a site&amp;#8217;s RSS feed into tweets, allowing users to set and forget. The auto-tweets take the form &amp;#8216;Blog Post: &amp;lt;title&amp;gt; &amp;lt;short url&amp;gt;&amp;#8217; or similar.&lt;/p&gt;
&lt;p&gt;When we launched Big Red Tin we didn&amp;#8217;t set up Twitterfeed immediately.&lt;/p&gt;
&lt;p&gt;With manual tweets we could customise the message to provide more details to Twitter users, one such tweet was:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;We&amp;#8217;ve defined a new term: Web 1.5 &lt;a href="http://bigredtin.com/design/web-1-5/"&gt;http://redt.in/b0KRut&lt;/a&gt; ^pw&lt;/p&gt;
&lt;p&gt;– &lt;a href="http://twitter.com/bigredtin/status/16282703026"&gt;source: @bigredtin&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;We had Twitterfeed set up at this blog&amp;#8217;s old location and took the opportunity to compare click-throughs from manual tweets versus automated tweets.&lt;/p&gt;
&lt;p&gt;Manual tweets had a substantially higher click-through rate than the automated tweets. I suspect the reason for this is two fold:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;With so many people using Twitterfeed type 	services, Twitter users have learnt to ignore tweets that appear 	auto-generated.&lt;/li&gt;
&lt;li&gt;More information can be included in a manual tweet than might appear in an auto-tweet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Take the post we were linking to earlier, had we been using Twitterfeed the tweet would have been &amp;#8216;Blog Post: Web 1.5 &lt;a href="http://bigredtin.com/design/web-1-5/"&gt;http://redt.in/b0KRut&lt;/a&gt;&amp;#8216;. This provides so little information as to be next to useless. We would have ignored such a tweet out ourselves.&lt;/p&gt;
&lt;p&gt;Many of the posts on this site are scheduled in advance, this allows us to publish at roughly the same time each week.&lt;/p&gt;
&lt;p&gt;To schedule the associated tweets we use &lt;a href="http://cotweet.com/"&gt;CoTweet&lt;/a&gt;. We have a couple of shared twitter accounts as it is, so CoTweet comes in handy for other purposes, but it&amp;#8217;s the scheduling feature we use most of all.&lt;/p&gt;
&lt;p&gt;If you use Twitterfeed yourself, try disabling it for a couple of weeks and manually tweet in its place. There&amp;#8217;s a good chance you&amp;#8217;ll be pleasantly surprised when you compare your &lt;a href="http://bit.ly/"&gt;bit.ly&lt;/a&gt; stats.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bigredtin/~4/fGNTxfd8Fd0" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://bigredtin.com/content-strategy/unloved-tweets/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://bigredtin.com/content-strategy/unloved-tweets/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://bigredtin.com/content-strategy/unloved-tweets/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Josh Kinal</name>
					</author>
		<title type="html"><![CDATA[Business is not like Sport]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.soupgiant.com/~r/bigredtin/~3/BNHGD5CMxxQ/" />
		<id>http://bigredtin.com/?p=578</id>
		<updated>2010-06-24T00:52:23Z</updated>
		<published>2010-06-24T00:30:10Z</published>
		<category scheme="http://bigredtin.com" term="Business" /><category scheme="http://bigredtin.com" term="37 Signals" /><category scheme="http://bigredtin.com" term="Analogies" /><category scheme="http://bigredtin.com" term="Jason Calacanis" /><category scheme="http://bigredtin.com" term="Jeffrey Zeldman" /><category scheme="http://bigredtin.com" term="Leo Laporte" /><category scheme="http://bigredtin.com" term="Molly Holzschlag" /><category scheme="http://bigredtin.com" term="Risk" />		<summary type="html"><![CDATA[It's easy to make sports analogies when discussing business. Watching World Cup soccer and playing baseball, as I do, the similarities between doing well in sports and business seem obvious. In fact, since Robert DeNiro, playing Al Capone in <em>The Untouchables</em> bashed in an associate's head while making a baseball analogy, drawing lines of comparison between the two has become clich&#233;.]]></summary>
		<content type="html" xml:base="http://bigredtin.com/business/business-is-not-like-sport/">&lt;p&gt;A kid who wants to play golf looks up to Tiger Woods and not Derek Jeter. That makes sense but in business we use sports analogies when we should use business analogies.&lt;/p&gt;
&lt;p&gt;More importantly, in business we need to see what other people have done to learn from their mistakes and successes.&lt;/p&gt;
&lt;p&gt;At Soupgiant we call ourselves Web Producers. We produce the Web. So I try to look for people who have successes in that field. People like Jason Calacanis and Leo Laporte have built success for themselves out of the web.&lt;/p&gt;
&lt;p&gt;They could be compared to sporting greats like Tiger Woods and Derek Jeter. They never gave up, they tried to overcome their obstacles and they worked damn hard to become who they are. But there are more differences than similarities.&lt;/p&gt;
&lt;p&gt;The difference in business is the risks we take. It can take between five and ten years to know if a business is ever going to be successful. In sport the wins and losses are almost instantaneous by comparison.&lt;/p&gt;
&lt;p&gt;In business you have to sit with a decision for years before you see fruit. It could be years in which there is very little income. It&amp;#8217;s also years in which you could be earning more money elsewhere.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s all about context. There&amp;#8217;s no point in trying to be the &lt;a href="http://www.cricinfo.com/australia/content/player/5628.html"&gt;Ian Healy&lt;/a&gt; of the Web. He was a cricketer &lt;strong&gt;and there is no comparison&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Everybody who succeeds in their area works hard. The people who succeed in our area work hard doing what we do.&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s time we started sharing our own stories, our own opinions and our discussions of the risks we take. We can learn from each other in our own areas by making comparisons that actually make sense.&lt;/p&gt;
&lt;p&gt;So we have this blog. &lt;a href="http://www.twitter.com/jason"&gt;Jason Calacanis&lt;/a&gt; has&lt;a href="https://my.binhost.com/lists/listinfo/jason"&gt; a mailing list &lt;/a&gt;that is worth subscribing to (even if he does make too many sports analogies). Leo Laporte has the &lt;a href="http://twit.tv/"&gt;TWiT network of Podcasts&lt;/a&gt;. 37 Signals has the &lt;a href="http://37signals.com/svn"&gt;Signal vs Noise blog&lt;/a&gt; and two books. Molly Holzschlag has &lt;a href="http://molly.com/"&gt;her (rarely updated) blog&lt;/a&gt; and many books. Jeffrey Zeldman has &lt;a href="http://www.zeldman.com/"&gt;a blog&lt;/a&gt;, &lt;a href="http://5by5.tv/bigwebshow"&gt;a video podcast&lt;/a&gt; and many books.&lt;/p&gt;
&lt;p&gt;Those are some of the people we look to for advice, examples, inspiration and experience. We&amp;#8217;d love to hear you share some yours.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bigredtin/~4/BNHGD5CMxxQ" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://bigredtin.com/business/business-is-not-like-sport/#comments" thr:count="1" />
		<link rel="replies" type="application/atom+xml" href="http://bigredtin.com/business/business-is-not-like-sport/feed/atom/" thr:count="1" />
		<thr:total>1</thr:total>
	<feedburner:origLink>http://bigredtin.com/business/business-is-not-like-sport/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Peter Wilson</name>
						<uri>http://peterwilson.cc</uri>
					</author>
		<title type="html"><![CDATA[Surprise. It&#8217;s all about honesty]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.soupgiant.com/~r/bigredtin/~3/2lRJXQjcAdo/" />
		<id>http://bigredtin.pressgiant.net/?p=574</id>
		<updated>2010-06-22T02:21:10Z</updated>
		<published>2010-06-22T02:21:10Z</published>
		<category scheme="http://bigredtin.com" term="Business" /><category scheme="http://bigredtin.com" term="clients" /><category scheme="http://bigredtin.com" term="meetings" /><category scheme="http://bigredtin.com" term="sales" /><category scheme="http://bigredtin.com" term="selling" />		<summary type="html"><![CDATA[We were unable to help a potential client with the task they had in mind. We may have been able to fudge it but we don't think 'fudging it' is the way to keep clients happy.]]></summary>
		<content type="html" xml:base="http://bigredtin.com/business/honesty/">&lt;p&gt;Last week we had a sales meeting with a potential client. As it turned out, we were unable to help with the task they had in mind. It was outside our area of expertise.&lt;/p&gt;
&lt;p&gt;We may have been able to fudge it. Call us stupid, but we don&amp;#8217;t think &amp;#8216;fudging it&amp;#8217; is the way to keep clients happy or maintain a low client turnover.&lt;/p&gt;
&lt;p&gt;In this situation there are two options:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Quote ludicrously high with the aim of missing out on the job. In the event the quote is accepted, the job can be outsourced with a tidy profit.&lt;/li&gt;
&lt;li&gt;Tell the truth and decline the work&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We chose the latter option and used the opportunity to explain our areas of expertise. Selling the company, not the lie.&lt;/p&gt;
&lt;p&gt;The natural fear is the potential client will storm out of the meeting, muttering obscenities under their breath.&lt;/p&gt;
&lt;p&gt;What actually happens is the potential client realises their current project – or at least the original part of their current project – is a bad fit. They also realise they&amp;#8217;re not dealing with sleazy salesmen willing to say anything to get a job and deal with the consequences later.&lt;/p&gt;
&lt;p&gt;The second realisation sells a company. It&amp;#8217;s something that can be used to convert a single project into a long term relationship.&lt;/p&gt;
&lt;p&gt;Ludicrously high quoting, lies or fudging a task may get you more clients but getting clients isn&amp;#8217;t the aim, the real aim is to keep them.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bigredtin/~4/2lRJXQjcAdo" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://bigredtin.com/business/honesty/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://bigredtin.com/business/honesty/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://bigredtin.com/business/honesty/</feedburner:origLink></entry>
		<entry>
		<author>
			<name>Josh Kinal</name>
					</author>
		<title type="html"><![CDATA[Beware the Amazing Bargain]]></title>
		<link rel="alternate" type="text/html" href="http://feeds.soupgiant.com/~r/bigredtin/~3/FwrNyxw31-Q/" />
		<id>http://bigredtin.com/?p=557</id>
		<updated>2010-06-16T05:31:47Z</updated>
		<published>2010-06-17T00:30:54Z</published>
		<category scheme="http://bigredtin.com" term="Business" /><category scheme="http://bigredtin.com" term="content" /><category scheme="http://bigredtin.com" term="content management systems" /><category scheme="http://bigredtin.com" term="planning" /><category scheme="http://bigredtin.com" term="pricing" /><category scheme="http://bigredtin.com" term="selling" />		<summary type="html"><![CDATA[We've all heard about how, when something sounds like too much of a bargain to be true, it probably is. This was definitely the case with "quick and simple websites from $495". When it comes to building a website, it's important to know what the client actually needs.]]></summary>
		<content type="html" xml:base="http://bigredtin.com/business/beware-the-amazing-bargain/">&lt;p&gt;My physiotherapist wants to build a website for her business. We talked about this while she dug her elbows into my forearm, persuading me to swap my mouse to my other hand.&lt;/p&gt;
&lt;p&gt;My instant response, whenever somebody starts a conversation like this is to ask them why they want a website. At least that&amp;#8217;s what it used to be. Apparently it&amp;#8217;s bad business to tell people they don&amp;#8217;t need what it is you&amp;#8217;re selling. I held off for as long as I could. The conversation went something like this:&lt;/p&gt;
&lt;p&gt;&amp;#8220;How much would you charge for a basic website?&amp;#8221;&lt;br /&gt;
&amp;#8220;For a website with original graphic design using a content management system you&amp;#8217;re looking at a minimum of a few thousand dollars. It varies depending on what functionality you want on the site.&amp;#8221;&lt;br /&gt;
&amp;#8220;OK. I called up this place that advertises on the radio. You know, &amp;#8216;quick and simple websites from $495&amp;#8242;?&amp;#8221;&lt;br /&gt;
&amp;#8220;I can&amp;#8217;t say I&amp;#8217;ve heard the ad.&amp;#8221;&lt;br /&gt;
&amp;#8220;Well, it got really weird. They kept calling me and now they keep emailing me. I don&amp;#8217;t really want to use them now. They&amp;#8217;re too much like stalkers.&amp;#8221;&lt;/p&gt;
&lt;p&gt;We&amp;#8217;ve all heard about how, when something sounds like too much of a bargain to be true, it probably is. This was definitely the case with &amp;#8220;quick and simple websites from $495&amp;#8243;. It turned out that for $495 you could have 3 pages. Extra pages cost more money and then there were the ongoing costs of hosting, a monthly cost of licensing their &lt;abbr title="content management system"&gt;CMS&lt;/abbr&gt; and who knows what other hidden costs.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s go back one step. They were charging &lt;em&gt;per page&lt;/em&gt;. I remember people charging per page back in 1997, when sites were static. In fact, charging per page implies that they&amp;#8217;re not using a CMS. So why then are they charging for CMS licensing?&lt;/p&gt;
&lt;p&gt;So I told her what I thought she needed. She&amp;#8217;s a physiotherapist and her business relies on her expertise in the area. A blog about physiotherapy, new techniques, stretching the right way, and avoiding injury could really help build her profile as an expert in the area.&lt;/p&gt;
&lt;p&gt;&amp;#8220;But a blog is a lot of work,&amp;#8221; I told her. &amp;#8220;Not keeping it up-to-date can do as much damage to your reputation as maintaining the blog will improve it.&amp;#8221;&lt;/p&gt;
&lt;p&gt;She already works long hours and I knew she didn&amp;#8217;t want &lt;em&gt;more&lt;/em&gt; work. So finally I asked her what she thinks she can get from a website. I pointed out to her that her business is already at capacity. Not a single slot is left vacant all week.&lt;/p&gt;
&lt;p&gt;It turns out that an organisation for a new technique she&amp;#8217;s been accredited with wants to put a link to her website on their website. That&amp;#8217;s all. In fact, that&amp;#8217;s enough. The website could help her expand her business using this new technique.&lt;/p&gt;
&lt;p&gt;It reminded me why I ask the question of potentially new clients. It means we&amp;#8217;re going to build the right website for them &lt;em&gt;if they actually need something built&lt;/em&gt;. If a client actually has a need for a new website then we can work towards that need. It helps us advise them on content, style and structure. These are all services that &amp;#8220;quick and simple websites from $495&amp;#8243; won&amp;#8217;t provide.&lt;/p&gt;
&lt;p&gt;The problem, though, is that businesses like those that advertise web production services at prices that seem too good to be true create an expectation in the market-place. They prey on those who don&amp;#8217;t know enough about what they&amp;#8217;re purchasing, lock them into systems where they end up paying more over time without ever actually giving them value for money.&lt;/p&gt;
&lt;img src="http://feeds.feedburner.com/~r/bigredtin/~4/FwrNyxw31-Q" height="1" width="1"/&gt;</content>
		<link rel="replies" type="text/html" href="http://bigredtin.com/business/beware-the-amazing-bargain/#comments" thr:count="0" />
		<link rel="replies" type="application/atom+xml" href="http://bigredtin.com/business/beware-the-amazing-bargain/feed/atom/" thr:count="0" />
		<thr:total>0</thr:total>
	<feedburner:origLink>http://bigredtin.com/business/beware-the-amazing-bargain/</feedburner:origLink></entry>
	</feed>
