<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Ethan Gardner Web Design</title>
    <link>http://www.ethangardner.com</link>
    <description>Ethan Gardner Web Design Feed</description>
    <language>en-us</language>
    <generator>Symphony (build 2.2.5)</generator>
    
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/EthanGardnerWebDesign" /><feedburner:info uri="ethangardnerwebdesign" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /><feedburner:emailServiceId>EthanGardnerWebDesign</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
      <title>Javascript Namespace Strategy for Large Applications</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/51tsPubH1wM/</link>
      <pubDate>Thu, 19 Jan 2012 09:45 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/javascript-namespace-strategy-for-large-applications/</guid>
      <description>&lt;p&gt;According to the HTTP Archive, the average site serves 14 JavaScript files. With more reliance on 3rd party code, it is increasingly more important to protect the code you write from being interfered with by other code used on your site or application.&lt;/p&gt;

&lt;p&gt;Namespacing is the common sense way to do this and a practice that I employ on all my projects, both work and personal. This article demonstrates my approach to structuring namespaces in JavaScript for larger applications.&lt;/p&gt;

&lt;h2&gt;What is a Namespace?&lt;/h2&gt;

&lt;p&gt;A namespace is a wrapper for a group of related features or modules which is used to provide an intuitive structure to a larger-scale architecture. Think of how you might shop on Amazon. There is a sporting goods department, books, apparel. All of these are categories of items that are classified in some way.&lt;/p&gt;

&lt;p&gt;The best way to illustrate how this works in a programming scenario is to take a look at JavaScript libraries and frameworks. All JS libraries use namespaces, but take slightly different approaches.&lt;/p&gt;

&lt;h3&gt;BBC’s Glow&lt;/h3&gt;

&lt;p&gt;The Glow framework uses an &lt;abbr title="Immediately Invoked Function Expression"&gt;IIFE&lt;/abbr&gt; to check to see if there is a Glow namespace in the global object (&lt;code&gt;window&lt;/code&gt; if the code is running in the browser), and if it has not been defined before, it is created.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// From Glow 2.0 Alpha
(function() {
    // there can be only one
    if (window.Glow) { return; }
    window.Glow = true;

    window.Glow = function(version, opts) { 
        // configures Glow namespace in the window object
    }

    // rest of the library goes here...
})();
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;jQuery&lt;/h3&gt;

&lt;p&gt;jQuery sets up a local copy of the jQuery variable and returns the local copy to the global scope:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// From jQuery 1.7
var jQuery = (function() {

    // Define a local copy of jQuery
    var jQuery = function( selector, context ) {
        // The jQuery object is actually just the init constructor 'enhanced'
        return new jQuery.fn.init( selector, context, rootjQuery );
    },

    // Map over jQuery in case of overwrite
    _jQuery = window.jQuery,
    // more configuration code...
    return jQuery;
})();
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;YUI&lt;/h3&gt;

&lt;p&gt;YUI considers namespacing to be so important, they included a helper function in their library to allow developers to easily create their own namespaces.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// From YUI 3. The Y namespace is implied for brevity
namespace: function() {
    var a = arguments, o, i = 0, j, d, arg;

    for (; i &amp;lt; a.length; i++) {
        o = this; //Reset base object per argument or it will get reused from the last
        arg = a[i];
        if (arg.indexOf(PERIOD) &amp;gt; -1) { //Skip this if no "." is present
            d = arg.split(PERIOD);
            for (j = (d[0] == 'YAHOO') ? 1 : 0; j &amp;lt; d.length; j++) {
                o[d[j]] = o[d[j]] || {};
                o = o[d[j]];
            }
        } else {
            o[arg] = o[arg] || {};
            o = o[arg]; //Reset base object to the new object so it's returned
        }
    }
    return o;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Structuring a Larger Application&lt;/h2&gt;

&lt;p&gt;Depending on the size of a site, having a complex architecture might be overkill, but basic provisions for a namespace are helpful to identify code, especially when you are revisiting the site a few months later for maintenance. A basic namespace can be created by:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var MYNS = window.MYNS || {};
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Typically, the larger the application, the more important it is to keep code organized. I have found that grouping related features together is the best way to structure a large application.&lt;/p&gt;

&lt;p&gt;For example, MooTools has an Element class that provides many helper features for element manipulation and traversal. Child objects like Element.Style are used to extend the parent object. Animation is controlled by the FX class which has subclasses to extend the core features as well. This same modular approach can be applied to application development for related components such as user-interface elements.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Create the MYNS.UI object to act as a container for 
// all user interface features
MYNS.UI = MYNS.UI || {};

MYNS.UI.tabs = function (){
    // methods, variables, and other code goes here
}

MYNS.UI.modal = function (){
    // methods, variables, and other code goes here
}

MYNS.UI.tooltip = function (){
    // methods, variables, and other code goes here
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then the same principle can be applied for data models elsewhere in the application:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;MYNS.models = MYNS.models || {};

MYNS.models.pages = function(){
    // methods, variables, and other code goes here
}

MYNS.models.authors = function(){
    // methods, variables, and other code goes here
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;As a general rule, I try to avoid going more than 3 levels deep to avoid excessive look-ups up the prototype/scope chain. This limits any performance detriment if there is a function or variable in higher up the scope chain that my code needs to access.&lt;/p&gt;

&lt;h2&gt;Additional Benefits of Namespacing&lt;/h2&gt;

&lt;p&gt;Namespacing your code this way can also help take the guess work out of file naming and directory structure. For example, we could use this same convention and put all of our &lt;code&gt;UI&lt;/code&gt; components in a file called &lt;code&gt;UI.js&lt;/code&gt; and all our &lt;code&gt;models&lt;/code&gt; in a file called &lt;code&gt;models.js&lt;/code&gt;. We could then use a build tool like Ant or Phing to combine the files into one larger file at build time before deploying to a production server.&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;As the amount of 3rd party JavaScript used in web pages increases, developers need to pay added attention to protecting their code from outside interference. Using a namespace is a simple way to help guard against variables being overwritten and provides added benefits of helping with code organization.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=51tsPubH1wM:1BnAXgM4P5I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=51tsPubH1wM:1BnAXgM4P5I:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=51tsPubH1wM:1BnAXgM4P5I:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=51tsPubH1wM:1BnAXgM4P5I:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=51tsPubH1wM:1BnAXgM4P5I:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=51tsPubH1wM:1BnAXgM4P5I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=51tsPubH1wM:1BnAXgM4P5I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=51tsPubH1wM:1BnAXgM4P5I:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/51tsPubH1wM" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/javascript-namespace-strategy-for-large-applications/</feedburner:origLink></item>
    <item>
      <title>jQuery Icon Menu</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/-fbQO8nt3rg/</link>
      <pubDate>Thu, 10 Nov 2011 09:21 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/jquery-icon-menu/</guid>
      <description>&lt;p&gt;As designers and developers, we are continually challenged with ways to display large amounts information. In this age of content, the amount of information to display can easily lead to clutter if you aren’t careful.&lt;/p&gt;

&lt;p&gt;In a previous post, I described how to make an accordion menu using jQuery UI and Wordpress without a plugin. Today we’ll look at another helpful design pattern in the form of an icon menu and produce the effect in about 20 lines of jQuery.&lt;/p&gt;

&lt;h2&gt;What is an Icon Menu&lt;/h2&gt;

&lt;p&gt;Welie.com defines an &lt;a href="http://www.welie.com/patterns/showPattern.php?patternID=image-menu"&gt;icon menu&lt;/a&gt; as a design pattern that allows “users to select a menu item by selecting an image and display the label in a fixed location.” This is another useful tool to display information in a compact space since the labels are usually not shown by default. The image below is probably my favorite use of an icon menu that I’ve seen in the wild.&lt;/p&gt;

&lt;p&gt;&lt;img src="/image/1/610/0/uploads/food-network-homepage.jpg" alt="Icon Menu on the Food Network Home Page" /&gt;&lt;/p&gt;

&lt;p&gt;We&amp;#8217;ll use &lt;a href="http://jquery.com"&gt;jQuery&lt;/a&gt; and the &lt;a href="http://flesler.blogspot.com/2007/10/jqueryscrollto.html"&gt;ScrollTo jQuery plugin&lt;/a&gt; to write code that does the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Degrades gracefully when JavaScript is disabled.&lt;/li&gt;
&lt;li&gt;Open one icon item assigned at random.&lt;/li&gt;
&lt;li&gt;Only one icon can be opened at a time.&lt;/li&gt;
&lt;li&gt;Scroll to the open item and distinguish it from the others.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Structure the Markup&lt;/h2&gt;

&lt;p&gt;Since this project involves manipulating HTML based on user interaction, I craft my HTML before I even start to think about the JavaScript. The key is that we have each menu item is its own list item, and each list item contains a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; for the icons and another one for the details.&lt;/p&gt;

&lt;script src="https://gist.github.com/1353625.js?file=FeatureBox.html"&gt;&lt;/script&gt;

&lt;h2&gt;Style with CSS&lt;/h2&gt;

&lt;p&gt;Once the HTML is in place, I begin working on the CSS. This needs to look nice with JavaScript turned off, and CSS is the crucial step to pulling that off.&lt;/p&gt;

&lt;script src="https://gist.github.com/1353660.js?file=FeatureBox.css"&gt;&lt;/script&gt;

&lt;h2&gt;Make the Icon Menu Interactive with jQuery&lt;/h2&gt;

&lt;p&gt;Now, we just need to bring it all together with jQuery so only one item is expanded at a time and the items scroll on-click thanks the the ScrollTo plugin.&lt;/p&gt;

&lt;script src="https://gist.github.com/1353677.js?file=FeatureBox.js"&gt;&lt;/script&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="/demo/jQuery-featurebox/"&gt;Demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/edgincvg/jQuery-FeatureBox/zipball/master"&gt;Download&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;With about 20 lines of JavaScript, we can put the icon menu to use. We&amp;#8217;ve only scratched the surface with what the icon menu can do in a very simple, isolated instance.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=-fbQO8nt3rg:RXzJ9qHAWBc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=-fbQO8nt3rg:RXzJ9qHAWBc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=-fbQO8nt3rg:RXzJ9qHAWBc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=-fbQO8nt3rg:RXzJ9qHAWBc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=-fbQO8nt3rg:RXzJ9qHAWBc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=-fbQO8nt3rg:RXzJ9qHAWBc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=-fbQO8nt3rg:RXzJ9qHAWBc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=-fbQO8nt3rg:RXzJ9qHAWBc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/-fbQO8nt3rg" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/jquery-icon-menu/</feedburner:origLink></item>
    <item>
      <title>Create a SQLite3 Database from a Spreadsheet</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/hW7OKELAqBc/</link>
      <pubDate>Wed, 19 Oct 2011 12:30 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/create-a-sqlite3-database-from-a-spreadsheet/</guid>
      <description>&lt;p&gt;Recently, I needed to create a pre-populated SQLite database that will be distributed with an application I’m developing. I tried to use a visual interface initially, but I quickly hit a wall when doing the import due to the size of the database.&lt;/p&gt;

&lt;p&gt;Since local databases are frequently used in mobile applications and offline web applications, I thought it would be good to cover how to create a SQLite database from the command line and share some helpful hints I stumbled upon along the way.&lt;/p&gt;

&lt;h2&gt;Clean the Data&lt;/h2&gt;

&lt;p&gt;In an ideal world, you’d be able to start creating the database and schema right away. Most of the time, there needs to be some degree of data formatting before doing that. A spreadsheet is a much less rigid format than SQL, so the data that is being imported into the SQLite database needs to constrain to what SQLite allows. While writing this article, I was working with a TSV (tab delimited) file that was exported from a report in a web application. &lt;strong&gt;Don&amp;#8217;t open the file in Excel. Use a plain text editor such as notepad instead&lt;/strong&gt;. Here are the steps I followed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Remove illegal characters and replace spaces with underscores in headers (i.e. “email address” needs to become “email_address”.&lt;/li&gt;
&lt;li&gt;Cut column headers out of the data file and put them in a separate text file. Replace the separators so they are &lt;em&gt;comma separated&lt;/em&gt; (you’ll use these later).&lt;/li&gt;
&lt;li&gt;All blank lines at the top and bottom of the file need to be removed.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;Install SQLite&lt;/h2&gt;

&lt;p&gt;Normally, I develop everything on a Windows computer, but for this task, I prefer the Linux command line. On my development machine, I have &lt;a href="http://www.vmware.com/products/player/overview.html"&gt;VMWare Player&lt;/a&gt; running the current release of &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; (11.10 at the time of this writing). It takes some time to download and perform the set up initially, but it is irreplaceable when you really need it. The best part is &lt;em&gt;everything you need is free&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;On Ubuntu, you need to first install SQLite3. To do this, run the following command from the terminal:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo apt-get install sqlite3
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Create the Database&lt;/h2&gt;

&lt;p&gt;Once sqlite3 is installed, type the following from the command line:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sqlite3 mydatabase
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This command will start sqlite and create a database called “mydatabase” if it doesn’t exist already. Then create the table by running:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;create table app_data(paste in column headers in CSV format from step #2 of “Clean the Data”);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This creates a table called “app_data”. You can confirm this by running &lt;code&gt;.tables&lt;/code&gt; from the terminal. There are a couple of things to note. First, even if you are working with a tab or pipe delimited file, the column headers have to be entered in CSV format in the &lt;code&gt;create table&lt;/code&gt; command. Second, anything that is a true SQL command needs to get terminated by a semicolon (;), while specific SQLite commands do not, just as you saw with the &lt;code&gt;.tables&lt;/code&gt; command. The SQLite-specific commands begin with a period.&lt;/p&gt;

&lt;p&gt;We are almost ready to import the contents of our file. First, set the separator. The default is pipe (|) delimited. I mentioned before that my file is tab delimited, so I need to run &lt;code&gt;.separator     \t&lt;/code&gt; to set it to the tab character. You can confirm the separator by running &lt;code&gt;.show&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="/image/1/610/0/uploads/sqlite3-linux-show.jpg" alt="Show SQLite settings" /&gt;&lt;/p&gt;

&lt;p&gt;Now we’re ready to do the import and can run:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;.import filename.csv app_data
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This imports the contents of “filename.csv” into the app_data table in the database.&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;SQLite is being distributed with many mobile applications and and is also used in desktop browsers for offline web applications. You can certainly create and populate a SQLite database using your favorite programming language. This is simply a quick alternative that is language agnostic.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=hW7OKELAqBc:uQCP3gofAYw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=hW7OKELAqBc:uQCP3gofAYw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=hW7OKELAqBc:uQCP3gofAYw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=hW7OKELAqBc:uQCP3gofAYw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=hW7OKELAqBc:uQCP3gofAYw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=hW7OKELAqBc:uQCP3gofAYw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=hW7OKELAqBc:uQCP3gofAYw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=hW7OKELAqBc:uQCP3gofAYw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/hW7OKELAqBc" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/create-a-sqlite3-database-from-a-spreadsheet/</feedburner:origLink></item>
    <item>
      <title>Add a jQuery UI Accordion Widget Area to a Wordpress Theme</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/XYQUQC0xLRQ/</link>
      <pubDate>Wed, 12 Oct 2011 00:30 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/add-a-jquery-ui-accordion-widget-area-to-a-wordpress-theme/</guid>
      <description>&lt;p&gt;&lt;a href="http://developer.yahoo.com/ypatterns/navigation/accordion.html"&gt;Yahoo describes the accordion&lt;/a&gt; as a design pattern “that provides access to a large number of links or other selectable items in a constrained space.” If you are displaying a large amount of information and want to group them into logical sections, the accordion design pattern can be quite useful. This pattern has even more application in mobile web applications.&lt;/p&gt;

&lt;p&gt;Today, we’ll look at how to create a jQuery UI-enabled accordion widget area for the popular Wordpress CMS.&lt;/p&gt;

&lt;h2&gt;Include jQuery and jQuery UI&lt;/h2&gt;

&lt;p&gt;There are a bunch of articles describing the proper way to &lt;a href="http://digwp.com/2009/06/use-google-hosted-javascript-libraries-still-the-right-way/"&gt;include jQuery in a Wordpress theme by using &lt;code&gt;wp_enqueue_script()&lt;/code&gt;&lt;/a&gt;. By adding a few lines to the theme’s &lt;code&gt;functions.php&lt;/code&gt; file, the JavaScript files are referenced and loaded in the &lt;code&gt;wp_head()&lt;/code&gt; portion of the Wordpress theme.&lt;/p&gt;

&lt;script src="https://gist.github.com/1276957.js?file=gistfile1.aw"&gt;&lt;/script&gt;

&lt;p&gt;If you’d rather load the JavaScript files in the footer for performance reasons, you can also use a parameter in the &lt;code&gt;wp_enqueue_script()&lt;/code&gt; function which will load the scripts in the &lt;code&gt;wp_footer()&lt;/code&gt;  function as described in the &lt;a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script"&gt;codex&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;Create the Sidebar Structure&lt;/h2&gt;

&lt;p&gt;In order to use jQuery UI’s accordion, the structure that the markup needs is very specific.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;div id="accordion"&amp;gt;
    &amp;lt;h3&amp;gt;&amp;lt;a href="#"&amp;gt;First header&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;
    &amp;lt;div&amp;gt;First content&amp;lt;/div&amp;gt;
    &amp;lt;h3&amp;gt;&amp;lt;a href="#"&amp;gt;Second header&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;
    &amp;lt;div&amp;gt;Second content&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The important thing to note is that Wordpress wraps all widgets in a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; tag, so you are halfway there already. The &lt;code&gt;&amp;lt;h3&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; tags can be added in the &lt;code&gt;functions.php&lt;/code&gt; file which will take care of the rest of the structure:&lt;/p&gt;

&lt;script src="https://gist.github.com/1277054.js?file=gistfile1.aw"&gt;&lt;/script&gt;

&lt;h2&gt;Load the Sidebar and Call it in the Wordpress Theme&lt;/h2&gt;

&lt;p&gt;Next, we want to load the widget area to a sidebar file such as &lt;code&gt;sidebar.php&lt;/code&gt;.&lt;/p&gt;

&lt;script src="https://gist.github.com/1277100.js?file=gistfile1.phtml"&gt;&lt;/script&gt;

&lt;p&gt;Then load the sidebar in the page template. The accordion is then displayed on the front-end of the WP theme by adding &lt;code&gt;&amp;lt;?php get_sidebar('accordion-widgets'); ?&amp;gt;&lt;/code&gt; in the appropriate file(s). Usually, this will be added to &lt;code&gt;page.php&lt;/code&gt; and/or &lt;code&gt;index.php&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;Final Steps&lt;/h2&gt;

&lt;p&gt;The last steps are to instantiate the accordion in the theme JavaScript file and then reference the script file and the jQuery UI CSS skin in the theme’s &lt;code&gt;header.php&lt;/code&gt; file with &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; tags respectively. The &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag should go after the &lt;code&gt;wp_head()&lt;/code&gt; function to make sure all necessary dependencies are loaded before the accordion is invoked. After that, you should have a functional accordion widget area. The only caveat with this technique is that all the widgets &lt;em&gt;need to have a title&lt;/em&gt; in the Wordpress backend, otherwise the markup required by jQuery UI’s accordion won’t be met.&lt;/p&gt;

&lt;p&gt;&lt;img src="/image/1/610/0/uploads/wp-jquery-accordion.jpg" alt="jQuery UI Accordion in Wordpress" /&gt;&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;With a few minutes of work, this useful feature can be added to any Wordpress theme. To see everything in action, you can &lt;a href="https://github.com/edgincvg/jQueryUI-Accordion-WP/zipball/master"&gt;download the example Wordpress child theme from Github&lt;/a&gt;. The child theme is based on the TwentyEleven theme that ships with WP3.2, so it is probably best to download the file and activate it on a local install for development or testing purposes.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=XYQUQC0xLRQ:kTEHWPw6Fu0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=XYQUQC0xLRQ:kTEHWPw6Fu0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=XYQUQC0xLRQ:kTEHWPw6Fu0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=XYQUQC0xLRQ:kTEHWPw6Fu0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=XYQUQC0xLRQ:kTEHWPw6Fu0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=XYQUQC0xLRQ:kTEHWPw6Fu0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=XYQUQC0xLRQ:kTEHWPw6Fu0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=XYQUQC0xLRQ:kTEHWPw6Fu0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/XYQUQC0xLRQ" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/add-a-jquery-ui-accordion-widget-area-to-a-wordpress-theme/</feedburner:origLink></item>
    <item>
      <title>Momentum CSS Updated: Rewritten and Re-released</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/kwNlpNjWRqE/</link>
      <pubDate>Tue, 13 Sep 2011 10:30 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/momentum-css-updated-rewritten-and-re-released/</guid>
      <description>&lt;p&gt;Back in 2008, I released a CSS helper file that had semantic names, helper classes, and common patterns that I identified in sites that I’ve developed. The initial release of Momentum was assembled for my own use, but I also hoped that others might find it useful or at least see the value in using standard naming conventions when working with a team of people.&lt;/p&gt;

&lt;p&gt;With the release of similar files such as &lt;a href="http://html5boilerplate.com/"&gt;HTML5 Boilerplate&lt;/a&gt; and &lt;a href="http://twitter.github.com/bootstrap/"&gt;Bootstrap&lt;/a&gt;, it inspired me to revisit Momentum to see what I could improve and how I could adapt it to the projects I work on currently.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/edgincvg/Momentum-CSS"&gt;Download from Github&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;New Objectives&lt;/h2&gt;

&lt;p&gt;One thing I was trying illustrate with the 2008 release was that when you work with a team of people, especially in an agency-type setting, it is important to adhere to a certain set of naming conventions.&lt;/p&gt;

&lt;p&gt;The result of not adhering to naming conventions can lead to “spaghetti maintenance.” What I mean by this is if you manage multiple sites and on one site the header is called &lt;code&gt;#branding&lt;/code&gt;, on another it is called &lt;code&gt;#header&lt;/code&gt;, and on another it is called #masthead, you introduce additional maintenance overhead if things are harder to find and also the potential for code bloat if the unused selectors are being left in the stylesheet.&lt;/p&gt;

&lt;p&gt;With the adoption of HTML5, this is less of a concern since there are now semantic element names that are part of the emerging standard. I still feel that this is a valid point, even though I left my naming conventions out of this release since I feel it should be up to the development team .&lt;/p&gt;

&lt;h3&gt;Agnostic and Open to Interpretation&lt;/h3&gt;

&lt;p&gt;The thing that was most important to me was being able to keep the file as abstract as possible so it has a lot of potential uses. Momentum is meant to be a lightweight CSS helper file, not a full-fledged grid framework. It makes no assumptions about server environment, site dimensions or JavaScript framework preference. The only thing Momentum includes that aside from the obvious CSS file are Sass files (scss) to extend the capabilities with mixins and allow colors to be assigned to variables.&lt;/p&gt;

&lt;p&gt;Personally, I use the Sass files and feel like Momentum is the most useful that way, but you don’t &lt;em&gt;have&lt;/em&gt; to use it. It works the same way if you compile the CSS file from SCSS or if you edit the CSS file directly. Sonspring just published a nice &lt;a href="http://sonspring.com/journal/sass-for-designers"&gt;overview of Sass&lt;/a&gt; that can help you get started if you’ve never used it before.&lt;/p&gt;

&lt;h2&gt;Usage&lt;/h2&gt;

&lt;p&gt;Using Momentum is simple. All that needs to happen is just link to the static CSS file in the head of your HTML document. During development I suggest leaving the file uncompressed and then minifying and at the time of deployment or on the server.&lt;/p&gt;

&lt;p&gt;If you are using the Sass files, make sure you are running &lt;code&gt;sass --watch&lt;/code&gt; from the directory your project directory or set &lt;a href="http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html"&gt;:load_paths&lt;/a&gt; in your Sass configuration so the imports work properly. In other words, if your files are in &lt;code&gt;C:\Users\[user name]\Documents\project-name&lt;/code&gt;, make sure you &lt;code&gt;cd&lt;/code&gt; into that directory as opposed to starting sass from your user directory.&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;This project is hosted on &lt;a href="https://github.com/edgincvg/Momentum-CSS"&gt;Github&lt;/a&gt;. If you find this useful, send me a note on &lt;a href="http://twitter.com/ethangardner"&gt;twitter&lt;/a&gt; or leave a comment below. I always like to know when my work is appreciated.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=kwNlpNjWRqE:tCGHWnq6j28:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=kwNlpNjWRqE:tCGHWnq6j28:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=kwNlpNjWRqE:tCGHWnq6j28:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=kwNlpNjWRqE:tCGHWnq6j28:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=kwNlpNjWRqE:tCGHWnq6j28:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=kwNlpNjWRqE:tCGHWnq6j28:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=kwNlpNjWRqE:tCGHWnq6j28:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=kwNlpNjWRqE:tCGHWnq6j28:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/kwNlpNjWRqE" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/momentum-css-updated-rewritten-and-re-released/</feedburner:origLink></item>
    <item>
      <title>Text Analysis and Natural Language Processing on the Semantic Web</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/oNu6zCkQz-8/</link>
      <pubDate>Mon, 29 Aug 2011 11:45 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/text-analysis-and-natural-language-processing-on-the-semantic-web/</guid>
      <description>&lt;p&gt;Although Natural Language Processing (NLP) has been around since the 1950s in the computer science world, more and more uses for this powerful technology are being uncovered every day. Search engines like Google use NLP as one of the ways they extract meaning from web pages, Microsoft has a whole team of people working on NLP projects, and a number of universities have dedicated major resources working on the advancement of NLP, but what about everyone else?&lt;/p&gt;

&lt;p&gt;NLP has many uses going beyond behemoth websites including uses for the enterprise, small business, and end users. In this article, we’ll be taking a look at some of these use cases and key players in the field.&lt;/p&gt;

&lt;h2&gt;What is Natural Language Processing?&lt;/h2&gt;

&lt;p&gt;At its core, Natural Language Processing involves a machine trying to extract meaning from real language by identifying mood and meaning, relationships, common patterns, and recognized terminology. Although the design of the algorithms is very advanced, the use cases don’t have to be.&lt;/p&gt;

&lt;p&gt;Some practical applications are very accessible to most web developers, and several of the vendors listed below have showcases of official or user-submitted projects that use their service. Projects include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content Tagging and Suggestion&lt;/li&gt;
&lt;li&gt;Social Media Analysis&lt;/li&gt;
&lt;li&gt;Data Visualization&lt;/li&gt;
&lt;li&gt;Geotagging&lt;/li&gt;
&lt;li&gt;Mood Analysis&lt;/li&gt;
&lt;li&gt;SEO&lt;/li&gt;
&lt;li&gt;Content Discovery and Sharing&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Get Started by Choosing a Service&lt;/h2&gt;

&lt;p&gt;Once you decide to use language processing, you need to work out the project requirements and the details of the implementation. Some services are better suited to certain tasks than others and all of the following are factors in the selection process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do you want a web service or command line tool? &lt;/li&gt;
&lt;li&gt;What are you processing: text, documents, web pages? &lt;/li&gt;
&lt;li&gt;What information do you want back from the analysis (i.e. keyword extraction, sentiment/mood analysis, etc)?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Web Services&lt;/h2&gt;

&lt;p&gt;For purposes of this article, I am outlining vendors that allow commercial use, offer a free subscription level, and also have premium subscriptions should your project move beyond a proof of concept.&lt;/p&gt;

&lt;h3&gt;Alchemy API&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.alchemyapi.com/"&gt;&lt;img src="/image/1/610/0/uploads/alchemyapi-com.jpg" alt="Alchemy API" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Diffbot&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.diffbot.com/"&gt;&lt;img src="/image/1/610/0/uploads/diffbot-com.jpg" alt="Diffbot" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Extractiv&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.extractiv.com/"&gt;&lt;img src="/image/1/610/0/uploads/extractiv-com.jpg" alt="Extractiv" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Open Calais&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.opencalais.com/"&gt;&lt;img src="/image/1/610/0/uploads/opencalais-com.jpg" alt="Open Calais" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Repustate&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.repustate.com/"&gt;&lt;img src="/image/1/610/0/uploads/repustate-com.jpg" alt="Repustate" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Saplo&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.saplo.com/"&gt;&lt;img src="/image/1/610/0/uploads/saplo-com.jpg" alt="Saplo" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Zemanta&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://developer.zemanta.com/"&gt;&lt;img src="/image/1/610/0/uploads/developer-zemanta-com.jpg" alt="Zemanta" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Command Line&lt;/h2&gt;

&lt;h3&gt;Natural Language Tool Kit (Python)&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://www.nltk.org/"&gt;&lt;img src="/image/1/610/0/uploads/nltk-org.jpg" alt=" Natural Language Tool Kit" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Topia (Python)&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://pypi.python.org/pypi/topia.termextract"&gt;&lt;img src="/image/1/610/0/uploads/topia-termextract.jpg" alt="Topia Term Extract" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;Natural Language Processing is an up-and-coming technology that people are discovering new uses for every day, and if you understand a scripting language, you should have no problem working with Natural Language Processing technology. Most of the vendors even offer Software Development Kits (SDK) in languages such as PHP, JavaScript, Java, and Python to help you get started using their product in your web development projects.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=oNu6zCkQz-8:-sojg8u0nWY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=oNu6zCkQz-8:-sojg8u0nWY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=oNu6zCkQz-8:-sojg8u0nWY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=oNu6zCkQz-8:-sojg8u0nWY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=oNu6zCkQz-8:-sojg8u0nWY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=oNu6zCkQz-8:-sojg8u0nWY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=oNu6zCkQz-8:-sojg8u0nWY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=oNu6zCkQz-8:-sojg8u0nWY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/oNu6zCkQz-8" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/text-analysis-and-natural-language-processing-on-the-semantic-web/</feedburner:origLink></item>
    <item>
      <title>Developing Mobile Web Sites the Easy Way</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/g0tshBXGTnk/</link>
      <pubDate>Fri, 29 Jul 2011 10:30 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/developing-mobile-web-sites-the-easy-way/</guid>
      <description>&lt;p&gt;Recently, I launched a redesign of my website. Just like any redesign I’ve ever tackled, there were several objectives: I switched Content Management Systems from Joomla! to &lt;a href="http://www.symphony-cms.com/"&gt;Symphony CMS&lt;/a&gt;, updated my portfolio, and used the opportunity to update the look and feel to incorporate more of my design style. Perhaps most notably, the site now features a mobile version.&lt;/p&gt;

&lt;p&gt;While everyone is starting to get a feel for how to approach their mobile strategy, I’d like to share how I approached it with this site so that others will benefit or be inspired to create their own mobile site.&lt;/p&gt;

&lt;h3&gt;The Logistics of a Mobile Web Approach&lt;/h3&gt;

&lt;p&gt;On the desktop version, my site features a large background image, decorative flourishes, and textures. At the time of this writing, the accepted best practice is to serve a mobile site that features fewer images, so the desktop version was not a suitable candidate to just use some CSS3 media queries to show the appropriate content to mobile devices. The reason is that media queries will actually just override the default image, after the image has been loaded, so the image will still be requested by the browser, even if it isn’t displayed. I also didn’t want to have the added complexity of serving the same content on multiple subdomains, so I opted to serve everything off of the same domain.&lt;/p&gt;

&lt;p&gt;In order to create a mobile version of my site, I am using the same markup for both pages, and loading deciding which CSS file to load based using a simple toggle in the footer of my site. All the toggle does is load the current page with a query string value, which in turn &lt;a href="http://php.net/manual/en/function.setcookie.php"&gt;sets a cookie&lt;/a&gt; stating whether the user chose to view the desktop or mobile site. &lt;strong&gt;I am not doing any type of user agent detection.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;Separating Site Styles for Mobile and Desktop&lt;/h3&gt;

&lt;p&gt;Once I decided how I was going to structure the mobile and desktop version, I had to put my plan into action. I am using the &lt;a href="https://github.com/symphonists/sessionmonster"&gt;Session Monster extension for Symphony&lt;/a&gt; which parses the query string and sets a cookie accordingly, but you could easily write something similar with any programming  language or find a comparable extension if you are using another CMS such as Wordpress or Joomla! The key is to make sure it uses a server-side language in case the user has JavaScript disabled.&lt;/p&gt;

&lt;p&gt;The actual site presentation works by loading a base stylesheet which contains a CSS reset, font declarations, colors, button styles, and anything else that can be applied globally. In the HTML template, there is a conditional statement that checks the cookie and serves a second stylesheet. The mobile stylesheet is pretty bare-bones to keep load times quick, and the desktop version is decked out with all the bells and whistles.&lt;/p&gt;

&lt;h3&gt;Performance Implications&lt;/h3&gt;

&lt;p&gt;I realize this technique requires a separate HTTP request, but I was aiming for a happy balance of maintainability and common-sense caching. The base stylesheet is under 25kb which means it will even be cached by the older iOS devices, and since the desktop version is served by default, the base stylesheet will already be cached when the user switches to the mobile version. If every bit of optimization counted, I could write a git hook to minify the CSS files before they are deployed or mininfy manually.&lt;/p&gt;

&lt;p&gt;I am serving the same JavaScript files for both desktop and web, using Google’s Ajax CDN for the MooTools library and then &lt;a href="http://www.ethangardner.com/articles/use-php-to-gzip-and-optimize-css-files/"&gt;gzipping the plugin files using PHP&lt;/a&gt;. I am also using HTML5 localstorage to cache site UI components for even more performance gains. While this might not be the final implementation of the performance tweaks, overall I’m pleased with the results.&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Mobile web traffic is on the rise and it isn’t going away any time soon. Although I haven’t adopted a “mobile first” school of thought just yet, it is definitely on my mind with all of the projects I’ve been working on. By using these techniques, you can see it isn’t too hard to introduce a mobile strategy to a new site or with a little work, retrofit an existing one with a mobile theme.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=g0tshBXGTnk:xxi_3sOJMvc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=g0tshBXGTnk:xxi_3sOJMvc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=g0tshBXGTnk:xxi_3sOJMvc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=g0tshBXGTnk:xxi_3sOJMvc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=g0tshBXGTnk:xxi_3sOJMvc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=g0tshBXGTnk:xxi_3sOJMvc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=g0tshBXGTnk:xxi_3sOJMvc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=g0tshBXGTnk:xxi_3sOJMvc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/g0tshBXGTnk" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/developing-mobile-web-sites-the-easy-way/</feedburner:origLink></item>
    <item>
      <title>Create a Twitter Analytics Dashboard with YQL and PHP</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/GNYK_QscAgM/</link>
      <pubDate>Tue, 29 Jun 2010 00:00 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/create-a-twitter-analytics-dashboard-with-yql-and-php/</guid>
      <description>&lt;p&gt;There are many reasons to monitor the performance of multiple Twitter accounts. If you maintain more than one site or blog, chances are you have multiple Twitter accounts that correspond to each contributing author, site, or product. Perhaps you want to keep tabs on how your account stacks up against your competitors. Having a birds’ eye view of how each account is performing can be a great time-saver, but unfortunately there is no easy way to keep track of how your accounts are engaging others.&lt;/p&gt;

&lt;p&gt;Today, I’ll show you an easy way to create your own “dashboard” tool to get an at-a-glance view of multiple Twitter accounts using PHP and the &lt;a href="http://developer.yahoo.com/yql/"&gt;Yahoo Query Language (YQL)&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;What is YQL?&lt;/h3&gt;

&lt;p&gt;YQL is a tool from Yahoo that can create an &lt;abbr title="Application Programming Interface"&gt;API&lt;/abbr&gt; from virtually anything on the web. The &lt;a href="http://developer.yahoo.com/yql/console/"&gt;YQL Console&lt;/a&gt; allows a developer to retrieve data from Yahoo’s web services or any of the user-contributed “community tables” for a growing number of popular sites including Yelp, Facebook, and, in our case, Twitter. The best part of YQL is that the results of each query are returned in &lt;abbr title="eXtensible Markup Language"&gt;XML&lt;/abbr&gt; or &lt;abbr title="JavaScript Object Notation"&gt;JSON&lt;/abbr&gt;, so web developers can use their programming language of choice to develop applications.&lt;/p&gt;

&lt;p&gt;There are a number of resources available for learning YQL. The best tutorial I have found on YQL in order to get you started is a live demo from Yahoo Developer Evangelist, &lt;a href="http://twitter.com/codepo8"&gt;Christian Heilmann&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;object width="592" height="407"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=8075850&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=8075850&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="592" height="407"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;

&lt;h3&gt;Getting the Twitter Information&lt;/h3&gt;

&lt;p&gt;The data was generated by using a combination of the &lt;code&gt;twitter.user.profile&lt;/code&gt; community table and &lt;code&gt;query.multi&lt;/code&gt; to compile the results for the numerous Twitter accounts into one request. The URL of the JSON result was then reverse engineered, spliced, and then reassembled using PHP. Each request &lt;em&gt;could have been hard coded&lt;/em&gt; instead of looping through an array, but ultimately adding the extra step to include the array makes the code more readable and maintainable. Here is the relevant code used to produce the sample.&lt;/p&gt;

&lt;script src="https://gist.github.com/1052515.js?file=yql-twitter-dashboard.php"&gt;&lt;/script&gt;

&lt;p&gt;&lt;a class="btn" href="/demo/SocialMedia/"&gt;Demo&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Where Do We Go From Here&lt;/h3&gt;

&lt;p&gt;A touch of jQuery was added using the fantastic &lt;a href="http://tablesorter.com/docs/"&gt;tablesorter&lt;/a&gt; plugin to allow users to sort by number of followers/following. One suggestion would be to create a form to accept account names submitted by a user to allow for event more flexibility, but that is beyond the scope of this article. Other possibilities include connecting this information to a database so historical data with date ranges can be collected over time, adding an export utility to download a CSV file of the data, or using a chart API to provide more visual data.&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;The best tools solve problems and APIs are a great way to leverage data from other sources. Using YQL gives developers access to 800 data tables from some of the most popular and useful sites on the internet. YQL is effective because it allows developers to rapidly create solutions using their programming language of choice and has the potential to save a tremendous amount of time.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=GNYK_QscAgM:eWR8MvjrZZU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=GNYK_QscAgM:eWR8MvjrZZU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=GNYK_QscAgM:eWR8MvjrZZU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=GNYK_QscAgM:eWR8MvjrZZU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=GNYK_QscAgM:eWR8MvjrZZU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=GNYK_QscAgM:eWR8MvjrZZU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=GNYK_QscAgM:eWR8MvjrZZU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=GNYK_QscAgM:eWR8MvjrZZU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/GNYK_QscAgM" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/create-a-twitter-analytics-dashboard-with-yql-and-php/</feedburner:origLink></item>
    <item>
      <title>Design a Web-Friendly Restaurant Menu with XSL:Part One</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/bWC80T7GLfM/</link>
      <pubDate>Wed, 07 Apr 2010 00:00 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/design-a-web-friendly-restaurant-menu-with-xsl-part-one/</guid>
      <description>&lt;p&gt;With XML being published by nearly all dynamic websites, social media applications, APIs, and its many uses in enterprise-level content delivery systems, now is a great time to learn basic XSL. At its core, the eXtensible Stylesheet Language (XSL) provides a means of formatting XML documents to display in a different and often more practical fashion.&lt;/p&gt;

&lt;p&gt;In the last post, I gave an overview of why you should use XSL. This is first in a series of three hands-on tutorials where we’ll build on that knowledge and start using XSL in conjunction with XML to transform the result into HTML to display on a restaurant web site.&lt;/p&gt;

&lt;p&gt;&lt;a href="/demo/restaurant-menu/menu.xml"&gt;&lt;img src="/demo/restaurant-menu/menu-demo.jpg" alt="Restaurant Menu Web Design" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Start with XML&lt;/h3&gt;

&lt;p&gt;The first step of using XSL is to get the XML so you know how the content is structured. This is like the process of using CSS to format HTML. Without knowing how the HTML is structured, it would be very difficult, if not impossible, to write efficient CSS.&lt;/p&gt;

&lt;p&gt;For illustration purposes, we will write our restaurant menu in XML for this tutorial, but often you’ll be using XML that has been generated by a RSS feed or Content Management System. If you are authoring your own XML, think about the structure that you need to lay things out logically.&lt;/p&gt;

&lt;h3&gt;Why use XML?&lt;/h3&gt;

&lt;p&gt;Don’t get me wrong, I love &lt;abbr title="JavaScript Object Notation"&gt;JSON&lt;/abbr&gt;, but XML is still very prevalent and readily available from many sources. Sometimes it is the only format available. A restaurant menu, like the one we are creating in this tutorial, is a great application for XML because the data that is stored isn’t sensitive information and has a uniform structure. Our menu will be structured as follows:&lt;/p&gt;

&lt;p&gt;Once you have the menu items in this format, it is time to make the XML display in a way that won’t scare off the average customer. We’ll use some simple XSL functions to make it happen. First, we need to insert a link in our XML file to load the XSL. This works very similarly to inserting an external stylesheet with the link tag in HTML. Here is what our XML looks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;menu&lt;/em&gt;—this is the root of the document also known as the document element. This is the equivalent to the html tag for a web page.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;section&lt;/em&gt;—our menu will contain 4 different categories of item (Appetizers, Soup and Salads, Main Courses, and Desserts). The section name will be displayed as an attrubute&lt;/li&gt;
&lt;li&gt;&lt;em&gt;summary&lt;/em&gt;—descriptive copy for the section.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;item&lt;/em&gt;—this is a container for the individual menu items&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;title&lt;/em&gt;—this is the name of the menu item (i.e. “Pork Tenderloin”)&lt;/li&gt;
&lt;li&gt;&lt;em&gt;description&lt;/em&gt;—the details of the menu item&lt;/li&gt;
&lt;li&gt;&lt;em&gt;price&lt;/em&gt;—the cost of the menu item&lt;/li&gt;
&lt;li&gt;&lt;em&gt;img&lt;/em&gt;—an optional image for the menu item&lt;/li&gt;
&lt;li&gt;&lt;em&gt;options&lt;/em&gt;—upgrades or optional toppings. Examples frequently include add cheese, bacon, chicken, etc.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;category&lt;/em&gt;—additional information such as low-fat item, heart-healthy, gluten-free, etc&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;

&lt;script src="https://gist.github.com/1052521.js?file=xsl-restaurant-menu-1.xml"&gt;&lt;/script&gt;

&lt;h3&gt;Formatting the XML with XSL&lt;/h3&gt;

&lt;p&gt;For the next part, we style the XML with XSL. The way I prefer to work is to keep the XML open in a separate tab in my code editor so I can see what I need to transform against. The rest of the tutorial will deal directly with the XSL file and include a ton comments so you can follow along. The comments pertain to the line immediately preceding it in the code. We’ll go through the code block by block. Our first step is to insert the XML declaration and the xsl:stylesheet code.&lt;/p&gt;

&lt;script src="https://gist.github.com/1052528.js?file=xsl-restaurant-menu-2.xsl"&gt;&lt;/script&gt;

&lt;p&gt;Now, we’ll create the template that controls the markup for the menu section and section summary. Notice that this is called by the self-closing tag that was pointed out in the previous code block.&lt;/p&gt;

&lt;script src="https://gist.github.com/1052532.js?file=xsl-restaurant-menu-3.xsl"&gt;&lt;/script&gt;

&lt;p&gt;Lastly, we need to create the template that is being called to create the actual markup for the individual menu items and close our stylesheet tag that was opened on the second line of the file.&lt;/p&gt;

&lt;script src="https://gist.github.com/1052537.js?file=xsl-restaurant-menu-4.xsl"&gt;&lt;/script&gt;

&lt;p&gt;&lt;a href="/demo/restaurant-menu/menu.xml" class="btn"&gt;Demo&lt;/a&gt;
&lt;a href="/demo/restaurant-menu/menu-part-1.zip" class="btn"&gt;Download&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Hopefully this hands-on introduction was gentle enough to get started with XSL. Right now, this is rendering as XML that is formatted as HTML and styled with CSS. If additional parsing is needed, you can always load the XML and XSL files with nearly any pre-processed language and render it to HTML on the server.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=bWC80T7GLfM:ZOJiTUteV_4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=bWC80T7GLfM:ZOJiTUteV_4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=bWC80T7GLfM:ZOJiTUteV_4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=bWC80T7GLfM:ZOJiTUteV_4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=bWC80T7GLfM:ZOJiTUteV_4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=bWC80T7GLfM:ZOJiTUteV_4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=bWC80T7GLfM:ZOJiTUteV_4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=bWC80T7GLfM:ZOJiTUteV_4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/bWC80T7GLfM" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/design-a-web-friendly-restaurant-menu-with-xsl-part-one/</feedburner:origLink></item>
    <item>
      <title>Using XSLT in Web Design: A Plain-Language Overview</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/tIRapDf69OA/</link>
      <pubDate>Wed, 23 Sep 2009 00:00 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/using-xslt-in-web-design-a-plain-language-overview/</guid>
      <description>&lt;p&gt;Extensible Stylesheet Language (XSL) is a powerful technology often treated like a misfit by the design community. The fact is XSL isn’t that difficult to learn, makes websites faster, offers many ways to format content, and makes working 
with XML data easy.&lt;/p&gt;

&lt;p&gt;Many XSL tutorials are either too technical, make too many assumptions about prior knowledge of the technology, or don’t have an obvious practical application. In this introduction, I hope to change that by presenting a plain-language overview of XSL, how it differs from CSS, and lay the groundwork for a 3-part tutorial where we’ll use XSL in a real-world situation.&lt;/p&gt;

&lt;h3&gt;What is XSL?&lt;/h3&gt;

&lt;p&gt;XSL is a set of three different languages used to format XML.&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;XSL Transformations (XSLT)&lt;/dt&gt;
&lt;dd&gt;Contains different rules for formatting XML. XSLT is the most important part of XSL.&lt;/dd&gt;
&lt;dt&gt;XML Path Language (XPath)&lt;/dt&gt; 
&lt;dd&gt;Selects different items (nodes) in the XML document to be styled by XSLT. XPath selectors are like a souped-up version of classes and ids in CSS files.&lt;/dd&gt;
&lt;dt&gt;XSL-Formatting Objects (XSL-FO)&lt;/dt&gt; 
&lt;dd&gt;Formats XML data for display in a variety of different media. XSL-FO makes it possible to take the same XML data and create one version for print, one for screen, or even turn the XML into a document format such as PDF.&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;For this series of articles, we’ll only be dealing with XSLT and XPath, and the tutorials will be geared towards creating a website as opposed to making a desktop widget or other application.&lt;/p&gt;

&lt;h4&gt;Similarities to CSS&lt;/h4&gt;

&lt;p&gt;In order to better understand XSL, it is helpful to compare it to a different kind of stylesheet which you may already know, Cascading Style Sheets. XSL and CSS have several traits in common.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Both CSS and XSL require a markup document in order to do anything.&lt;/li&gt;
&lt;li&gt;Both use selectors to apply formatting.&lt;/li&gt;
&lt;li&gt;It is possible to “call” or import another document from inside a stylesheet.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Differences from CSS&lt;/h4&gt;

&lt;p&gt;Aside from the similarities listed above, CSS and XSL are quite different.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CSS is for presentational formatting. XSL is for data formatting.&lt;/li&gt;
&lt;li&gt;XSL is less forgiving. If there are errors, no output will be rendered.&lt;/li&gt;
&lt;li&gt;XSL selectors are much more robust. Variables and functions are supported like a traditional programming language.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Why Use XSL?&lt;/h3&gt;

&lt;p&gt;The best roundup of XSL and the reason I became interested in XSL is a SXSW 2007 presentation, “Why XSLT is Sexy,” (&lt;a title="audio" href="http://audio.sxsw.com/podcast/interactive/panel/2007/SXSW07.INT.20070310.WhyXSLTisSexy.mp3"&gt;audio&lt;/a&gt;, &lt;a title="slides" href="http://www.commoner.com/lsimon/SXSW2007-XSLT/"&gt;slides&lt;/a&gt;). In the presentation, they detail many reasons to use XSL, and I have listed a few of the key points with some of my own findings.&lt;/p&gt;

&lt;h4&gt;Freedom of data&lt;/h4&gt;

&lt;p&gt;Virtually every programming language supports XSL including PHP, Java, C#. This gives developers the freedom to work in their programming language of choice. Transformations can be applied either on the server or on the client since all modern browsers support XSL. Best of all, data formatting can easily be modified or re-purposed.&lt;/p&gt;

&lt;h4&gt;It is Extremely Fast&lt;/h4&gt;

&lt;p&gt;XSLT uses the XML parser which is much faster than the parser used for HTML (SGML). According to the previously mentioned SXSW presentation, the XML parser is up to 20-times faster than the SGML variety. XML won’t render if it is not properly formed, so the XML parser doesn’t need to accommodate mismatched or unclosed tags like HTML can have.&lt;/p&gt;

&lt;h4&gt;Makes Working with APIs Easy&lt;/h4&gt;

&lt;p&gt;The two most common APIs for web services, &lt;abbr title="REpresentational State Transfer"&gt;REST&lt;/abbr&gt; and &lt;abbr title="Simple Object Access Protocol"&gt;SOAP&lt;/abbr&gt;, are both XML formats. Using XSL creates the possibility of making your own applications and takes the sting out of displaying data received from popular web services.&lt;/p&gt;

&lt;h4&gt;It Will Be an Integral Part of the Semantic Web&lt;/h4&gt;

&lt;p&gt;The semantic web features additional information about website content embedded in the code. The most common example is the meta keywords and description, but with the continued development of &lt;a title="microformats" href="http://microformats.org/"&gt;microformats&lt;/a&gt;
and &lt;a title="RDFa" href="http://rdfa.info/"&gt;RDFa&lt;/a&gt;, the potential to include semantic metadata goes much deeper. With XSL, it is possible to extract this semantic data and use it in other ways like adding someone’s contact information to your address book.&lt;/p&gt;

&lt;p&gt;Extended metadata is becoming increasingly important since key players like Google and &lt;a title="Yahoo are including" href="http://www.ysearchblog.com/2009/08/28/see-more-searchmonkey/"&gt;Yahoo are including&lt;/a&gt;
&lt;a title="richer information in their search results" href="http://www.seomoz.org/blog/google-quietly-pushing-more-links-data-in-snippets"&gt;richer information in their search results&lt;/a&gt; and much of this data is fueled by RDFa or microformats. Using XSL allows a consistent way to add metadata to your content.&lt;/p&gt;

&lt;h3&gt;Learning XSL&lt;/h3&gt;

&lt;p&gt;The easiest way to learn XSL is to use it in real-world situation. In the next 3 posts, I’ll be creating restaurant menu with XML, render it with XSL and PHP, and enhancing the interface with MooTools. Here is a brief rundown of the items we will cover:&lt;/p&gt;

&lt;h4&gt;Part I – Creating the XML and XSL&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Create an XML file that will be appropriate for a restaurant menu&lt;/li&gt;
&lt;li&gt;XSL function overview&lt;/li&gt;
&lt;li&gt;Apply Basic XSL to render HTML&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Part II – Format&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Structure the XSL so it will be easily maintainable in the future.&lt;/li&gt;
&lt;li&gt;Load XML and XSL using PHP.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Part III – Enhance&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Add semantic markup via XSL using the GoodRelations RDF vocabulary.&lt;/li&gt;
&lt;li&gt;Enhance the interface with Mootools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If this overview piqued your interest on the subject of XSL, I hope you’ll consider joining me for the next steps where you’ll be able to see this powerful technology in action.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=tIRapDf69OA:m_RtZAoew3A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=tIRapDf69OA:m_RtZAoew3A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=tIRapDf69OA:m_RtZAoew3A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=tIRapDf69OA:m_RtZAoew3A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=tIRapDf69OA:m_RtZAoew3A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=tIRapDf69OA:m_RtZAoew3A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=tIRapDf69OA:m_RtZAoew3A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=tIRapDf69OA:m_RtZAoew3A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/tIRapDf69OA" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/using-xslt-in-web-design-a-plain-language-overview/</feedburner:origLink></item>
    <item>
      <title>Getting Inspiration from Art and the Outdoors</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/ZprYo45em4o/</link>
      <pubDate>Sun, 09 Aug 2009 00:00 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/getting-inspiration-from-art-and-the-outdoors/</guid>
      <description>&lt;p&gt;To keep creative work from becoming homogenized, it is important to have
discovery and research as part of the design process for each project. Generating fresh ideas can be challenging when you design all day, but as designers, we need to keep innovating to overcome the client’s marketing challenges.&lt;/p&gt;

&lt;p&gt;For many people the first and only stop for design ideas are CSS galleries, but stepping outside the norm can deliver unique and original design results. In this post, we’ll look at how art and life experience can be adapted to produce two unique web design elements with a nature theme.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/art-flower.jpg" alt="Using outdoor themes as inspiration in web design" class="caption" title="This flower was used to produce an important element of my redesign" /&gt;&lt;/p&gt;

&lt;h3&gt;Working with Art as Inspiration&lt;/h3&gt;

&lt;p&gt;Art is the proverbial “road less traveled” compared to CSS Design galleries that are commonly used by designers. For some, it might be hard to translate a loosely structured piece of art into a polished design, but &lt;strong&gt;using art is an exercise to develop a new way of thinking&lt;/strong&gt; and add another technique to your arsenal.&lt;/p&gt;

&lt;h4&gt;How Art Can Be Translated to Web Design&lt;/h4&gt;

&lt;p&gt;Artists are masters at directing attention to the intended subject, and you should take advantage of their understanding of composition by thinking about how similar techniques might be applied on the web. In web design, the intended subject is the call-to-action, which conveys the purpose of the page. The call-to-action is usually a registration button, contact button, or the add to cart and checkout buttons of an E-commerce site.&lt;/p&gt;

&lt;p&gt;The following &lt;a title="chiaroscuro" href="http://en.wikipedia.org/wiki/Chiaroscuro"&gt;chiaroscuro&lt;/a&gt; painting by Gerrit Van Honthorst uses a high amount of contrast between light and dark areas. The light source and the vivid colors of the woman in blue make her the
focal point, even though she is in the background of the painting.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/art-chiaroscuro.jpg" alt="Chiarascuro painting used as design inspiration" class="caption" title="The Matchmaker by Gerrit Van Honthorst" /&gt;&lt;/p&gt;

&lt;p&gt;In order to translate this technique to a web element, a color photo was converted to black and white and adjusted to achieve high contrast. A blur was applied to the trees and carefully masked, while selective color helps draw the viewer’s
eye to the bright orange button, despite the text “Save the planet” being much set in larger type.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/art-pine-trees-before.jpg" alt="Pine trees before manipulation" class="caption" title="This image doesn't have the contrast needed to focus attention on the call to action" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/art-pine-trees-after.jpg" alt="Pine trees after manipulation" class="caption" title="Contrast and selective color help focus attention on the call to action" /&gt;&lt;/p&gt;

&lt;h3&gt;Four Tips for Working with Art&lt;/h3&gt;

&lt;h4&gt;Do Your Homework on the Client&lt;/h4&gt;

&lt;p&gt;Designing is visual communication, and if you don’t ask the right questions, you’ll never know what the client wants to communicate to their customers. Feedback from the client should be the fuel for making design decisions based on the type of inspiration you choose.&lt;/p&gt;

&lt;h4&gt;Choose Appropriate Works&lt;/h4&gt;

&lt;p&gt;Relate the mood of a piece to the client’s desired look and choose works that are appropriate to their brand. The best part about art there is something to suit every taste from conservative, classic, and elegant to edgy, bold, and sheik.&lt;/p&gt;

&lt;h4&gt;Look at Different Mediums and Sources&lt;/h4&gt;

&lt;p&gt;Evaluating different forms of art will help you to develop your own style. Don’t limit yourself to one style, artist, or media. Be diverse. Paintings, photography, sculpture, fashion, cinematography, tattoos and music can get the creative juices flowing.&lt;/p&gt;

&lt;h4&gt;Keeping it Organized&lt;/h4&gt;

&lt;p&gt;Organizing your inspiration is the key to working efficiently. For me, delicious is the hub for all my bookmarks, including inspiration. In order to quickly browse through the bookmarks, I created a &lt;a title="Delicious thumbnails with tag filtering" href="http://pipes.yahoo.com/pipes/pipe.info?_id=b9a966b967e8c01b35cf291fbba4c79a"&gt;Yahoo Pipe to make thumbnails of links&lt;/a&gt; based on the &lt;a title="thumbnail your delicious links" href="http://pipes.yahoo.com/pipes/pipe.info?_id=6e92ad7509eb86c79f2bebb531bdf790"&gt;thumbnail your delicious links&lt;/a&gt; pipe.&lt;/p&gt;

&lt;h3&gt;Do Something to Ignite Passion&lt;/h3&gt;

&lt;p&gt;Staring at a screen can take its toll and we all need a break from time to time. Yes, I am suggesting that you get away from the computer and do something memorable. You do have hobbies and interests away from the computer, right?&lt;/p&gt;

&lt;h4&gt;How Life Experience Can Be Translated to Web Design&lt;/h4&gt;

&lt;p&gt;The skillset of a designer is pretty standard. On the other hand, life experiences and personal interests are completely individualized and can be used to set your work apart. For me, fishing in a stream somewhere, playing music, or experiencing other cultures through travel ignites a passion and gives me the energy to do my best work.&lt;/p&gt;

&lt;h4&gt;How Personal Experience Can Be Translated to Web Design&lt;/h4&gt;

&lt;p&gt;I have a profound interest in the outdoors, adventure travel, and conservation. While at the the Cincinnati Zoo, I stopped by the Mexican Wolf exhibit, one of my favorite animals at the zoo, to take a picture.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/art-mexican-wolves.jpg" alt="Nature used as reference for web design" class="caption" title="Photo of Mexican wolves used as design inspiration" /&gt;&lt;/p&gt;

&lt;p&gt;When I took the picture, I was about 8-feet away from these wonderful animals and had been observing them for 20 minutes. I used this experience to design another “save the planet’ banner. I kept the wolf in the illustration to further illustrate the theme and to stay true to my experience.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/art-wolf-moon.jpg" alt="Nature used as reference for web design" class="caption" title="The resulting graphic using nature as inspiration" /&gt;&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;As you can tell from the two examples produced as part of this post, the type of inspiration we seek as designers can greatly influence the outcome the final product. Supplementing inspiration gained from design galleries with art, life experience, and nature can help refine ideas into something unique and original. While it can be more challenging to translate abstract ideas into web design, it is always worth the extra effort to design something that you are proud of and will help your client achieve their goals.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=ZprYo45em4o:PMuAfURXvIU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=ZprYo45em4o:PMuAfURXvIU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=ZprYo45em4o:PMuAfURXvIU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=ZprYo45em4o:PMuAfURXvIU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=ZprYo45em4o:PMuAfURXvIU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=ZprYo45em4o:PMuAfURXvIU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=ZprYo45em4o:PMuAfURXvIU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=ZprYo45em4o:PMuAfURXvIU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/ZprYo45em4o" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/getting-inspiration-from-art-and-the-outdoors/</feedburner:origLink></item>
    <item>
      <title>Wolfram Alpha for Web Designers</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/_LgbeGcq2p8/</link>
      <pubDate>Mon, 22 Jun 2009 00:00 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/wolfram-alpha-for-web-designers/</guid>
      <description>&lt;p&gt;With Twitter, Google Wave, and Opera Unite, there has been a lot of recent talk regarding the future of the web. You may have also heard of &lt;a href="http://www.wolframalpha.com/"&gt;Wolfram Alpha&lt;/a&gt;, a non-traditional search engine capable of complex calculations and conversions, as part of the “future” discussion.&lt;/p&gt;

&lt;p&gt;With all the hype, I decided to check Wolfram Alpha out myself. Initially, I struggled to find a use for the data, but as I spent more time exploring the possibilities, I came across some useful ways it can be used for producing web sites and general business purposes.&lt;/p&gt;

&lt;h3&gt;Design &amp;amp; Development Uses&lt;/h3&gt;

&lt;p&gt;There are two ways that I can see using Wolfram Alpha. The first is to use its features to help develop websites, produce design materials, and build applications.&lt;/p&gt;

&lt;h4&gt;Working with Color&lt;/h4&gt;

&lt;p&gt;I have written about &lt;a href="/blog/27-productivity/83-photoshop-color-workflow"&gt;generating color schemes from scratch&lt;/a&gt; in a previous post, but Wolfram Alpha tells you more about a color than you’d ever want to know. Do a simple search for a color in virtually any format, and you are presented with a color swatch, the nearest named color values, and a table of possible color schemes.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www09.wolframalpha.com/input/?i=%23fe0"&gt;
&lt;img src="/images/stories/wolfram-alpha-color.png" alt="Wolfram Alpha Color Search" /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;HTML Entity Look-up&lt;/h4&gt;

&lt;p&gt;We all know special characters have to be encoded to maintain valid markup, and Wolfram Alpha can help you. While Left Logic still has the &lt;a href="http://leftlogic.com/lounge/articles/entity-lookup/"&gt;best HTML entity look-up&lt;/a&gt; I have used, it is been down on multiple occasions.
The search for HTML entities works both ways on Wolfram Alpha. You can either enter the character name such as “ampersand” or its corresponding encoded value if you want to do a reverse look-up.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www09.wolframalpha.com/input/?i=ampersand"&gt;
&lt;img src="/images/stories/wolfram-alpha-entity.png" alt="Wolfram Alpha HTML Entity" /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Calculate Download Time&lt;/h4&gt;

&lt;p&gt;Unfortunately, not everyone has a high-speed internet connection. As developers we have a responsibility to keep site speed manageable for our users. Simply input the page size with the connection speed, and the numbers are crunched for you.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www09.wolframalpha.com/input/?i=data+transfer+time&amp;amp;a=*FS-_**DataSpeed.T-.*DataSpeed.data-.*DataSpeed.R--&amp;amp;f2=200+KB&amp;amp;x=0&amp;amp;y=0&amp;amp;f=DataSpeed.data_200+KB&amp;amp;f3=56+kb%2Fs&amp;amp;f=DataSpeed.R_56+kb%2Fs&amp;amp;a=*FVarOpt.1-_***DataSpeed.R--.***DataSpeed.upR--.**DataSpeed.downR---.*--"&gt;
&lt;img src="/images/stories/wolfram-alpha-data.png" alt="Wolfram Alpha Download Speed" /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;Domain Information and Geolocation&lt;/h4&gt;

&lt;p&gt;A search on a domain name turns up the registering host’s name and location, approximate traffic numbers and ranking, page size, and an interesting visualization of the HTML hierarchy for the page. The visualization has a table with color-coded labels, but unfortunately, the image is so small you can’t really distinguish the colors.&lt;/p&gt;

&lt;p&gt;Perhaps more useful, is the ability to retrieve the geolocation of an IP address. This has a range of possibilities for building web apps using the API.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www09.wolframalpha.com/input/?i=wolframalpha.com"&gt;
&lt;img src="/images/stories/wolfram-alpha-domain.png" alt="Wolfram Alpha Domain Info" /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;The API&lt;/h4&gt;

&lt;p&gt;Wolfram Alpha also includes a &lt;a href="http://www.wolframalpha.com/WolframAlphaAPI.pdf"&gt;well-documented &lt;abbr title="REpresentational State Transfer"&gt;REST&lt;/abbr&gt; &lt;abbr title="Application Programming Interface"&gt;API&lt;/abbr&gt;&lt;/a&gt; for developers. The documentation is an easy read since it is only a 12-page PDF. The search results are delivered in &lt;abbr title="eXtensible Markup Language"&gt;XML&lt;/abbr&gt; format which can easily be manipulated to display as HTML.&lt;/p&gt;

&lt;p&gt;While I don’t think it will be commonplace to implement on an average website, the API certainly has application for specialized uses for science and computation since it harnesses the powerful Mathematica engine.&lt;/p&gt;

&lt;h4&gt;Paper Sizes&lt;/h4&gt;

&lt;p&gt;In addition to the web related uses, Wolfram Alpha can also be useful for print work by giving the dimensions of multiple paper formats as a quick reference.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www06.wolframalpha.com/input/?i=business+card&amp;amp;a=*DPClash.DisplayFormatE.business+card-_*PaperUSbusinesscard-"&gt;
&lt;img src="/images/stories/wolfram-alpha-paper.png" alt="Wolfram Alpha Paper Size" /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;General Business Uses&lt;/h3&gt;

&lt;p&gt;The second way Wolfram Alpha can be used in day-to-day work is for more general business purposes.&lt;/p&gt;

&lt;h4&gt;Time and Date&lt;/h4&gt;

&lt;p&gt;Most modern businesses have clients in a different state, territory, or country. Need to find out what time it is in your client’s location? Simply type in two cities and you’re given the time in each city, along with the distance, air travel time, and populations of each city.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www09.wolframalpha.com/input/?i=cincinnati+to+denver"&gt;
&lt;img src="/images/stories/wolfram-alpha-time.png" alt="Wolfram Alpha Time and Distance" /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wolfram Alpha also includes a range of calendar features that you can use for invoicing purposes or general knowledge such as calculating the date 30 days from now or checking the dates of national holidays.&lt;/p&gt;

&lt;h4&gt;Conversions and Dimensions&lt;/h4&gt;

&lt;p&gt;Just about any type of conversion you want can be computed with Wolfram Alpha. Need to know how to convert pounds to kilograms for international shipments? No problem. Wolfram Alpha can also do currency conversions to help you declare a value for the shipment as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www06.wolframalpha.com/input/?i=100+usd+to+jpy"&gt;
&lt;img src="/images/stories/wolfram-alpha-conversion.png" alt="Wolfram Alpha Conversion" /&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;What Will Wolfram Alpha Contribute to Search?&lt;/h3&gt;

&lt;p&gt;Experimental search technologies are continually hitting the market or in development. Everything from semantic web, real-time search, and social search is being discussed right now. I don’t think Wolfram Alpha will ever replace Google, but if it succeeds, I think other search engines will be pushed to include a higher level of visualization on results pages and explore the market for niche search.&lt;/p&gt;

&lt;p&gt;The true power of this alternative search engine is in its computational ability and attractive results. This article only scratches the surface of what can be accomplished with  Wolfram Alpha, and I have discovered the more time you spend with it, the more useful it is.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=_LgbeGcq2p8:SgbnGYaDDAE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=_LgbeGcq2p8:SgbnGYaDDAE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=_LgbeGcq2p8:SgbnGYaDDAE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=_LgbeGcq2p8:SgbnGYaDDAE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=_LgbeGcq2p8:SgbnGYaDDAE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=_LgbeGcq2p8:SgbnGYaDDAE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=_LgbeGcq2p8:SgbnGYaDDAE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=_LgbeGcq2p8:SgbnGYaDDAE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/_LgbeGcq2p8" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/wolfram-alpha-for-web-designers/</feedburner:origLink></item>
    <item>
      <title>Use PHP to Gzip and Optimize CSS Files</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/00fhSIo8OyU/</link>
      <pubDate>Thu, 14 May 2009 00:00 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/use-php-to-gzip-and-optimize-css-files/</guid>
      <description>&lt;p&gt;If you have been following the &lt;a title="best practices for website optimization" href="http://developer.yahoo.com/performance/"&gt;best practices for website optimization&lt;/a&gt; published by Yahoo’s Exceptional Performance team, you know the importance that using gzip to compress files and making fewer HTTP requests can have on website speed.&lt;/p&gt;

&lt;p&gt;While doing some research, I came across a number of powerful techniques that uses PHP to optimize CSS files. By combining these techniques, I was able to achieve some impressive enhancements resulting in a &lt;strong&gt;71% reduction in the size of my CSS files&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;The Technique&lt;/h3&gt;

&lt;p&gt;It’s a combination of 3 techniques actually. All the techniques are covered in more detail over at &lt;a title="Cats Who Code" href="http://www.catswhocode.com/blog/3-ways-to-compress-css-files-using-php"&gt;Cats Who Code&lt;/a&gt;, but here is a quick rundown of what I like and dislike about each one.&lt;/p&gt;

&lt;h4&gt;Paul Stamatiou Method&lt;/h4&gt;

&lt;p&gt;I like the error checking in &lt;a href="http://paulstamatiou.com/2007/03/18/how-to-optimize-your-css-even-more"&gt;Paul Stamatiou’s&lt;/a&gt; method for two reasons: 1) it checks to see if the zlib extension is loaded and 2) the gzip compression. I don’t like that you have to rename your CSS files with a PHP extension which causes my IDE to highlight the syntax as PHP rather than CSS and that the snippet has to go in all CSS files.&lt;/p&gt;

&lt;h4&gt;Perishable Press Method&lt;/h4&gt;

&lt;p&gt;In &lt;a href="http://perishablepress.com/press/2006/10/23/compressed-css-compression/"&gt;Perishable Press’&lt;/a&gt; technique, I like the gzip compression and the cache checking. Again, I don’t like that you have to rename the CSS files with a PHP extension and that the snippet has to go in all of CSS files.&lt;/p&gt;

&lt;h4&gt;Reinhold Weber Method&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://reinholdweber.com/?p=37"&gt;Reinhold Weber’s&lt;/a&gt; technique combines all the CSS files into one file via includes before sending it to the browser, does not require you to rename your CSS files with PHP extension, and strips comment out by removes comments.&lt;/p&gt;

&lt;p&gt;The downside is that the regex that removes all the whitespace caused some issues with CSS shorthand and makes it harder to use Firebug to troubleshoot layout issues since the entire content of the CSS file resides on line 1.&lt;/p&gt;

&lt;h3&gt;My Modified Technique &lt;/h3&gt;

&lt;p&gt;To put this to use, create a file called &lt;code&gt;styles.php&lt;/code&gt; in the same folder as your CSS files.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/php-gzip-styles.png" alt="Styles.php is in the same folder as other CSS files"/&gt;&lt;/p&gt;

&lt;p&gt;Paste in the following code:&lt;/p&gt;

&lt;script src="https://gist.github.com/1052566.js?file=php-gzip-optimization.php"&gt;&lt;/script&gt;

&lt;p&gt;You will then need to &lt;strong&gt;update the path to the CSS file in the head of your HTML or PHP file&lt;/strong&gt; to point to the &lt;code&gt;styles.php&lt;/code&gt; file that you created.&lt;/p&gt;

&lt;h3&gt;The Results&lt;/h3&gt;

&lt;p&gt;As you can see from the image below, the 2 CSS files were output as 1 file and the size went from 11.2KB to 3.2KB. The comments were also removed from the file, but whitespace was retained to aid troubleshooting if there are any layout issues.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/php-gzip-firebug.png" alt="YSlow results after optimizations" /&gt;&lt;/p&gt;

&lt;p&gt;This technique is a powerful and simple way to reduce page download size and speed up your site that will work with most PHP installations, even those on shared hosting that don’t have &lt;code&gt;mod_deflate&lt;/code&gt; turned on in their Apache configuration.
I’ll definitely put this method to use on my redesigned site which will debut later this month and begin using it as part of my standard process for all new projects.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=00fhSIo8OyU:_njyxXrK5I4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=00fhSIo8OyU:_njyxXrK5I4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=00fhSIo8OyU:_njyxXrK5I4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=00fhSIo8OyU:_njyxXrK5I4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=00fhSIo8OyU:_njyxXrK5I4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=00fhSIo8OyU:_njyxXrK5I4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=00fhSIo8OyU:_njyxXrK5I4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=00fhSIo8OyU:_njyxXrK5I4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/00fhSIo8OyU" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/use-php-to-gzip-and-optimize-css-files/</feedburner:origLink></item>
    <item>
      <title>Photoshop Color Workflow Using HSB</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/vUmLOc6rjcc/</link>
      <pubDate>Sun, 15 Mar 2009 00:00 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/photoshop-color-workflow-using-hsb/</guid>
      <description>&lt;p&gt;More than any other element of design, color has psychological underpinnings which
makes it difficult to master. Learning the fundamentals of color theory is the basis
for more advanced work and the reason why color is such an important part of
design.&lt;/p&gt;

&lt;p&gt;Recently, I have been focusing on the mechanics of design and have developed a
streamlined system of creating color schemes and integrating them into the workflow in
Photoshop.&lt;/p&gt;

&lt;h3&gt;Color Properties and Their Application in Photoshop&lt;/h3&gt;

&lt;p&gt;Most web designers are probably comfortable working with RGB or Hexadecimal color
values, but working with hue, saturation, and brightness (HSB) values can provide a
more intuitive means of working with color since it is more similar to other
mediums.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Hue:&lt;/strong&gt; The name of a pure color. A hue in Photoshop is indicated
  by its position (in degrees) on the color wheel. The higher the slider on the color
  bar goes, the further around the color wheel you go.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Saturation:&lt;/strong&gt; The intensity or dullness of a hue. A fully
  saturated hue in Photoshop will have a S-value of 100%.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Brightness:&lt;/strong&gt; The luminosity (lightness or darkness) of a hue. In
  Photoshop, brighter colors will have a higher B-value.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src="/images/stories/theory-color-picker.jpg" alt="Photoshop Color picker" class="caption" title="Color picker in Photoshop depicting HSB values" /&gt;&lt;/p&gt;

&lt;h3&gt;Understanding the Color Wheel and Color Harmonies&lt;/h3&gt;

&lt;p&gt;The color wheel is the most important tool to understanding color harmony. Position
on the color wheel is indicated by degrees. Every color harmony will have a base hue to
serve as the common element between other colors.&lt;/p&gt;

&lt;p&gt;To come up with color schemes, start with your base color indicated by H&lt;span class=
"subscript"&gt;0&lt;/span&gt; in the example below, and perform a simple calculation addition,
subtraction, and &lt;a href="http://en.wikipedia.org/wiki/Absolute_value"&gt;absolute
value&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;strong&gt;Complementary:&lt;/strong&gt; a two-color combination consisting of a base color
    (H&lt;span class="subscript"&gt;0&lt;/span&gt;) and another color (H&lt;span class=
    "subscript"&gt;1&lt;/span&gt;) that is 180 degrees apart from H&lt;span class=
    "subscript"&gt;0&lt;/span&gt; on the color wheel.

    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;formula:&lt;/em&gt; H&lt;span class="subscript"&gt;1&lt;/span&gt; = |(H&lt;span class=
      "subscript"&gt;0&lt;/span&gt; + 180 degrees) - 360 degrees|&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;strong&gt;Split Complementary:&lt;/strong&gt; A three-color combination that consists of a
    base color (H&lt;span class="subscript"&gt;0&lt;/span&gt;) and two colors (H&lt;span class=
    "subscript"&gt;1&lt;/span&gt; and H&lt;span class="subscript"&gt;2&lt;/span&gt;) that are
    150 degrees and 210 degrees apart from H&lt;span class="subscript"&gt;0&lt;/span&gt;
    respectively.

    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;formula:&lt;/em&gt; H&lt;span class="subscript"&gt;1&lt;/span&gt; = |(H&lt;span class=
      "subscript"&gt;0&lt;/span&gt; + 150 degrees) - 360 degrees|&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;formula:&lt;/em&gt; H&lt;span class="subscript"&gt;2&lt;/span&gt; = |(H&lt;span class=
      "subscript"&gt;0&lt;/span&gt; + 210 degrees) - 360 degrees|&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;strong&gt;Triadic:&lt;/strong&gt; A three-color combination that consists of a base color
    (H&lt;span class="subscript"&gt;0&lt;/span&gt;) and two colors (H&lt;span class=
    "subscript"&gt;1&lt;/span&gt; and H&lt;span class="subscript"&gt;2&lt;/span&gt;) that are
    120 degrees and 240 degrees apart from H&lt;span class="subscript"&gt;0&lt;/span&gt;
    respectively.

    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;formula:&lt;/em&gt; H&lt;span class="subscript"&gt;1&lt;/span&gt; = |(H&lt;span class=
      "subscript"&gt;0&lt;/span&gt; + 120 degrees) - 360 degrees|&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;formula:&lt;/em&gt; H&lt;span class="subscript"&gt;2&lt;/span&gt; = |(H&lt;span class=
      "subscript"&gt;0&lt;/span&gt; + 240 degrees) - 360 degrees|&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;strong&gt;Tetradic:&lt;/strong&gt; A four-color combination that consists of a base color
    (H&lt;span class="subscript"&gt;0&lt;/span&gt;) and three colors (H&lt;span class=
    "subscript"&gt;1&lt;/span&gt;, H&lt;span class="subscript"&gt;2&lt;/span&gt;, and H&lt;span class=
    "subscript"&gt;3&lt;/span&gt;) that are 90 degrees, 180 degrees, and 270 degrees
    apart from H&lt;span class="subscript"&gt;0&lt;/span&gt; respectively.
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;formula:&lt;/em&gt; H&lt;span class="subscript"&gt;1&lt;/span&gt; = |(H&lt;span class=
      "subscript"&gt;0&lt;/span&gt; + 90 degrees) - 360 degrees|&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;formula:&lt;/em&gt; H&lt;span class="subscript"&gt;2&lt;/span&gt; = |(H&lt;span class=
      "subscript"&gt;0&lt;/span&gt; + 180 degrees) - 360 degrees|&lt;/li&gt;

      &lt;li&gt;&lt;em&gt;formula:&lt;/em&gt; H&lt;span class="subscript"&gt;3&lt;/span&gt; = |(H&lt;span class=
      "subscript"&gt;0&lt;/span&gt; + 270 degrees) - 360 degrees|&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;strong&gt;Analagous:&lt;/strong&gt; a combination consisting of a base color (H&lt;span class=
    "subscript"&gt;0&lt;/span&gt;) and one or more adjacent colors (30 degrees apart) on the
    color wheel.

    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;formula:&lt;/em&gt; H&lt;span class="subscript"&gt;1&lt;/span&gt; = |(H&lt;span class=
      "subscript"&gt;0&lt;/span&gt; + 30 degrees) - 360 degrees|&lt;/li&gt;

      &lt;li&gt;&lt;em&gt;formula:&lt;/em&gt; H&lt;span class="subscript"&gt;2&lt;/span&gt; = |(H&lt;span class=
      "subscript"&gt;0&lt;/span&gt; + 60 degrees) - 360 degrees|&lt;/li&gt;

      &lt;li&gt;&lt;em&gt;formula:&lt;/em&gt; H&lt;span class="subscript"&gt;3&lt;/span&gt; = |(H&lt;span class=
      "subscript"&gt;0&lt;/span&gt; + 90 degrees) - 360 degrees|&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Monochrome:&lt;/strong&gt; a color scheme based off the base color. Variations
  in shade or tint are achieved by changing the S-value and/or the B-value for your
  base color.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Putting it All Together&lt;/h3&gt;

&lt;p&gt;As a practical example, I am going to walk you through the creation of a
split-complementary color scheme for one of my upcoming projects. To get started, open
up a new Photoshop file. I am going to work with a base color with a hue value of
256.&lt;/p&gt;

&lt;h4&gt;Create Colored Shapes&lt;/h4&gt;

&lt;p&gt;Use the rectangular marquee tool to make a selection, and fill it with the selected
color on a new layer.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/theory-3-color.png" alt="Three base colors" /&gt;&lt;/p&gt;

&lt;p&gt;The three colors I have chosen are:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;H: 256, S: 39, B: 7 (#0d0b12)&lt;/li&gt;
  &lt;li&gt;H: 106, S: 94, B: 20 (#0e3303)&lt;/li&gt;
  &lt;li&gt;H: 46, S: 17, B: 88 (#e0d7ba)&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;Create Additional Colors for Visual Interest&lt;/h4&gt;

&lt;p&gt;Trying to spread 3 colors across an entire site would be boring, so I am going to
add some auxiliary colors to give more options for experimentation.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/theory-4-color-aux.png" alt="Four additional colors" /&gt;&lt;/p&gt;

&lt;p&gt;My additional colors are as follows along with the reasons why I am chose to
incorporate into my theme:&lt;/p&gt;

&lt;ol class="lower-alpha"&gt;
  &lt;li&gt;H: 236, S: 90, B: 50 (#0d2880) – Analogous to color #1
  above.&lt;/li&gt;
  &lt;li&gt;H: 136, S: 34, B: 39 (#41634a) – Analogous to color #2
  above.&lt;/li&gt;
  &lt;li&gt;H: 76. S: 96, B: 46 (#577505) – Analogous to color #2
  above.&lt;/li&gt;
  &lt;li&gt;H: 46, S: 92, B: 98 (#fac313) – This is a chroma variation from
  color #3, meaning that the H-values are the same, but the variance comes from the
  change in saturation and brightness.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;Tint and Shade&lt;/h4&gt;

&lt;p&gt;The final step for generating some additional colors is to create tint and shade
variations by adding white and black layers respectively and set them to a low opacity.
In the example, I created two white layers and two black layers, set the opacity to
20%, and overlapped them to achieve two layers of shade and two layers of tint. An area
in the middle was left open for the original colors to show through without being
altered.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/theory-color-tint-shade.png" alt="tints and shades" /&gt;&lt;/p&gt;

&lt;p&gt;These colors can be used as a guideline for anything in the design: backgrounds,
navigation, headlines, copy.&lt;/p&gt;

&lt;h3&gt;Create a Custom Set of Swatches&lt;/h3&gt;

&lt;p&gt;Now that the colors have been solidified for the design, we could easily leave the
colors saved in their own psd and just keep two documents open during the design
process or import the layers into the main design file. Fortunately, there is a more
streamlined way to work.&lt;/p&gt;

&lt;h4&gt;Step 1 – Convert the Image Mode to Indexed Color&lt;/h4&gt;

&lt;p&gt;In Photoshop, go to Image &gt; Mode &gt; Indexed Color. Select OK at the prompt to
merge visible layers and discard the hidden ones which will result in one flat
file.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/theory-indexed-color.png" alt="Indexed color mode" /&gt;&lt;/p&gt;

&lt;p&gt;Set the palette to “Exact” and select OK.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/theory-indexed-color2.png" alt="Indexed color mode" /&gt;&lt;/p&gt;

&lt;h4&gt;Step 2 – View and Save the Color Table&lt;/h4&gt;

&lt;p&gt;Now that the image is in Indexed Color mode, go to Image &gt; Mode &gt; Color Table
to save this color palette.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/theory-color-table.png" alt="Color Table" /&gt;&lt;/p&gt;

&lt;h4&gt;Step 3 – Import the Color Table to the Swatch&lt;/h4&gt;

&lt;p&gt;Go to the Swatches Window and select either “Load Swatches” or
“Replace Swatches.” Find the folder where you saved the color table in step
2, change the file type drop down to “Color Table (*.ACT),” and open your
file.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/theory-load-table.png" alt="Load color table" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.ethanandjamie.com/files/color-theory-demo.act"&gt;Download the
color table&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Revisiting the fundamentals of color theory allows you to really think about the
technique involved and will improve your understanding as well. There are certainly
other methods of creating color schemes, but the ability to generate color schemes from
scratch allows a greater ability to explain choices as a designer which could lead to
more creative solutions for clients and take your designs to the next level.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=vUmLOc6rjcc:R2sENrd_wFw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=vUmLOc6rjcc:R2sENrd_wFw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=vUmLOc6rjcc:R2sENrd_wFw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=vUmLOc6rjcc:R2sENrd_wFw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=vUmLOc6rjcc:R2sENrd_wFw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=vUmLOc6rjcc:R2sENrd_wFw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=vUmLOc6rjcc:R2sENrd_wFw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=vUmLOc6rjcc:R2sENrd_wFw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/vUmLOc6rjcc" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/photoshop-color-workflow-using-hsb/</feedburner:origLink></item>
    <item>
      <title>Moo-doo: A Mootools Voodoo Doll</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/7qXOwsRQGpE/</link>
      <pubDate>Tue, 24 Feb 2009 00:00 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/moo-doo-a-mootools-voodoo-doll/</guid>
      <description>&lt;p&gt;With many Americans looking for full-time work due to the state of the economy (myself included),
frustration seems to be running high. One of the important things to me has been taking the time to learn new skills and further develop
the existing ones. No doubt, I will come out of this recession stronger as a professional with more to offer
to a potential employer than ever.&lt;/p&gt;

&lt;p&gt;Given that today is Mardi Gras, I have cooked up an absolutely ridiculous example while experimenting with Mootools’ 
&lt;a href="http://mootools.net/docs/Plugins/Drag.Move"&gt;Drag.Move&lt;/a&gt; class: A &lt;a href="http://www.ethanandjamie.com/demo/mootools-voodoo-doll.html"&gt;Mootools Voodoo Doll&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.ethanandjamie.com/demo/mootools-voodoo-doll.html"&gt;
&lt;img src="/images/stories/mootools-voodoo-doll.jpg" alt="Mootools Voodoo Doll" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;Resources for This Project&lt;/h3&gt;

&lt;p&gt;While creating this project, I used the following resources.&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.ethanandjamie.com/blog/43-web-dev-freebies/76-momentum-css"&gt;Momentum CSS Framework&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.ethanandjamie.com/blog/37-user-interface/81-png8-transparency-without-fireworks"&gt;Alpha Transparency in PNG-8 Images Without Using Fireworks&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://mootools.net/docs/"&gt;Mootools Official Documentation&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://davidwalsh.name/mootools-drag-drop-lock"&gt;Drag, Drop, Lock&lt;/a&gt; by David Walsh&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.consideropen.com/blog/2008/08/30-days-of-mootools-12-tutorials-day-12-drag-and-drop-using-dragmove/"&gt;30 Days of Mootools&lt;/a&gt; by consider: open&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=7qXOwsRQGpE:saWRjzoY5FI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=7qXOwsRQGpE:saWRjzoY5FI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=7qXOwsRQGpE:saWRjzoY5FI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=7qXOwsRQGpE:saWRjzoY5FI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=7qXOwsRQGpE:saWRjzoY5FI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=7qXOwsRQGpE:saWRjzoY5FI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=7qXOwsRQGpE:saWRjzoY5FI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=7qXOwsRQGpE:saWRjzoY5FI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/7qXOwsRQGpE" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/moo-doo-a-mootools-voodoo-doll/</feedburner:origLink></item>
    <item>
      <title>Alpha Transparency in PNG-8 Images Without Using Fireworks</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/OLCpGbHehko/</link>
      <pubDate>Fri, 13 Feb 2009 00:00 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/alpha-transparency-in-png-8-images-without-using-fireworks/</guid>
      <description>&lt;p&gt;Web designers are starting to discover that 8-bit &lt;abbr title="Portable Network Graphics"&gt;PNG&lt;/abbr&gt; files can be used to achieve semi-transparency (alpha transparency) that will gracefully degrade in IE6. Most of the posts around the web focus on using Adobe Fireworks to achieve semi-transparency, but what about the rest of us that don’t use Fireworks?&lt;/p&gt;

&lt;p&gt;Today, I’ll demonstrate an alternative technique to show you how to achieve alpha transparency in PNG-8 images &lt;em&gt;without&lt;/em&gt; having to shell out the cash for Adobe Fireworks.&lt;/p&gt;

&lt;h3&gt;Why Use PNG Instead of GIF?&lt;/h3&gt;

&lt;p&gt;&lt;abbr title="Graphics Interchange Format"&gt;GIF&lt;/abbr&gt; files only support binary transparency meaning that either a pixel is either fully opaque or fully transparent. On the other hand, PNG (pronounced “ping”) files support semi-transparent pixels and also offer a reduction in size over GIF files when using the 8-bit variety. The benefit of this can be summed up by this simple equation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smaller Images = Less Time Downloading = Faster Site&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Both PNG-8 and GIF files are limited to 256-colors. Aside from the speed benefit, PNG-8 files can contain semi-transparency in modern browsers (Firefox, Opera, IE7+, Chrome, and Safari) and do not require CSS hacks or Javascript to implement.&lt;/p&gt;

&lt;h3&gt;Before We Continue&lt;/h3&gt;

&lt;p&gt;Before we continue, you’ll need to download your free copy of pngquant and install using the instructions below.&lt;/p&gt;

&lt;h4&gt;Windows Users&lt;/h4&gt;

&lt;ul&gt;&lt;li&gt;&lt;a title="Download pngquant" href="http://www.libpng.org/pub/png/apps/pngquant.html"&gt;Download pngquant&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Drag the .exe file over to your C:\Windows\System32 folder.&lt;/li&gt;&lt;/ul&gt;

&lt;h4&gt;Mac Users&lt;/h4&gt;

&lt;p&gt;&lt;a title="Download a pre-made executable" href="http://www.ernstdehaan.com/pngquant"&gt;Download a pre-made executable&lt;/a&gt;.
&lt;em&gt;OR&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a title="Download pngquant" href="http://www.libpng.org/pub/png/apps/pngquant.html"&gt;Download pngquant&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Follow the instructions to &lt;a title="Compile and install from the source" href="http://ernstdehaan.blogspot.com/2008/04/compiling-zlib-libpng-and-pngquant-on.html"&gt;compile and install from the source&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Producing and Saving the PNG Image&lt;/h3&gt;

&lt;p&gt;Open up your image editing program. For the purpose of demonstration, I’m using Photoshop, but you could also achieve the same result by using GIMP.&lt;/p&gt;

&lt;h4&gt;Step 1&lt;/h4&gt;

&lt;p&gt;Create a new document (Ctrl + N).&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/png8-new-document.png" title="Create a new document in photoshop" alt="New document properties dialog in photoshop" /&gt;&lt;/p&gt;

&lt;p&gt;I am only using the text tool for this demonstration, but you could (and should) do this with your approved design file when you slice up your PSD.&lt;/p&gt;

&lt;h4&gt;Step 2&lt;/h4&gt;

&lt;p&gt;The file I created has 3 text layers. I set the opacity to 60% for the layer containing the text “semitransparent” and gave all the layers an ugly outer glow.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/png8-layers.png" title="Photoshop Layer Transparency" alt="One of the layers is set to 60% opacity" /&gt;&lt;/p&gt;

&lt;h4&gt;Step 3&lt;/h4&gt;

&lt;p&gt;Save the file for web (Alt + Shift + Ctrl + S) and select PNG-24 from the drop-down.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/png8-transparency24.png" alt="Save for web and select PNG-24 from the drop-down" /&gt;&lt;/p&gt;

&lt;p&gt;A PNG-24 file, sometimes called PNG-32, actually consists of 8-bit color for each of the red, green, and blue channels plus another 8-bits for the alpha channel which contains the transparency information.&lt;/p&gt;

&lt;h3&gt;Converting to PNG-8&lt;/h3&gt;

&lt;p&gt;If you were to implement the image as is, you would see light gray for the transparent pixels when viewed in IE6.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/png8-24screenshot.png" class="caption" title="Notice the gray box around the PNG-24 image in IE6 (left)." alt="Screenshot of IE6 and Firefox rendering a PNG-24 image" /&gt;&lt;/p&gt;

&lt;p&gt;I’m using &lt;a title="IETester" href="http://www.my-debugbar.com/wiki/IETester/HomePage"&gt;IETester&lt;/a&gt; to test how the image would render in IE6 on the left. The right side is a screenshot of Firefox and shows how modern browsers would display
the image.&lt;/p&gt;

&lt;h4&gt;Step 1&lt;/h4&gt;

&lt;p&gt;First, place any PNG-24 files that you would like to covert in a folder and drag it to a convenient location. I placed my folder, called “ui,” in the C drive root.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/png8-explorer1.png" alt="Windows explorer before pngquant is run" /&gt;&lt;/p&gt;

&lt;p&gt;It is best to put the file in a location that doesn’t contain spaces and is close to the root folder to save some typing in subsequent steps.&lt;/p&gt;

&lt;h4&gt;Step 2&lt;/h4&gt;

&lt;p&gt;Now we need to convert the image to 8-bit by using pngquant which we downloaded earlier. Open up the command prompt on a PC (Start &gt; Run &gt; cmd) or Terminal on a Mac (Applications &gt; Utilities).&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/png8-start-menu.png" alt="Windows Vista Start Menu" /&gt;&lt;/p&gt;

&lt;h4&gt;Step 3&lt;/h4&gt;

&lt;p&gt;At the prompt type in &lt;code&gt;pngquant (number of colors) pathtofile\filename.png&lt;/code&gt;. In my case, I am optimizing a file called semitransparent.png inside of the ui folder and am optimizing to 8-bit which equates to 256-colors, so I’d type &lt;code&gt;pngquant 256 c:\ui\semitransparent.png&lt;/code&gt; and press enter.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/png8-cmd-prompt.png" alt="Command prompt showing a pngquant command in Windows Vista" /&gt;&lt;/p&gt;

&lt;p&gt;Pngquant creates a copy of the file and will append -fs8 to the end of the file name. This file is ready to use.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/png8-explorer2.png" alt="Pngquant makes a copy of the file and appends -fs8 to the file name." /&gt;&lt;/p&gt;

&lt;h4&gt;The Result&lt;/h4&gt;

&lt;p&gt;Here is the updated screenshot.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/png8-8screenshot.png" alt="Screenshot of PNG-8 images in IE6 and Firefox" /&gt;&lt;/p&gt;

&lt;p&gt;IE6 will degrade the image gracefully and only render the fully opaque pixels. It does not have the outer glow or the word “semitransparent” because that layer was set to 60% opacity in Photoshop. Firefox and other modern browsers will render the alpha transparency as it should.&lt;/p&gt;

&lt;h3&gt;More About Pngquant&lt;/h3&gt;

&lt;p&gt;Pngquant is capable of optimizing a whole folder full of images at a time. All you have to do is use the wildcard selector (“*”) instead of specifying a file name. If I had wanted to do the entire contents of the “ui” folder in the example above, I would use &lt;code&gt;pngquant 256 c:\ui\*.png&lt;/code&gt; in the command line.&lt;/p&gt;

&lt;h4&gt;Other Options&lt;/h4&gt;

&lt;p&gt;Pngquant has other options for optimizing files. To see an available list of options, simply type in “pngquant” in the command line.&lt;/p&gt;

&lt;h4&gt;Don’t Like the Command Line?&lt;/h4&gt;

&lt;p&gt;Windows users can download &lt;a href="http://jedisthlm.com/2006/03/16/manfred-a-pngquant-gui/"&gt;Manfred, a free pngquant GUI&lt;/a&gt; for even easier optimizations.&lt;/p&gt;

&lt;h4&gt;Make it Even Faster&lt;/h4&gt;

&lt;p&gt;Once you have converted your PNG-24 images to PNG-8, you can run the images through &lt;a href="http://smush.it/"&gt;Smush.it&lt;/a&gt; for even greater speed and performance benefits, or a host of other optimizations which I detailed in my &lt;a title="website optimization guide part 1" href="http://www.ethanandjamie.com/blog/39-seo/77-website-optimization-guide-1"&gt;website&lt;/a&gt;  &lt;a title="website optimization guide part 2" href="http://www.ethanandjamie.com/blog/39-seo/78-website-optimization-guide-2"&gt;optimization&lt;/a&gt;  &lt;a title="website optimization guide part 3" href="http://www.ethanandjamie.com/blog/39-seo/79-website-optimization-guide-3"&gt;series&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;More Developments&lt;/h4&gt;

&lt;p&gt;At the time of this writing, &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=249473"&gt;npngquant, a new version of pngquant&lt;/a&gt; which promises better performance and more intelligent optimizations is available over at &lt;a href="http://sourceforge.net"&gt;SourceForge&lt;/a&gt;. In testing for this article, I found it to be buggy and hence did not include instructions for it. I am hopeful the kinks get worked out quickly since it looks to have some noteworthy improvements over the original pngquant detailed in this article.&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;There are many creative possibilities when using transparency on the web which we are just now starting to explore. The methods shown can put this technique in your design toolbox, even if you don’t use Fireworks and will hopefully assist you with coming up with inspiring designs.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=OLCpGbHehko:FQsPkZ6qf8k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=OLCpGbHehko:FQsPkZ6qf8k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=OLCpGbHehko:FQsPkZ6qf8k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=OLCpGbHehko:FQsPkZ6qf8k:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=OLCpGbHehko:FQsPkZ6qf8k:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=OLCpGbHehko:FQsPkZ6qf8k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=OLCpGbHehko:FQsPkZ6qf8k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=OLCpGbHehko:FQsPkZ6qf8k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/OLCpGbHehko" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/alpha-transparency-in-png-8-images-without-using-fireworks/</feedburner:origLink></item>
    <item>
      <title>25 Awesome Examples of Outdoor Industry Web Design</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/9rm2mtYWM7A/</link>
      <pubDate>Fri, 30 Jan 2009 00:00 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/25-awesome-examples-of-outdoor-industry-web-design/</guid>
      <description>&lt;p&gt;In 2008, the outdoor industry posted a growth of &lt;a href="http://www.outdoorindustry.org/media.oia.php?news_id=4926"&gt;18% in online sales&lt;/a&gt;. For businesses in the industry, it is more important than ever to provide target customers with a great website and capitalize on the favorable market conditions.&lt;/p&gt;

&lt;p&gt;Though many smaller operations won’t have the budget of the industry’s big-guns, attaining a successful and attractive website is well within reach, even for independent retailers and outfitters. Here are some tips and shining examples of outdoor industry websites that will hopefully help industry professionals with their website in ‘09.&lt;/p&gt;

&lt;h3&gt;Understand the Purpose of Your Website&lt;/h3&gt;

&lt;p&gt;The decision of which company or product to choose, like many other purchasing decisions, is made online. Those who hire outdoor industry service providers or go on excursions are often from areas outside of the guide’s operating market.
Think about what you are asking someone to do when they visit your website: solicit information something
that can cost hundreds or even thousands of dollars based on your web presence alone.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.takemefishing.org/"&gt;Take Me Fishing&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a name="firstScreenshot" id="firstScreenshot"&gt;&lt;/a&gt;
&lt;a href="http://www.takemefishing.org/"&gt;&lt;img src="/images/stories/outdoor-take-me-fishing.jpg" alt="Take Me Fishing" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take Me Fishing is a site to provide information on fish habitat, instructional techniques, and inspire people to share fishing with others. Bonus points for woodgrain.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.smartwool.com/"&gt;SmartWool&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.smartwool.com/"&gt;&lt;img src="/images/stories/outdoor-smart-wool.jpg" alt="SmartWool" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The purpose of this site is to provide information on active outdoor apparel which will hopefully lead to customer purchases through the website or authorized dealer.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.tarponlodge.com/home/"&gt;Tarpon Lodge and Resort&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.tarponlodge.com/home/"&gt;&lt;img src="/images/stories/outdoor-tarpon-lodge.jpg" alt="Tarpon Lodge" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Tarpon Lodge website provides rates and information for people looking for an outdoor vacation. The design is well executed and the logo placement is really good, however the music can put off some people (like me).&lt;/p&gt;

&lt;h3&gt;What You Are Really Selling?&lt;/h3&gt;

&lt;p&gt;The most important part of servicing a niche market is to truly
understand what the target customer is after, so what does someone in the outdoor industry truly sell? The answer is probably more broad than you think.
Adventure, relaxation, and challenge are things you’d experience while backpacking, climbing, skiing, fishing, or rafting, but they can all be tied together in one common theme: &lt;strong&gt;lifestyle&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.singita.com/index.php"&gt;Singita Game Reserves&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.singita.com/index.php"&gt;&lt;img src="/images/stories/outdoor-singita.jpg" alt="Singita Game Reserves" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Singita Game Reserves uses an &lt;a href="http://www.ethanandjamie.com/blog/42-design-trends/75-upscale-design-aesthetics"&gt;upscale design&lt;/a&gt; to attract affluent customers. The packages they offer can cost thousands of dollars per day for their African wildlife retreats.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.thecircumference.org/"&gt;The Circumference&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.thecircumference.org/"&gt;&lt;img src="/images/stories/outdoor-the-circumference.jpg" alt="The Circumference" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Life Experiences are the central message of this attractive travel and adventure site.&lt;/p&gt;

&lt;h3&gt;Bring the Outdoors Online&lt;/h3&gt;

&lt;p&gt;When it comes to the outdoor industry, there is the expectation of an active, healthy lifestyle that is the backbone of the
industry itself.&lt;/p&gt;

&lt;p&gt;One of the best ways to convey this is to bring the elements you’d
encounter while out in the field to the site design. If you own an adventure lodge, make sure your site captures a rustic feeling of excitement. Have a mountain adventure company? Take the opportunity to incorporate elements from the mountain such as the colors, trail markers, or topographic maps.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.outdooritalia.it/"&gt;Outdoor Italia&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.outdooritalia.it/"&gt;&lt;img src="/images/stories/outdoor-italia.jpg" alt="Outdoor Italia" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Outdoor Italia bases their whole design off of elements that you would see while in the field.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.66north.com/home/"&gt;66 North&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.66north.com/home/"&gt;&lt;img src="/images/stories/outdoor-66north.jpg" alt="66 North" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;66 North features a topographic map of Iceland in their background.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.whistlerblackcomb.com/index.htm"&gt;Whistler Blackcomb&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.whistlerblackcomb.com/index.htm"&gt;&lt;img src="/images/stories/outdoor-whistler.jpg" alt="Whistler Blackcomb" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Snow on the ski report feature is meant to simulate a marker that you would find at the top of a run.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.micato.com/"&gt;Micato Safaris&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.micato.com/"&gt;&lt;img src="/images/stories/outdoor-micato.jpg" alt="Micato Safaris" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In any other situation, the animal print would conjure up images of 80’s hair metal, but it works well for this site. I like the typography on this site, but I wish they were using web standards.&lt;/p&gt;

&lt;h3&gt;Don’t Skimp on Photography&lt;/h3&gt;

&lt;p&gt;Outdoor sports and hobbies take place in the most beautiful settings our planet has to offer, so there is no excuse for having lackluster photography. One of my favorite things as a designer is when a client provides me with a bunch high-resolution of action and still shots to use in the site design, and having good photography can really add polish to a design.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.thenorthface.com/catalog/index.html"&gt;The North Face&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.thenorthface.com/catalog/index.html"&gt;&lt;img src="/images/stories/outdoor-north-face.jpg"  alt="The North Face Website" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The North Face uses the natural environment for the backdrop of their website.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.notesfromtheroad.com/"&gt;Notes from the Road&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.notesfromtheroad.com/"&gt;&lt;img src="/images/stories/outdoor-notes-from-the-road.jpg" alt="Notes from the Road" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notes from the Road features great photography from around the world. Too bad they aren’t using web standards for their site.&lt;/p&gt;

&lt;h3&gt;Illustrations Can Work Too&lt;/h3&gt;

&lt;p&gt;Hand drawn or illustrated web designs are very popular lately. These are great when you service multiple markets and don’t want to seem partial or if photography is not available.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.adventuredrop.com/"&gt;Adventure Drop&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.adventuredrop.com/"&gt;&lt;img src="/images/stories/outdoor-adventure-drop.jpg" alt="Adventure Drop" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Adventure Drop has a great illustration incorporating many types of outdoor sports.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.azmarinas.com/PleasantHarbor/"&gt;Arizona Marinas—Pleasant Harbor&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.azmarinas.com/PleasantHarbor/"&gt;&lt;img src="/images/stories/outdoor-az-marinas.jpg" alt="Arizona Marinas" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sometimes illustration can provide a way to break a cliché. Pretty much every marina has a standard photo of a boat. Illustration is used to set this marina apart from the rest.&lt;/p&gt;

&lt;h3&gt;Natural Colors&lt;/h3&gt;

&lt;p&gt;Web design can be an extension of your business and it is all about creating an experience. Many land-based companies make effective use of earth-tone colors, while water-based companies make great use of blues and sunny accent colors.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.turnefferesort.com/"&gt;Turneffe Resort&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.turnefferesort.com/"&gt;&lt;img src="/images/stories/outdoor-turneffe-resort.jpg" alt="Turneffe Resort" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A nice balance of texture and color.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.oceankayak.com/"&gt;Ocean Kayaks&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.oceankayak.com/"&gt;&lt;img src="/images/stories/outdoor-ocean-kayak.jpg" alt="Ocean Kayaks" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Effective use of water as a texture and brighter colors to accent the design.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://destinationleavenworth.com/"&gt;Destination Leavenworth&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://destinationleavenworth.com/"&gt;&lt;img src="/images/stories/outdoor-destination-leavenw.jpg" alt="Destination Leavenworth" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Woodland chalets and real estate that does a nice job of giving a woodsy vibe.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.visitglacierbay.com/"&gt;Glacier Bay Lodge &amp;amp; Tours&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.visitglacierbay.com/"&gt;&lt;img src="/images/stories/outdoor-visit-glacier-bay.jpg" alt="Visit Glacier Bay" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Anyone who has been on a glacier knows how beautiful the striking blue of the “old ice’ can be and the Glacier Bay site plays off of that color palette.&lt;/p&gt;

&lt;h3&gt;Rough Up the Design&lt;/h3&gt;

&lt;p&gt;Just as you can use some of the elements of that occur in the wild, you can also use some of the textures. Nature is full of fantastic textures and patterns, so why not use them to make your site come to life?&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.sinisterbikes.com/"&gt;Sinister Bikes&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.sinisterbikes.com/"&gt;&lt;img src="/images/stories/outdoor-sinister-bikes.jpg" alt="Sinister Bikes" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dark colors really make the tire treads in the site background stand out while a nice texture is obtained in the content area of the design.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://proarb.com.au/"&gt;Professional Tasmanian Arborists&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://proarb.com.au/"&gt;&lt;img src="/images/stories/outdoor-proarb.jpg" alt="Professional Tasmanian Arborists" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not over the top on texture, just enough to give the design a little edge while maintaining it’s elegance.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.leatherman.com/"&gt;Leatherman&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.leatherman.com/"&gt;&lt;img src="/images/stories/outdoor-leatherman.jpg" alt="Leatherman" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Gear companies usually have excellent websites and this is no exception. I have had their Wave multi-tool in my tacklebox for almost 10 years and it is just as rugged as their website.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.dynastar.com/"&gt;Dynastar&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.dynastar.com/"&gt;&lt;img src="/images/stories/outdoor-dynastar.jpg" alt="Dynastar" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This design is a hybrid with a number of different things like the textured background, patterned header, rugged sidebar on the right and decorative flourishes on the left. All the elements work harmoniously and make this site stand out.&lt;/p&gt;

&lt;h3&gt;Keep It Clean&lt;/h3&gt;

&lt;p&gt;Sometimes the best way to stand out is to use whitespace and execute well. This is the opposite approach to the large photo background or rugged textures, but is also a very effective technique, especially when going for a broad, gender-neutral appeal.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.andbeyond.com/"&gt;andBEYOND&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.andbeyond.com/"&gt;&lt;img src="/images/stories/outdoor-and-beyond.jpg" alt="andBEYOND" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I love this site, especially the &lt;a href="http://en.wikipedia.org/wiki/Ink_and_wash_painting"&gt;sumi-e&lt;/a&gt; style logo and sense of rhythm that is established by the layout.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.trails.com/"&gt;Trails&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.trails.com/"&gt;&lt;img src="/images/stories/outdoor-trails.jpg" alt="Trails" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This design requires a spot for advertising, e-commerce, promotions, membership, and a lot of information, so a clean design is absolutely necessary.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.butterfield.com/"&gt;Butterfield &amp;amp; Robinson&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.butterfield.com/"&gt;&lt;img src="/images/stories/outdoor-butterfield-robinso.jpg" alt="Butterfield and Robinson" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another minimalistic site that is very well executed. The thin lines that divide the page into segments give an added sense of elegance.&lt;/p&gt;

&lt;h4&gt;&lt;a href="http://www.rei.com/"&gt;REI&lt;/a&gt;&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://www.rei.com/"&gt;&lt;img src="/images/stories/outdoor-rei.jpg" alt="REI" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A clean layout that is well-suited for the large amount of e-commerce and travel information that this site provides.&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;Too often, a website is looked at as an expense rather than an investment, and a good web design can elevate a business to the next level by capitalizing on market growth. Any time you go after a niche market, it is best to understand the goals and unique challenges that a business faces. This is true for both the outdoor industry professionals or the web designers who serve that industry.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=9rm2mtYWM7A:dsyTjGE3JNY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=9rm2mtYWM7A:dsyTjGE3JNY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=9rm2mtYWM7A:dsyTjGE3JNY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=9rm2mtYWM7A:dsyTjGE3JNY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=9rm2mtYWM7A:dsyTjGE3JNY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=9rm2mtYWM7A:dsyTjGE3JNY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=9rm2mtYWM7A:dsyTjGE3JNY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=9rm2mtYWM7A:dsyTjGE3JNY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/9rm2mtYWM7A" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/25-awesome-examples-of-outdoor-industry-web-design/</feedburner:origLink></item>
    <item>
      <title>Website Optimization Guide: Part Three</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/nhgxbp4Dauc/</link>
      <pubDate>Mon, 12 Jan 2009 00:00 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/website-optimization-guide-part-three/</guid>
      <description>&lt;p&gt;Front end development is a quickly growing field, especially among the forward-thinking companies poised to lead the industry into the future. In parts &lt;a href="http://www.ethanandjamie.com/blog/39-seo/77-website-optimization-guide-1"&gt;one&lt;/a&gt; and &lt;a href="http://www.ethanandjamie.com/blog/39-seo/78-website-optimization-guide-2"&gt;&lt;/a&gt;&lt;a  href="http://www.ethanandjamie.com/blog/39-seo/78-website-optimization-guide-2"&gt;two of the website optimization series&lt;/a&gt;, we looked at front end and server side optimizations.&lt;/p&gt;

&lt;p&gt;Today, we’ll dive a little more into the front end, look at some helpful tools to assist with website optimization, and wrap up the final article in the series with a complimentary check list to keep track of your own optimizations.&lt;/p&gt;

&lt;h3&gt;Make It Work for the User&lt;/h3&gt;

&lt;p&gt;Bottom line—your website needs to work for the user’s intended purpose. Though testing typically is looked at as an afterthought by typical businesses, it is has serious ramifications on maximizing ROI. Testing could be as simple as having another “set of eyes” review the site or as intensive as hiring a renown usability consulting firm such as &lt;a href="http://www.nngroup.com/" rel="nofollow"&gt;Nielsen Norman Group&lt;/a&gt; or &lt;a href="http://www.adaptivepath.com/" rel="nofollow"&gt;Adaptive Path&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As far usability assurance is concerned, you should do the following  at the very minimum:&lt;/p&gt;

&lt;h4&gt;Make It Easy to Navigate&lt;/h4&gt;

&lt;p&gt;Users develop habits while browsing a site. Since they’ll get used to looking in the same spot for certain elements, persistent, intuitive navigation is an essential part of effective design. Navigation should be well organized broken up into relevant sections.&lt;/p&gt;

&lt;h4&gt;Use Progressive Enhancement &lt;/h4&gt;

&lt;p&gt;Make sure the page still functions with JavaScript disabled as some users prefer to browse this way, are looking at your site on a mobile device, or are mandated by network administrators.&lt;/p&gt;

&lt;h4&gt;Make Sure the Design Looks Right in Multiple Browsers&lt;/h4&gt;

&lt;p&gt;Testing layout integrity in multiple browsers ensures a seamless experience for all users. The site should look more or less the same in all major browsers. Personally, I let the data in my site analytics dictate which browsers to support for my site and use it as a baseline for other sites that I do as well.
Based on the data in my site analytics, I can see that visitors to my site use a multitude of browsers and I test all my sites in IE6+, Firefox, Opera 9, Safari, and Google Chrome. If you don’t have a suite of test machines for all of these different browsers, don’t worry. There are a number of free services such as &lt;a title="Browser Shots" href="http://browsershots.org/"&gt;Browser Shots&lt;/a&gt; or premium services like &lt;a title="Litmus" href="http://www.litmusapp.com/"&gt;Litmus&lt;/a&gt; to help you out.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/browser-shots.png" alt="Browser Shots Testing" class="caption" title="Browser Shots is a free web-based testing service" /&gt;&lt;/p&gt;

&lt;h3&gt;Follow Yahoo’s Advice&lt;/h3&gt;

&lt;p&gt;No other company has contributed as much to the field of front end development and website performance in recent past as Yahoo. In the last year or so, the Exceptional Performance Team at Yahoo have published a &lt;a title="list of best practices for website performance" href="http://developer.yahoo.com/performance/rules.html"&gt;list of best practices for website performance&lt;/a&gt;, &lt;a title="YSlow!" href="http://developer.yahoo.com/yslow/"&gt;YSlow!&lt;/a&gt; to measure the results, and discussed website performance at length.
Although I don’t follow their recommendations to the letter, I would suggest to anyone interested in front end web development to head on over to their &lt;a href="http://developer.yahoo.com/performance/"&gt;developer network&lt;/a&gt; and &lt;a href="http://pipes.yahoo.com/pipes/pipe.run?_id=PKsaYeBk3RG_sHO91JzWFw&amp;amp;_render=rss"&gt;subscribe to their feed&lt;/a&gt;, and for anyone who is interested in maximizing their ROI to find a developer who is well-read on their research.&lt;/p&gt;

&lt;h3&gt;Serve JS Frameworks from Google or Yahoo&lt;/h3&gt;

&lt;p&gt;Javascript frameworks have become indispensable tools for development and rapidly enhancing the user experience, however these files tend to be rather large in size. As part of the Ajax &lt;abbr title="Application Programming Interface"&gt;API&lt;/abbr&gt;, you can &lt;a  href="http://perishablepress.com/press/2008/11/25/save-bandwidth-by-serving-jquery-mootools-prototype-via-googles-ajax-libraries-api/"&gt;serve Mootools, JQuery, and YUI from Google’s servers&lt;/a&gt; to save bandwidth. YUI is unique because it can also be &lt;a href="http://developer.yahoo.com/yui/articles/hosting/"&gt;served from the Yahoo servers&lt;/a&gt; along with its optional components.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/yui-server-wizard.png" alt="Yahoo wizard for hosting files from their server" class="caption" title="Yahoo has a copy and paste wizard for serving files from their server" /&gt;&lt;/p&gt;

&lt;p&gt;Some people aren’t willing to sacrifice the control of hosting their own frameworks, but offloading the hosting of these files has a large advantage because it can be cached. If someone visits a site that is already using a Google hosted framework, they won’t have to download it again on your site which will ultimately make your site load faster.&lt;/p&gt;

&lt;h3&gt;Reduce the Size of Images&lt;/h3&gt;

&lt;p&gt;Image optimization can be taken further than using the save for web feature in Photoshop. Every byte shaved off of an image file can improve performance and can potentially reduce the amount you need to spend on hosting.
In a recent article, &lt;a href="http://www.graphicrating.com/"&gt;Graphic Rating&lt;/a&gt; looked at the &lt;a  href="http://www.graphicrating.com/2009/01/10/image-performance-optimization-for-top-10-websites/"&gt;amount of bandwidth that top sites could save&lt;/a&gt; with further image optimization. Again, Yahoo has also contributed some groundbreaking information on &lt;a href="http://yuiblog.com/blog/2008/10/29/imageopt-1/"&gt;reducing image sizes&lt;/a&gt;, and two of their developers have released a &lt;a href="http://smush.it/"&gt;tool to help facilitate image optimization&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/smush-it.png" alt="Smush.it" class="caption" title="Smush it is a service that will make it easier to optimize your images" /&gt;&lt;/p&gt;

&lt;h3&gt;Adhere to Good Design Principles&lt;/h3&gt;

&lt;p&gt;Good design is not a substitute for a functional website with great content, but it does act as a major part of the successful website equation. The graphic appeal of a website is like packaging for a physical product and is a recognizable part of a brand. If your site a design is ugly, you better offer a fantastic service and pack it with value to the user à la Craigslist.
A professional-quality design will establish trust with it’s viewers, leave a lasting impression with visitors, and can even help you gain positive exposure through web design.
Certain design practices such as prominent placement of the call-to-action, use of whitespace, and grid-based layout can help guide your visitors and  maximize your site’s usability.&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;What have we learned? The web is evolving, there is new research being conducted every day, and new platforms such as mobile devices that businesses should not ignore. In short, every aspect of a website can be optimized in some fashion.
The on-site optimizations lay the foundation for search engines and visitors. While the on-page optimizations are being performed, it is time to head to external domains to start marketing, networking, and building links with other sites.
Be sure to &lt;a href="http://www.ethanandjamie.com/files/website-optimization-checklist.pdf"&gt;download the pdf&lt;/a&gt; to give you a quick reference guide for the articles in the series.&lt;/p&gt;

&lt;h3&gt;Other Reading&lt;/h3&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.ethanandjamie.com/blog/39-seo/77-website-optimization-guide-1"&gt;Website Optimization Guide: Part 1&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.ethanandjamie.com/blog/39-seo/78-website-optimization-guide-2"&gt;Website Optimization Guide: Part 2&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.ethanandjamie.com/files/website-optimization-checklist.pdf"&gt;Website Optimization Checklist (PDF)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=nhgxbp4Dauc:BemYZpt88nA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=nhgxbp4Dauc:BemYZpt88nA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=nhgxbp4Dauc:BemYZpt88nA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=nhgxbp4Dauc:BemYZpt88nA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=nhgxbp4Dauc:BemYZpt88nA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=nhgxbp4Dauc:BemYZpt88nA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=nhgxbp4Dauc:BemYZpt88nA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=nhgxbp4Dauc:BemYZpt88nA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/nhgxbp4Dauc" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/website-optimization-guide-part-three/</feedburner:origLink></item>
    <item>
      <title>Website Optimization Guide: Part Two</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/cNnQR-FXWnk/</link>
      <pubDate>Mon, 22 Dec 2008 00:00 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/website-optimization-guide-part-two/</guid>
      <description>&lt;p&gt;Successful websites are constantly evaluated for performance and usability. Before you start building links with other domains, you should make sure that your website is in working properly in order to get the most benefit.&lt;/p&gt;

&lt;p&gt;In part one of our website optimization guide, we focused on front-end performance techniques. Today, we’ll look at some other optimizations that pertain more site’s overall construction and dealing with external files such as PDFs.&lt;/p&gt;

&lt;h3&gt;Missed Part One?&lt;/h3&gt;

&lt;p&gt;Be sure to read the &lt;a href="http://www.ethanandjamie.com/blog/39-seo/77-website-optimization-guide-1"&gt;first article on website optimization&lt;/a&gt; so you don’t miss anything.&lt;/p&gt;

&lt;h3&gt;Separate Content from Presentation&lt;/h3&gt;

&lt;p&gt;Separating content from presentation is the cornerstone of web standards. In lay-person’s terms, this means that pages are segmented into two different sections, the relevant text (&lt;abbr title="Hypertext Markup Language"&gt;HTML&lt;/abbr&gt;) and the visual formatting (&lt;abbr title="Cascading Style Sheet"&gt;CSS&lt;/abbr&gt;).&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Sites that use this approach will load faster and are more meaningful to search engines since it content can be organized in an optimal fashion.&lt;/li&gt;
&lt;li&gt;Standards-compliant sites are accessible to all users regardless of physical or cognitive disabilities. In a 2006 lawsuit, &lt;a title="Target was sued" href="http://news.cnet.com/Blind-patrons-sue-Target-for-site-inaccessibility/2100-1030_3-6038123.html?tag=nefd.top"&gt;Target was sued&lt;/a&gt; for ignoring these principles.&lt;/li&gt;
&lt;li&gt;Sites that separate markup from presentation will experience lower maintenance costs since articles can be reused and adjusted with minimal effort. This is especially handy when it comes time to redesign.&lt;/li&gt;
&lt;li&gt;Your site is done incorrectly if you don’t use web standards! This isn’t my opinion, it is the standard spec set by the &lt;a title="W3C" href="http://www.w3.org/"&gt;&lt;abbr title="World Wide Web Consortium"&gt;W3C&lt;/abbr&gt;&lt;/a&gt;, the professional organization for web development languages.
&lt;/li&gt;
&lt;li&gt;&lt;a title="More reasons" href="http://icant.co.uk/webstandardsforbusiness/pmwiki.php/Main/Arguments"&gt;And many more reasons&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Add Metadata&lt;/h3&gt;

&lt;p&gt;Adding &lt;a title="metadata" href="http://geology.usgs.gov/tools/metadata/tools/doc/faq.html#q1.1"&gt;metadata&lt;/a&gt;, especially descriptions, to your pages can really help performance in search engines. This provides an overview of the content to search engines and the user since the description shows up on the &lt;abbr title="Search Engine Results Page"&gt;SERP&lt;/abbr&gt;. Meta keywords are less important than descriptions, but can still be beneficial if you avoid the temptation to overload a page with keywords (called keyword stuffing) and stick to 4-8 well targeted terms.
For some quick keyword ideas, it is a good idea to run the article through &lt;a href="https://adwords.google.com/select/KeywordToolExternal" title="Keyword suggestion tool from Google"&gt;Google’s Keyword Tool&lt;/a&gt; prior to publishing.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/google-keyword-tool.png" class="caption" title="Google's Keyword Tool can help you come up with targeted keyword ideas" alt="Results from Google's Keyword Tool" /&gt;&lt;/p&gt;

&lt;h3&gt;Use Semantic Coding&lt;/h3&gt;

&lt;p&gt;Just as metadata can be used to provide meaning to the document content, semantic naming conventions provide additional meaning through the HTML code. This can be achieved by using things such as the title attribute on images and giving meaningful names to classes and ids.&lt;/p&gt;

&lt;p&gt;Semantic naming allows for intuitive development, easier maintenance, and it can provide an enhanced browsing experience through &lt;a title="microformats" href="http://microformats.org/about/"&gt;microformats&lt;/a&gt;, a meaningful set of markup that allows the user to extract additional data from a page.&lt;/p&gt;

&lt;h3&gt;Use Friendly URL Rewriting&lt;/h3&gt;

&lt;p&gt;The way this works is to take an unfriendly URL such as http://www.example.com/index.php?p=50a and provide instruction to the server to give the URL a more user-friendly format such as http://www.example.com/contact. URL rewriting is beneficial to both humans and search engines because
it is easier to read addresses that take advantage of this technique.
Many sites using a &lt;abbr title="Content Management System"&gt;CMS&lt;/abbr&gt; will have this option available to manage URL rewriting for their pages in the admin back-end, but the same option is available through the .htaccess file in Apache in cases where the CMS won’t allow updating or it is a unique scenario such as a marketing promotion that requires special handling.&lt;/p&gt;

&lt;p&gt;One particularly useful example is to redirect the non-www version of a site (http://example.com) to the www version (http://www.example.com) by putting the following in your .htaccess file:&lt;/p&gt;

&lt;pre&gt;#redirects non-www to www
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]&lt;/pre&gt;

&lt;p&gt;This helps prevent any duplicate content issues if Google happens to index both www and non-www versions of the site and prevents any ensuing penalty in rankings.&lt;/p&gt;

&lt;h3&gt;Use Robots.txt to Help Guide Search Engines&lt;/h3&gt;

&lt;p&gt;Robots (aka searchbots, crawlers, or spiders) are the automated programs that search engines send out looking for content to add to their index. Robots.txt is a plain-text file located in the root folder containing instructions for search engines on which directories to crawl. This isn’t a surefire way to keep pages out of search engine’s index, but it is a helpful way to offer some guidance.&lt;/p&gt;

&lt;p&gt;A search engine will want to crawl through every directory by default, but greater control can be obtained by creating your own file to guide a searchbot to the most relevant content. On this site, I use a robots.txt file to restrict access to CSS, Javascript, or other folders containing modules for my Joomla CMS because I’d rather have search engines look at my blog articles, site pages, uploaded documents, and images. These files can be quite limited in scope as is the case with &lt;a title="my robots.txt" href="http://www.ethanandjamie.com/robots.txt"&gt;my robots.txt&lt;/a&gt;, or quite extensive such as the &lt;a title="Whitehouse.gov robots file" href="http://www.whitehouse.gov/robots.txt"&gt;Whitehouse.gov file&lt;/a&gt;. &lt;strong&gt;UPDATE:&lt;/strong&gt; during the redesign that took place during the Obama administration, the Whitehouse has changed their robots.txt file. You can view the old version at &lt;a href="http://pastebin.com/f18309565"&gt;Pastebin&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Create an XML site map&lt;/h3&gt;

&lt;p&gt;Where robots.txt is like a compass, an &lt;a title="XML Sitemap" href="http://www.sitemaps.org/protocol.php"&gt;XML Sitemap&lt;/a&gt; is like GPS for the site architecture. Sitemaps give search engines a list of URL to crawl. Other helpful information such as the importance of a page in the site structure and how often the page is modified can also be included.&lt;/p&gt;

&lt;p&gt;Best of all, it is super easy to &lt;a title="generate a sitemap" href="http://www.xml-sitemaps.com/"&gt;generate a sitemap&lt;/a&gt; and then &lt;a title="update it continually" href="http://googlewebmastercentral.blogspot.com/2008/12/sitemap-submission-made-simple.html"&gt;update it continually&lt;/a&gt; as you add more pages to the site architecture.&lt;/p&gt;

&lt;h3&gt;Optimize Documents&lt;/h3&gt;

&lt;p&gt;Sometimes it is necessary to provide a file that can be downloaded file for offline use. Search engines index many document formats so these documents can be optimized for human users and search engines just as it can with HTML content. In order to get started, you need to think of everything a document will do and what it contains.&lt;/p&gt;

&lt;h4&gt;File Format&lt;/h4&gt;

&lt;p&gt;PDF is the format of choice. The only reason you’d want to use another format is if the file contains some sort of interactivity such as embedded multimedia, transition, or is a form that can’t be replicated as a PDF.
Whatever format is used, it is best to give documents meaningful file names just as you would with images. Ideally, the name should include a keyword and be hyphenated if the file name has several words.&lt;/p&gt;

&lt;h4&gt;File Size&lt;/h4&gt;

&lt;p&gt;While many people have high speed connections, there are still people with dial-up, and not everyone is willing to download a 79MB file. Documents with large file sizes should be broken up into several parts or zipped up at the very least. If you are using a PDF, Acrobat has a “Fast Web Preview” option that should be used for anything offered online.&lt;/p&gt;

&lt;h4&gt;Metadata&lt;/h4&gt;

&lt;p&gt;Most electronic document formats will allow you to enter metadata just as you can with HTML pages. Including metadata for files posted online can help site performance in search engines, especially if you are trying to rank for content located inside of a PDF.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/stories/pdf-metadata.png" class="caption" title="Adding metadata to PDFs can help documents perform better in search engines" alt="Adding metadata to a PDF in Scribus" /&gt;&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;As you can see, there are many adjustments that can be made to get your website performing better with users and search engines. In the next and final post of this series, we’ll look at some aesthetic principles, experience-driven optimizations, and provide a checklist for you to keep track of your own progress.&lt;/p&gt;

&lt;h3&gt;Other Reading&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ethanandjamie.com/blog/39-seo/77-website-optimization-guide-1"&gt;Website Optimization Guide: Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ethanandjamie.com/blog/39-seo/79-website-optimization-guide-3"&gt;Website Optimization Guide: Part 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ethanandjamie.com/files/website-optimization-checklist.pdf"&gt;Website Optimization Checklist (PDF)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=cNnQR-FXWnk:OLfWaiHss6Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=cNnQR-FXWnk:OLfWaiHss6Q:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=cNnQR-FXWnk:OLfWaiHss6Q:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=cNnQR-FXWnk:OLfWaiHss6Q:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=cNnQR-FXWnk:OLfWaiHss6Q:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=cNnQR-FXWnk:OLfWaiHss6Q:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=cNnQR-FXWnk:OLfWaiHss6Q:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=cNnQR-FXWnk:OLfWaiHss6Q:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/cNnQR-FXWnk" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/website-optimization-guide-part-two/</feedburner:origLink></item>
    <item>
      <title>Website Optimization Guide: Part One</title>
      <link>http://feedproxy.google.com/~r/EthanGardnerWebDesign/~3/y56ZrAeKinY/</link>
      <pubDate>Fri, 12 Dec 2008 00:00 -0500</pubDate>
      <guid isPermaLink="false">http://www.ethangardner.com/articles/website-optimization-guide-part-one/</guid>
      <description>&lt;p&gt;A &lt;a href="http://home.blarg.net/%7Eglinden/StanfordDataMining.2006-11-29.ppt" title="recent study"&gt;recent study&lt;/a&gt; has shown that a half-second increase in download time can result in a 20% loss of traffic. With so much competition in the marketplace, it is becoming increasingly more important to optimize website content.&lt;/p&gt;

&lt;p&gt;Website optimization is an up-and-coming field and is a natural fit for someone with front-end development experience. Over the next series of posts, I will examine ways to improve the performance of websites in terms of speed, usability, and on-page SEO.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.ethanandjamie.com/images/stories/peregrine-falcon.jpg" title="Website optimization is a series of enhancements that improve site performance." class="caption" alt="Peregrine Falcon" /&gt;&lt;/p&gt;

&lt;h3&gt;Title Tags&lt;/h3&gt;

&lt;p&gt;Meaningful title tags are just as important to humans as they are to search engines. Well-crafted page titles benefit the user by giving information about the page content on the search engine results pages (SERPs). Page titles should preferably contain at least two of these three components: the site URL, the company name, and an overview of the content be unique for each page on a site.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;h4&gt;Good Title Text:&lt;/h4&gt;&lt;p&gt;Amazon.com: Kindle: Amazon’s Wireless Reading Device: Kindle Store&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;h4&gt;Bad Title Text:&lt;/h4&gt;&lt;p&gt;Apple&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep in mind that search engines place limits of about 65 characters for page titles on the SERPs, so it best to use that as a guideline when writing.&lt;/p&gt;

&lt;h3&gt;Relevant content&lt;/h3&gt;

&lt;p&gt;Readers on the web have a short attention span, so it is best to keep copy short and concise. Copy that is to-the-point will not only be more relevant to human visitors, but it will also help earn high placement in &lt;a title="long-tail search" href="http://www.wired.com/wired/archive/12.10/tail.html"&gt;long-tail search&lt;/a&gt; results, the most qualified and targeted traffic a search engine will send to your site. Don’t be afraid to use images, headings, and bullets, as this helps make content scannable and allows the user to information more quickly.&lt;/p&gt;

&lt;h3&gt;Descriptive Anchor Text&lt;/h3&gt;

&lt;p&gt;Search engines weigh link text more heavily than they do for regular paragraph text, so it makes sense to use descriptive text here as well. Any time “click here” is used for anchor text is a wasted opportunity.
&lt;/p&gt;

&lt;p&gt;I’m not an Internet historian, but I would imagine “click here” got started because someone in the marketing department thought the user needed a call to action. Calls to action are a good thing, however, “click here” doesn’t describe the link contents and loses all sense of context when printed. “Click here” also gives no benefit for search engine since it is competing with 1.4 billion results pages any time it is used.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;h4&gt;Good Anchor Text:&lt;/h4&gt;&lt;p&gt;The best values in LCD and plasma TVs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;h4&gt;Bad Anchor Text:&lt;/h4&gt;&lt;p&gt;Click here&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="clearL"&gt;Proper Use of Headings, Strong, and Em Elements&lt;/h3&gt;

&lt;p&gt;Headings (h1–h6), strong, and em tags are all elements that are given greater importance by the search engines. From a user standpoint, they help to create a visual hierarchy and focus attention on the more important pieces of a work.&lt;/p&gt;

&lt;p&gt;Generally, the h1 element should only be used once per page, the h2 element should be used three times or less, and h3–h6 should comprise the subheadings, pull quotes and other featured content areas. I have seen people wrap their whole page in a heading tag. Do not do this! It can actually do more harm than good.&lt;/p&gt;

&lt;p&gt;Strong and em elements are a little different since they are meant to display inline with other text and should be used on a discretionary basis. It is interesting to note that screen readers &lt;a href="http://www.paciellogroup.com/blog/?p=41" title="do not emphasize the strong or em tag"&gt;do not emphasize the strong or em tag&lt;/a&gt;, but the search engines do take these elements into account.&lt;/p&gt;

&lt;h3&gt;Use Image Replacement Techniques for Graphic Headings&lt;/h3&gt;

&lt;p&gt;Most text on a page should use a &lt;a title="web-safe font" href="http://en.wikipedia.org/wiki/Web-safe_fonts"&gt;web-safe font&lt;/a&gt;, but some instances dictate the use of a different typeface for headings, tag lines, slogans, and logos. In the past, many people have just inserted a sourced image, which can be detrimental to page performance and accessibility.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.ethanandjamie.com/images/stories/film-strip.jpg" title="Image replacement is a standard part of the web optimization toolkit." class="caption" alt="Film canister" /&gt;&lt;/p&gt;

&lt;p&gt;In cases that require a non-safe typeface, the best solution is to use an image replacement technique so the text remains accessible to users and easily-interpreted by search engines. There are three techniques that I suggest depending on the application.&lt;/p&gt;

&lt;h4 class="clearL"&gt;Facelift Image Replacement (&lt;a title="FLIR" href="http://facelift.mawhorter.net/"&gt;FLIR&lt;/a&gt;):&lt;/h4&gt;

&lt;p&gt;This uses a combination of PHP and Javascript to render a font and replace a block of text with an image file.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;h6&gt;Pros:&lt;/h6&gt;&lt;p&gt;Requires no additional software. Works over multi-colored, gradient, or textured backgrounds. Can degrade gracefully with images off through use of the detect images plugin.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;h6&gt;Cons:&lt;/h6&gt;&lt;p&gt;Requires Javascript. Causes a brief flicker while the text is being replaced with an image. Only for use with PHP sites. Can’t do hover states if the image is a link.
        &lt;/p&gt;
    &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 class="clearL"&gt;Scalable Inman Flash Replacement (&lt;a title="sIFR" href="http://www.mikeindustries.com/blog/sifr/"&gt;sIFR&lt;/a&gt;)&lt;/h4&gt;

&lt;p&gt;
    A replacement technique that embeds a typeface in a .swf file and writes text dynamically using Javascript. You used to need Flash to do this, but now there is a &lt;a href="http://www.coffeecup.com/sifr-font-maker/" title="free tool to convert fonts to Flash"&gt;free tool to convert fonts to Flash&lt;/a&gt;.
&lt;/p&gt;

&lt;ul class="twoColList"&gt;
    &lt;li&gt;
        &lt;h6&gt;Pros:&lt;/h6&gt;
        &lt;p&gt;
            Degrades gracefully with images and/or Javascript turned off. Can have a hover state for links. Doesn’t break when text is resized in IE6 and below.
        &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;h6&gt; Cons:&lt;/h6&gt;
        &lt;p&gt;
            Requires Javascript and Flash Player plugin. Text blocks show up blank until the rest of the page is done loading. Only works on solid color backgrounds.
        &lt;/p&gt;
    &lt;/li&gt;
&lt;/ul&gt;

&lt;h4 class="clearL"&gt;CSS Image Replacement&lt;/h4&gt;

&lt;p&gt;
    There are many different &lt;a href="http://www.mezzoblue.com/tests/revised-image-replacement/" title="techniques for css image replacement"&gt;techniques for CSS image replacement&lt;/a&gt;. The technique I am detailing is the Dave Shea enhancement of the Leahy/Langridge method.
&lt;/p&gt;

&lt;ul class="twoColList"&gt;
    &lt;li&gt;
        &lt;h6&gt; Pros:&lt;/h6&gt;
        &lt;p&gt;
            Works with images off. No flicker or delayed loading. Images in the CSS files can be made into a sprite resulting in reduced load on the client and server. Doesn’t rely on Javascript.
        &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;h6&gt;Cons:&lt;/h6&gt;
        &lt;p&gt;
            No hover state if the image is a link. Only works on solid color backgrounds. Amount of text is limited to what can be covered up by the image. Can be time consuming if there are a lot of text that need to be replaced.
        &lt;/p&gt;
    &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="clearL"&gt;Use Alt Text for Images&lt;/h3&gt;

&lt;p&gt;
    You can’t have valid markup without using alt text for images, so the reasons why people skip this step are completely lost on me. The alt attribute improves accessibility by adding an alternate description for people who use screen readers or browse with images turned off.
&lt;/p&gt;

&lt;p&gt;
    Adding alt text for images is also a great time to get more content in front of search engines. Search engines have a voracious appetite for content, and since image search is the second &lt;a title="fastest growing forms of vertical search" href="http://www.searchengineguide.com/liana-evans/5-tips-for-optimizing-images-for-search.php"&gt;fastest growing forms of vertical search&lt;/a&gt;
    on the net, it is a win-win scenario for the site owner. Using carefully crafted alt text can drive large amounts of traffic to a site which has huge potential for conversions.
&lt;/p&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;
    Though the performance enhancements are typically more measurable for larger sites, anyone can benefit from these techniques. In the subsequent articles, I will look at more client-side optimizations as well as some techniques on the server, and finish it all off with a free PDF checklist for you to keep track of your own optimizations.
&lt;/p&gt;

&lt;h3&gt;Other Reading&lt;/h3&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.ethanandjamie.com/blog/39-seo/78-website-optimization-guide-2"&gt;Website Optimization Guide: Part 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ethanandjamie.com/blog/39-seo/79-website-optimization-guide-3"&gt;Website Optimization Guide: Part 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ethanandjamie.com/files/website-optimization-checklist.pdf"&gt;Website Optimization Checklist (PDF)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=y56ZrAeKinY:0mXCSorUhzY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=y56ZrAeKinY:0mXCSorUhzY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=y56ZrAeKinY:0mXCSorUhzY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=y56ZrAeKinY:0mXCSorUhzY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=y56ZrAeKinY:0mXCSorUhzY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=y56ZrAeKinY:0mXCSorUhzY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?i=y56ZrAeKinY:0mXCSorUhzY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?a=y56ZrAeKinY:0mXCSorUhzY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/EthanGardnerWebDesign?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/EthanGardnerWebDesign/~4/y56ZrAeKinY" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.ethangardner.com/articles/website-optimization-guide-part-one/</feedburner:origLink></item>
  </channel>
</rss>

