<?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:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Acoustic Web Design</title>
	
	<link>http://www.acousticwebdesign.net</link>
	<description>Attractive, easy to use, websites.</description>
	<lastBuildDate>Sun, 25 Sep 2011 00:29:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/acousticwebdesign" /><feedburner:info uri="acousticwebdesign" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item>
		<title>Creating Virtual Hosts with Apache 2 on Mac OS X</title>
		<link>http://www.acousticwebdesign.net/web-design/creating-virtual-hosts-with-apache-2-on-mac-os-x/</link>
		<comments>http://www.acousticwebdesign.net/web-design/creating-virtual-hosts-with-apache-2-on-mac-os-x/#comments</comments>
		<pubDate>Mon, 17 Jan 2011 16:23:57 +0000</pubDate>
		<dc:creator>Mitchell Hall</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://www.acousticwebdesign.net/?p=325</guid>
		<description><![CDATA[Virtual hosting is a feature of Apache that allows you to associate a domain name with a directory on your web sever. This is very useful when developing a website because it more accurately reflects the environment your site will be in when deployed and it also allows you to reference images and other resources</p><p class="readmore"><a href="http://www.acousticwebdesign.net/web-design/creating-virtual-hosts-with-apache-2-on-mac-os-x/">Continue Reading &#8230;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Virtual hosting is a feature of Apache that allows you to associate a domain name with a directory on your web sever.  This is very useful when developing a website because it more accurately reflects the environment your site will be in when deployed and it also allows you to reference images and other resources using root relative paths such as /images/myimage.png.</p>
<p>To create a virtual host with apache 2 running on Mac OS X 10.5 and later, you simply need to edit the 3 files files listed below.  All of these files require root privileges to edit them.  Use a command line editor, BBEdit, Smultron, or similar editor to modify these files.  These editors allow you to enter a root password easily when saving the file.</p>
<ol>
<li>/etc/apache2/httpd.conf</li>
<li>/etc/apache2/extra/httpd-vhosts.conf</li>
<li>/etc/hosts</li>
</ol>
<h3>Enable Virtual Hosts in Apache 2</h3>
<p>First you need to enable virtual hosts in apache by uncommenting a line in /etc/apache2/httpd.conf.  You only need to do this once.</p>
<p>Open the file in your editor and scroll down until you find the lines shown below, it should be around line 465.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#Virtual hosts </span>
<span style="color: #666666; font-style: italic;">#Include /private/etc/apache2/extra/httpd-vhosts.conf</span></pre></div></div>

<p>Uncomment the second line by deleting the pound sign (#) in front of it so it looks like this and save the file.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#Virtual hosts </span>
Include <span style="color: #000000; font-weight: bold;">/</span>private<span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>extra<span style="color: #000000; font-weight: bold;">/</span>httpd-vhosts.conf</pre></div></div>

<h3>Add a New Virtual Host Configuration</h3>
<p>Next, you need to add a new virtual host configuration in /etc/apache2/extra/httpd-vhosts.conf.  Append the following to the end of the file and edit to match your site.</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;">&lt;VirtualHost *:<span style="">80</span>&gt;
    DocumentRoot <span style="color: #933;">&quot;/Users/username/Sites/acousticwebdesign&quot;</span>
    ServerName acousticwebdesign.local
&lt;/VirtualHost&gt;</pre></div></div>

<p>DocumentRoot is the path to your websites&#8217; root directory.  ServerName is the domain you will use to access the site.</p>
<h3>Add an Entry to /etc/hosts</h3>
<p>Add the following to the end of etc/hosts.  Replace acousticwebdesign.local with the domain you entered as ServerName in the last step.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">  127.0.0.1 acousticwebdesign.local</pre></div></div>

<p>Restart Apache to enable your new virtual hosts.  Now when you visit http://acousticwebdesign.local you will be redirected to your local site.  </p>
<p>It&#8217;s a bad idea to use the same domain as your live site, since any time you visit that domain on this computer, you will be redirected to your local site.</p>
<p>Questions, Complaints, Concerns?  Leave a comment a below. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.acousticwebdesign.net/web-design/creating-virtual-hosts-with-apache-2-on-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating Custom Meta Boxes in WordPress</title>
		<link>http://www.acousticwebdesign.net/web-design/creating-custom-meta-boxes-in-wordpress/</link>
		<comments>http://www.acousticwebdesign.net/web-design/creating-custom-meta-boxes-in-wordpress/#comments</comments>
		<pubDate>Sun, 28 Nov 2010 10:29:20 +0000</pubDate>
		<dc:creator>Mitchell Hall</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.acousticwebdesign.net/?p=276</guid>
		<description><![CDATA[In Using the WordPress Media Uploader With Custom Fields, I demonstrated how to integrate the WordPress media uploader to get a file url using the native media uploader in WordPress. In this post, I&#8217;ll show you how to create a custom meta box to house your plugin/theme specific meta data in its own meta box</p><p class="readmore"><a href="http://www.acousticwebdesign.net/web-design/creating-custom-meta-boxes-in-wordpress/">Continue Reading &#8230;</a></p>]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://www.acousticwebdesign.net/web-design/adding-the-worpress-image-uploader-to-custom-fields-in-wordpress/">Using the WordPress Media Uploader With Custom Fields</a>, I demonstrated how to integrate the WordPress media uploader to get a file url using the native media uploader in WordPress.  In this post, I&#8217;ll show you how to create a custom meta box to house your plugin/theme specific meta data in its own meta box on the edit page/post page.  The meta box we&#8217;ll be creating is shown below.</p>
<p><img class="alignnone size-full wp-image-302" title="Custom Meta Box" src="http://www.acousticwebdesign.net/wp-content/uploads/2010/11/metabox.jpg" alt="Wordpress Edit Post Screen Showing Custom Meta Box" width="520" height="361" /></p>
<p> There are 3 steps in creating a custom meta box in wordpress:</p>
<ol>
<li>Register a hook on the <code>admin_menu</code> action and call <code>add_meta_box()</code> in your function to register a new meta box.</li>
<li>Create a function that outputs the HTML for your meta box. You passed the name of this function to <code>add_meta_box</code> in step 1.</li>
<li>Register a hook on the <code>save_post</code> action and create a function that will save the data in your meta box to the database.</li>
<li>If you are integrating the media uploader, as we are, you will also need to register a hook on the <code>admin_head</code> action and embed the needed JavaScript to obtain URLs from the uploader.  For more info on integrating the media uploader, see <a href="http://www.acousticwebdesign.net/web-design/adding-the-worpress-image-uploader-to-custom-fields-in-wordpress/">Using the WordPress Media Uploader With Custom Fields</a>.</li>
<p>The example code below shows how to create a custom meta box that saves an image as meta data with the page.  The user can upload and choose image using the native WordPress media uploader so there is no need to hunt down URLs.</p>
<p>Note that before saving the URL, we are converting it to an attachment id.  This makes the field much more useful in the rest of your theme and potentially saves space in your database.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'admin_menu'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'addMetaBox'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'save_post'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'saveMetaData'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'admin_head'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'embedUploaderCode'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Define the metabox attributes.</span>
<span style="color: #000088;">$metaBox</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
  <span style="color: #0000ff;">'id'</span>     <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'my-meta-box'</span><span style="color: #339933;">,</span>
  <span style="color: #0000ff;">'title'</span>    <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'My Meta Box'</span><span style="color: #339933;">,</span>
  <span style="color: #0000ff;">'page'</span>     <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'page'</span><span style="color: #339933;">,</span>
  <span style="color: #0000ff;">'context'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'side'</span><span style="color: #339933;">,</span>
  <span style="color: #0000ff;">'priority'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'low'</span><span style="color: #339933;">,</span>
  <span style="color: #0000ff;">'fields'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
      <span style="color: #0000ff;">'name'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'My Custom Image'</span><span style="color: #339933;">,</span>
      <span style="color: #0000ff;">'desc'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'A Custom Image Displayed On Your Site Somewhere.'</span><span style="color: #339933;">,</span>
      <span style="color: #0000ff;">'id'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'myCustomImage'</span><span style="color: #339933;">,</span>  <span style="color: #666666; font-style: italic;">//value is stored with this as key.</span>
      <span style="color: #0000ff;">'class'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'image_upload_field'</span><span style="color: #339933;">,</span>
      <span style="color: #0000ff;">'type'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'media'</span>
    <span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> addMetaBox<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$metaBox</span><span style="color: #339933;">;</span>
  add_meta_box<span style="color: #009900;">&#40;</span><span style="color: #000088;">$metaBox</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$metaBox</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'createMetaBox'</span><span style="color: #339933;">,</span> 
    <span style="color: #000088;">$metaBox</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'page'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$metaBox</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'context'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$metaBox</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'priority'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
* Create Metabox HTML.
*/</span>
<span style="color: #000000; font-weight: bold;">function</span> createMetaBox<span style="color: #009900;">&#40;</span><span style="color: #000088;">$post</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$metaBox</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">function_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'wp_nonce_field'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    wp_nonce_field<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'awd_nonce_action'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'awd_nonce_field'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$metaBox</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'fields'</span><span style="color: #009900;">&#93;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;div class=&quot;awdMetaBox&quot;&gt;'</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">//get attachment id if it exists.</span>
    <span style="color: #000088;">$meta</span> <span style="color: #339933;">=</span> get_post_meta<span style="color: #009900;">&#40;</span><span style="color: #000088;">$post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ID</span><span style="color: #339933;">,</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'media'</span><span style="color: #339933;">:</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>
        &lt;p&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'desc'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/p&gt;
        &lt;div class=&quot;awdMetaImage&quot;&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> 
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$meta</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
          <span style="color: #b1b100;">echo</span> wp_get_attachment_image<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$meta</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'thumbnail'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #000088;">$attachUrl</span> <span style="color: #339933;">=</span> wp_get_attachment_url<span style="color: #009900;">&#40;</span><span style="color: #000088;">$meta</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">echo</span> 
          <span style="color: #0000ff;">'&lt;p&gt;URL: &lt;a target=&quot;_blank&quot; href=&quot;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$attachUrl</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;&gt;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$attachUrl</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/a&gt;&lt;/p&gt;'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>    
        &lt;/div&gt;&lt;!-- end .awdMetaImage --&gt;
        &lt;p&gt;
          &lt;input type=&quot;hidden&quot; 
            class=&quot;metaValueField&quot; 
            id=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot; 
            name=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot;
            value=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$meta</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot; 
          /&gt; 
          &lt;input class=&quot;image_upload_button&quot;  type=&quot;button&quot; value=&quot;Choose File&quot; /&gt; 
          &lt;input class=&quot;removeImageBtn&quot; type=&quot;button&quot; value=&quot;Remove File&quot; /&gt;
        &lt;/p&gt;
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
      <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/div&gt; &lt;!-- end .awdMetaBox --&gt;'</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">//end foreach</span>
<span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">//end function createMetaBox</span>
&nbsp;
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> saveMetaData<span style="color: #009900;">&#40;</span><span style="color: #000088;">$post_id</span><span style="color: #339933;">,</span> <span style="color: #000088;">$post</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">//make sure we're saving at the right time.</span>
  <span style="color: #666666; font-style: italic;">//DOING_AJAX is set when saving a quick edit on the page that displays all posts/pages  </span>
  <span style="color: #666666; font-style: italic;">//Not checking for this will cause our meta data to be overwritten with blank data.</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#41;</span>
    <span style="color: #339933;">||</span> <span style="color: #339933;">!</span>wp_verify_nonce<span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'awd_nonce_field'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'awd_nonce_action'</span><span style="color: #009900;">&#41;</span>
    <span style="color: #339933;">||</span> <span style="color: #000088;">$post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">post_type</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'revision'</span>
    <span style="color: #339933;">||</span> <span style="color: #990000;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'DOING_AJAX'</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$metaBox</span><span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$metaBox</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'fields'</span><span style="color: #009900;">&#93;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$value</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'media'</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #990000;">is_numeric</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #666666; font-style: italic;">//Convert URL to Attachment ID.</span>
      <span style="color: #000088;">$value</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_var</span><span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">&quot;SELECT ID FROM <span style="color: #006699; font-weight: bold;">$wpdb-&gt;posts</span> 
         WHERE guid = '<span style="color: #006699; font-weight: bold;">$value</span>' 
         AND post_type='attachment' LIMIT 1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    update_post_meta<span style="color: #009900;">&#40;</span><span style="color: #000088;">$post_id</span><span style="color: #339933;">,</span> <span style="color: #000088;">$field</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">//end foreach</span>
<span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">//end function saveMetaData</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Add JavaScript to get URL from media uploader.
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> embedUploaderCode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">?&gt;</span>
  <span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
  jQuery<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>ready<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    jQuery<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'.removeImageBtn'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>click<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      jQuery<span style="color: #009900;">&#40;</span>this<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>closest<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'p'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #990000;">prev</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'.awdMetaImage'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>html<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
      jQuery<span style="color: #009900;">&#40;</span>this<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #990000;">prev</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #990000;">prev</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>val<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    jQuery<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'.image_upload_button'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>click<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      inputField <span style="color: #339933;">=</span> jQuery<span style="color: #009900;">&#40;</span>this<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #990000;">prev</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'.metaValueField'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      tb_show<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'media-upload.php?TB_iframe=true'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      window<span style="color: #339933;">.</span>send_to_editor <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>html<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        url <span style="color: #339933;">=</span> jQuery<span style="color: #009900;">&#40;</span>html<span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>attr<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'href'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        inputField<span style="color: #339933;">.</span>val<span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        inputField<span style="color: #339933;">.</span>closest<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'p'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #990000;">prev</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'.awdMetaImage'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>html<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&lt;p&gt;URL: '</span><span style="color: #339933;">+</span> url <span style="color: #339933;">+</span> <span style="color: #0000ff;">'&lt;/p&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
        tb_remove<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">&lt;/script&gt;</span>
  <span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #009900;">&#125;</span><span style="color: #666666; font-style: italic;">//end function embedUploaderCode()</span></pre></div></div>

<p>At first glance, it looks like a lot of work, and it is.  But you only need to do it once.  You&#8217;ll probably want to make this into a generic code library that you can include in each of your themes or plugins that need it.  For a more in depth tutorial showing how to create such a library, check out the excellent tutorial, <a href="http://www.deluxeblogtips.com/2010/04/how-to-create-meta-box-wordpress-post.html">How To Create A Better Meta Box In WordPress Post Editing Page</a>.</p>
<p>Let me know if this was helpful or if you had any problems implementing the custom meta box by leaving a comment below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.acousticwebdesign.net/web-design/creating-custom-meta-boxes-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Creating Start Up Items in Mac OS X</title>
		<link>http://www.acousticwebdesign.net/programming/creating-start-up-items-in-mac-os-x/</link>
		<comments>http://www.acousticwebdesign.net/programming/creating-start-up-items-in-mac-os-x/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 12:06:33 +0000</pubDate>
		<dc:creator>Mitchell Hall</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://www.acousticwebdesign.net/?p=292</guid>
		<description><![CDATA[There are three ways to get a program to run automatically when OS X starts up: Login items, Startup items, and launchd daemons. Startup items and launchd daemons are used to launch processes that run in the background like Apache or MySQL. Login items are meant for general applications (like Mail or Text Expander) that</p><p class="readmore"><a href="http://www.acousticwebdesign.net/programming/creating-start-up-items-in-mac-os-x/">Continue Reading &#8230;</a></p>]]></description>
			<content:encoded><![CDATA[<p>There are three ways to get a program to run automatically when OS X starts up: <strong>Login items</strong>, <strong>Startup items</strong>, and <strong>launchd daemons</strong>.  Startup items and <code>launchd</code> daemons are used to launch processes that run in the background like Apache or MySQL.  Login items are meant for general applications (like Mail or Text Expander) that usually have some kind of user interface.  I&#8217;ll show you how to create all three in this post.</p>
<h4>Launching  General Applications at Start up with Login Items</h4>
<p>If you want to start an application (as opposed to a process or daemon) every time you login, simply add the application to the Login Items list in the Accounts preference pane in System Preferences.<br />
<img src="http://www.acousticwebdesign.net/wp-content/uploads/2010/11/accounts.jpg" alt="" title="accounts" width="525" height="419" class="alignnone size-full wp-image-299" /></p>
<h3>Launching Background Processes with Startup Items and launchd Daemons</h3>
<p>To launch a daemon or background process (like apache or MySQL) every time OS X starts, you must create either a <code>launchd</code> daemon (OS X 10.4+) or a Startup item (OS X 10.3 and earlier) depending on what version of OS X you are using.  While you can still create Startup items in OS X 10.4 and later, Apple recommends using <code>launchd</code> configurations for the many advantages <code>launchd</code> provides.  Check out <a href="http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html#//apple_ref/doc/uid/10000172i-SW7-BCIEDDBJ">Launching Custom Daemons Using launchd</a> on the Apple Developer website for more information about <code>launchd</code>.</p>
<h4>Create a launchd Daemon (OS X 10.4 and Later)</h4>
<p>To create a <code>launchd</code> Daemon, you simply have to create a property list file in /Library/LaunchDaemons that points to the executable you want to run.</p>
<p>1. Create a properties list in /Library/LaunchDaemons.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">touch</span> <span style="color: #000000; font-weight: bold;">/</span>Library<span style="color: #000000; font-weight: bold;">/</span>LaunchDaemons<span style="color: #000000; font-weight: bold;">/</span>com.apache.apache2svn.plist</pre></div></div>

<p>2. Edit the plist and point it at your executable.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #00bbdd;">&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; </span>
<span style="color: #00bbdd;">    &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plist</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dict<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Label<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>com.apache.apache2svn<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>ProgramArguments<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;array<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>/Users/mitch/dev/apache2/bin/apachectl<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>start<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/array<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>RunAtLoad<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;true</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>KeepAlive<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;true</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dict<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plist<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p><code>Label</code> is a unique name to identify your daemon.<br />
<code>Program Arguments</code> is the path to the executable you want to run.<br />
<code>RunAtLoad</code> tells <code>launchd</code> to run your daemon when OS X starts up.<br />
<code>KeepAlive</code> tells <code>launchd</code> that the process should remain running indefinitely (<code>launchd</code> can run process on demand and terminate them after running, KeepAlive tells <code>launchd</code> that this is not an on demand process).</p>
<p>3. Restart your computer and your process should be running.</p>
<h4>Create a Startup Item (OS X 10.3 and Earlier)</h4>
<p>To create a Startup item, you need to create a new directory under /Library/StartupItems that contains a properties list file and a shell script.  The shell script should be the same name as the directory.  The property list must be named StartupParameter.plist. </p>
<p>1. Create a directory under /Library/StartupItems.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>Library<span style="color: #000000; font-weight: bold;">/</span>StartupItems<span style="color: #000000; font-weight: bold;">/</span>apache2svn</pre></div></div>

<p>2. Create an executable with the same name as the directory.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">touch</span> <span style="color: #000000; font-weight: bold;">/</span>Library<span style="color: #000000; font-weight: bold;">/</span>StartupItems<span style="color: #000000; font-weight: bold;">/</span>apache2svn<span style="color: #000000; font-weight: bold;">/</span>apache2svn
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> a+x <span style="color: #000000; font-weight: bold;">/</span>Library<span style="color: #000000; font-weight: bold;">/</span>StartupItems<span style="color: #000000; font-weight: bold;">/</span>apache2svn<span style="color: #000000; font-weight: bold;">/</span>apache2svn</pre></div></div>

<p>3.  The executable should look something like this.  Each function either starts, stops, or restarts your process.  You can leave the function body blank if it does not apply to your process.  Don&#8217;t forget to include the <code>. /etc/rc.common</code> and <code>RunService "$1"</code> lines.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
. <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>rc.common
&nbsp;
StartService <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>mitch<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>apachectl start
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
StopService <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>mitch<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>apachectl stop
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
RestartService <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">/</span>Users<span style="color: #000000; font-weight: bold;">/</span>mitch<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>apachectl graceful
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
RunService <span style="color: #ff0000;">&quot;$1&quot;</span></pre></div></div>

<p>4. Create a properties list called StartupParameter.plist.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">touch</span> <span style="color: #000000; font-weight: bold;">/</span>Library<span style="color: #000000; font-weight: bold;">/</span>StartupItems<span style="color: #000000; font-weight: bold;">/</span>apache2svn<span style="color: #000000; font-weight: bold;">/</span>StartupParameter.plist</pre></div></div>

<p>5. The property list should look something like this.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #00bbdd;">&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot; </span>
<span style="color: #00bbdd;">    &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;plist</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dict<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Description<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Apache2 (SVN on Port 8080)<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>OrderPreference<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>None<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Provides<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/key<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;array<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>apache2svn<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/string<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/array<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dict<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/plist<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p><code>Description</code> is a human readable description of your process.<br />
<code>Provides</code>is a unique name that identifies your process.</p>
<p>6. You can test your startup item using the <code>SystemStarter</code> command.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>sbin<span style="color: #000000; font-weight: bold;">/</span>SystemStarter start <span style="color: #ff0000;">&quot;apache2svn&quot;</span></pre></div></div>

<p>7. Otherwise, restart your computer and you&#8217;re process should be running after boot up.</p>
<p>Leave a comment below if you&#8217;re having problems getting you&#8217;re process to run.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.acousticwebdesign.net/programming/creating-start-up-items-in-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using the Worpress Media Uploader With Custom Fields</title>
		<link>http://www.acousticwebdesign.net/web-design/adding-the-worpress-image-uploader-to-custom-fields-in-wordpress/</link>
		<comments>http://www.acousticwebdesign.net/web-design/adding-the-worpress-image-uploader-to-custom-fields-in-wordpress/#comments</comments>
		<pubDate>Thu, 11 Nov 2010 21:43:07 +0000</pubDate>
		<dc:creator>Mitchell Hall</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.acousticwebdesign.net/?p=226</guid>
		<description><![CDATA[WordPress custom fields are useful for customizing posts and pages, but they should be limited to text-based properties .  Many theme developers provide custom fields for images and require their users to enter the URL of the image.  Though effective, this is very unusable and a burden for non-technical users. Finding the correct url and</p><p class="readmore"><a href="http://www.acousticwebdesign.net/web-design/adding-the-worpress-image-uploader-to-custom-fields-in-wordpress/">Continue Reading &#8230;</a></p>]]></description>
			<content:encoded><![CDATA[<p>WordPress custom fields are useful for customizing posts and pages, but they should be limited to text-based properties .  Many theme developers provide custom fields for images and require their users to enter the URL of the image.  Though effective, this is very unusable and a burden for non-technical users.  Finding the correct url and then copying and pasting it into the field is cumbersome and error prone and most users can not be expected to do this properly or have the technical know how.</p>
<p>A much more usable solution is to integrate the WordPress Uploader and allow the user to upload and select files from the media library just like inserting images into a post.  With a small amount of code, this is easily done.</p>
<p>To display the uploader, you need to call the following javascript function.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">tb_show<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">''</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'media-upload.php?TB_iframe=true'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>  After the user uploads and/or selects a file and clicks &#8220;Insert into Post&#8221;, the uploader calls another function, <code>window.send_to_editor(html)</code> and passes in an HTML snippet consisting of an anchor tag linking to the file.  We simply need to override this function and extract the url of the file.  We can then insert the url anywere we want.  Typically, you&#8217;d want to insert the url into a form field that will be saved as meta data with the post or page.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.image_upload_button'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    tb_show<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">''</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'media-upload.php?TB_iframe=true'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    window.<span style="color: #660066;">send_to_editor</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>html<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        url <span style="color: #339933;">=</span> jQuery<span style="color: #009900;">&#40;</span>html<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'href'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#myInputField'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        tb_remove<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>An easy way to include this Javascript is to embed it in the header of the post or page editor.  However, it&#8217;s better to create a separate Javascript file and put your code in there.  Both methods are shown below.</p>
<h4>Embed Javascript in Header</h4>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">function embedUploaderCode() {
?&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
    jQuery(document).ready(function() {
        jQuery('.image_upload_button').click(function() {
            tb_show('', 'media-upload.php?TB_iframe=true');
            window.send_to_editor = function(html) {
                url = jQuery(html).attr('href');
                jQuery('#myInputField').val(url);
                tb_remove();
            };
        return false;
        });
    });
    &lt;/script&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #009900;">&#125;</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'admin_head'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'embedUploaderCode'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h4>Include External Javascript File</h4>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">function my_admin_scripts() {
?&gt;
    &lt;script type=&quot;text/javascript&quot; 
            src=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> bloginfo<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template_directory'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>/lib/MyAdminCode.js&quot;&gt;
    &lt;/script&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #009900;">&#125;</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'admin_head'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'my_admin_scripts'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>If you want to add the image uploader on a page that doesn&#8217;t have an editor, you&#8217;ll need to tell WordPress to load the required javascript and css for the uploader.  This is easily done in functions.php with the code below.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> loadUploaderScripts <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    wp_enqueue_script<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'media-upload'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    wp_enqueue_script<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'thickbox'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'admin_print_scripts'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'loadUploaderScripts'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> loadUploaderStyles<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    wp_enqueue_style<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'thickbox'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'admin_print_styles'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'loadUploaderStyles'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>My next post will show how to create custom meta boxes that use the image uploader.  So keep checking back or subscribe to my RSS Feed to be notified when the article is posted.  Also, let me know if you have any problems getting this to work by leaving a comment below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.acousticwebdesign.net/web-design/adding-the-worpress-image-uploader-to-custom-fields-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How To Create WordPress 3 Navigation Menus In Your Theme or Plugin Code</title>
		<link>http://www.acousticwebdesign.net/wordpress/how-to-create-wordpress-3-navigation-menus-in-your-theme-or-plugin-code/</link>
		<comments>http://www.acousticwebdesign.net/wordpress/how-to-create-wordpress-3-navigation-menus-in-your-theme-or-plugin-code/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 07:57:49 +0000</pubDate>
		<dc:creator>Mitchell Hall</dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.acousticwebdesign.net/?p=193</guid>
		<description><![CDATA[The new navigation menu module in WordPress 3.0 is great. It&#8217;s a piece of cake to add and remove menu items from the admin interface. But what if you want to add pages automatically when a new page is created. There&#8217;s an option to add top level pages automatically, but what if you want to</p><p class="readmore"><a href="http://www.acousticwebdesign.net/wordpress/how-to-create-wordpress-3-navigation-menus-in-your-theme-or-plugin-code/">Continue Reading &#8230;</a></p>]]></description>
			<content:encoded><![CDATA[<p>The new navigation menu module in WordPress 3.0 is great.  It&#8217;s a  piece of cake to add and remove menu items from the admin interface.   But what if you want to add pages automatically when a new page is  created.  There&#8217;s an option to add top level pages automatically, but  what if you want to add subpages automatically?  Read on to find out how to do just  that.  It&#8217;s easier than you think.</p>
<p>Creating navigation menus programmatically (yes, it&#8217;s a real word) is particularly useful when testing your theme or plugin and for websites that have a large number of pages.  Instead of having to manually create your menus, you can write a small code snippet to do it for you.</p>
<p>The function you need for this operation is <code>wp_update_nav_menu_item</code> and it&#8217;s defined in /wp-includes/nav-menu.php.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">wp_update_nav_menu_item<span style="color: #009900;">&#40;</span>
    <span style="color: #000088;">$menu_id</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
    <span style="color: #000088;">$menu_item_db_id</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
    <span style="color: #000088;">$menu_item_data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span></pre></div></div>

<p><code>$menu_id</code> is the id of the menu you are adding a new item to.</p>
<p><code>$menu_item_db_id</code> Use 0 to create a new menu item.</p>
<p><code>$menu_item_data</code> is an array containing data about the new menu item.  See below.</p>
<h3>Example</h3>
<p>In the code below, I am adding a new menu item for the page titled &#8220;About Us&#8221; to the menu named &#8220;Main Navigation Menu&#8221;.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$mymenu</span> <span style="color: #339933;">=</span> wp_get_nav_menu_object<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Main Navigation Menu'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$menuID</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span> <span style="color: #000088;">$mymenu</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">term_id</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$myPage</span> <span style="color: #339933;">=</span> get_page_by_title<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'About Us'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
itemData <span style="color: #339933;">=</span>  <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'menu-item-object-id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$myPage</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ID</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'menu-item-parent-id'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'menu-item-position'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'menu-item-object'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'page'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'menu-item-type'</span>      <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'post_type'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'menu-item-status'</span>    <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'publish'</span>
  <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
wp_update_nav_menu_item<span style="color: #009900;">&#40;</span><span style="color: #000088;">$menuID</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$itemData</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>First we need to get the id of the menu we are adding a new item to.  You can either look it up by name using <code>wp_get_nav_menu_object()</code> and passing the name of the menu (not the unique id) as in the example above or you can hover over the menu&#8217;s tab in the admin interface and look at the status bar of your browser. This only works if the menu&#8217;s tab is inactive (i.e. you&#8217;re looking at another menu).</p>
<p>Next we need to get the ID of the page we are creating a menu item for.  This too can be done in code (see line 3 above) or using the same hover trick described in the last paragraph. On the Pages page, simply hover over the name of the page to see the id in the status bar.</p>
<p>On line 5, we have to create an array containing information about the new menu item.  Each field is described below.</p>
<h5>menu-item-object-id</h5>
<p>This is the page id we are creating a menu item for.</p>
<h5>menu-item-parent-id</h5>
<p>Pass in 0 to create a top level menu item.</p>
<p>If you want to nest this menu item under another menu item to create a sub menu, pass the parent menu item&#8217;s id. To get an existing menu item&#8217;s id, hover over the menu item on the Menu&#8217;s screen and look in the status bar of your browser.  You have to hover over the arrow on the right side of the menu item to see the id.</p>
<h5>menu-item-position</h5>
<p>This sets the the position of the menu item.  Strangely, the number represents the position from the top of the menu regardless of whether it is a nested item or not.  See the image below.  The first position is 1.  Setting this field to 0 will append the item to the end of the menu, or to the last child element if nesting this item in a sub menu.  I expect this to change in the future.  It would be much more useful if this were relative to items on the same sub menu.</p>
<p><img src="http://www.acousticwebdesign.net/wp-content/uploads/2010/11/WordpressMenuItemPosition2.png" alt="Graphic showing menu item position functionality" title="WordpressMenuItemPosition" width="535" height="495" class="alignnone size-full wp-image-222" /></p>
<h5>menu-item-object</h5>
<p>Specifies that the menu item represents a page.  Omitting this will not prevent the menu item from being created, but it does remove the word &#8220;Page&#8221; from the menu item and I&#8217;m sure there are other consequences.  If anyone knows more about this field, let me know in the comments.  Hopefully, we&#8217;ll see some documentation soon that will better describe this property. </p>
<h5>menu-item-type</h5>
<p>Passing in &#8216;post-type&#8217; for this field instructs WordPress to fill in details such as page url and title from the existing page or post.</p>
<p>I haven&#8217;t experimented with any other menu-item-type&#8217;s, but apparently, you can pass in &#8216;custom&#8217; or &#8216;taxonomy&#8217; to create different types of menu items. If using these other types, you would need to provide more information such as url and title. See nav-menu.php to find out what else is needed in this case.</p>
<h5>menu-item-status</h5>
<p>If not set to &#8216;publish&#8217;, WordPress will add the menu item as a &#8220;draft&#8221; item and the menu would need to be saved manually on the menu screen before it is visible on your menu.</p>
<p>Finally, on line 13 we call <code>wp_update_nav_menu_item()</code> to create the menu item.  The page should now appear in your menu.  Make sure you only execute this once.  If you don&#8217;t comment out this call after running it, it will continue to create new menu items every time you refresh a page on your site.  </p>
<p>And that&#8217;s it.  Let me know if this was helpful by leaving a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.acousticwebdesign.net/wordpress/how-to-create-wordpress-3-navigation-menus-in-your-theme-or-plugin-code/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>8 Books That Will Make You A Better Web Designer</title>
		<link>http://www.acousticwebdesign.net/web-design/8-books-that-will-make-you-a-better-web-designer/</link>
		<comments>http://www.acousticwebdesign.net/web-design/8-books-that-will-make-you-a-better-web-designer/#comments</comments>
		<pubDate>Sat, 23 Oct 2010 02:23:30 +0000</pubDate>
		<dc:creator>Mitchell Hall</dc:creator>
				<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.acousticwebdesign.net/uncategorized/7-books-that-will-make-you-a-better-web-designer/</guid>
		<description><![CDATA[In order to improve, one must learn and the best place to find quality learning material for the working professional or freelancer still remains in the written word. With so much unverified material on the internet today, I prefer to gain knowledge from a good book wtitten by an experienced authority on his subject. Gathered</p><p class="readmore"><a href="http://www.acousticwebdesign.net/web-design/8-books-that-will-make-you-a-better-web-designer/">Continue Reading &#8230;</a></p>]]></description>
			<content:encoded><![CDATA[<p>In order to improve, one must learn and the best place to find quality learning material for the working professional or freelancer still remains in the written word. With so much unverified material on the internet today, I prefer to gain knowledge from a good book wtitten by an experienced authority on his subject. Gathered here are 7 exceptional books that will make you a better web designer and programmer.</p>
<h4><a href="http://www.amazon.com/Designing-Web-Standards-Jeffrey-Zeldman/dp/0321616952%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321616952">1. Designing with Web Standards (Jeffrey Zeldman)</a></h4>
<p></p>
<h3><a href="http://www.amazon.com/Designing-Web-Standards-Jeffrey-Zeldman/dp/0321616952%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321616952"><img class="floatright clearboth" src="http://ecx.images-amazon.com/images/I/41QV7ZViSCL._SL160_.jpg" alt="Designing with Web Standards Book Cover" width="124" height="160" /></a></h3>
<p>
The first book any person serious about web design should read. In this excellent and easy to read book you&#8217;ll learn how to build websites using the holy trinity of modern web design &#8211; semantic (X)HTML markup, CSS layout, and unobtrusive scripting based on JavaScript and the DOM.</p>
<p>After putting these practices into use, your websites will be easier to code, easier to maintain, easier to find, and compatible with modern (and future) browsers.</p>
<h4><a href="http://www.amazon.com/Dont-Make-Me-Think-Usability/dp/0321344758%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321344758">2. Don&#8217;t Make Me Think: A Common Sense Approach to Web Usability (Steve Krug</a>)</h4>
<p></p>
<h3><a href="http://www.amazon.com/Dont-Make-Me-Think-Usability/dp/0321344758%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321344758"><img class="floatright clearboth" src="http://ecx.images-amazon.com/images/I/51Qnk8fkFPL._SL160_.jpg" alt="Don't Make Me Think Book Cover" width="124" height="160" /></a></h3>
<p>
If you haven&#8217;t read Don&#8217;t Make Me Think, stop what you are doing, Drive to your local bookstore (don&#8217;t order it online, that will take to long), spend the rest of the day reading it. This fantastic book is short, easy to read, engaging, and eye-opening. It&#8217;s full of &#8220;why didn&#8217;t I think of that already&#8221; advice and insights. Almost everything discussed is common sense advice, yet I guarantee you you will benefit from the material.</p>
<p>Reading Don&#8217;t Make me Think and Designing with Web Standards alone will do more for your career as a web designer than anything else.</p>
<h4><a href="http://www.amazon.com/Inbound-Marketing-Found-Google-Social/dp/0470499311%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0470499311">3. Inbound Marketing: Get Found Using Google, Social Media, and Blogs (Brian Halligan and Dharmesh Shah</a>)</h4>
<p></p>
<h3><a href="http://www.amazon.com/Inbound-Marketing-Found-Google-Social/dp/0470499311%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0470499311"><img class="floatright clearboth" src="http://ecx.images-amazon.com/images/I/51WgPVrnY-L._SL160_.jpg" alt="Inbound Marketing Book Cover" width="100" height="160" /></a></h3>
<p>
Inbound Marketing is an excellent guide to doing business in the new world of social media and online marketing. The book succinctly explains how to turn your website and blog into a marketing hub, providing your visitors and customers with remarkable content and generating buzz around the net. Littered throughout are excellent suggestions and step by step instructions on how to leverage social media to bring in new customers. Each chapter ends with a Track Your Progress section that describes the important metrics you should be tracking with your analytics program.</p>
<p>Even though it&#8217;s written for a less technical audience than the web design community, you will find plenty of new ideas and insights littered throughout this fantastic guide to online marketing.</p>
<h4><a href="http://www.amazon.com/CSS-Definitive-Guide-Eric-Meyer/dp/0596527330%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0596527330">4. CSS: The Definitive Guide (Eric A. Meyer)</a></h4>
<p></p>
<h3><a href="http://www.amazon.com/CSS-Definitive-Guide-Eric-Meyer/dp/0596527330%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0596527330"><img class="floatright clearboth" src="http://ecx.images-amazon.com/images/I/41FQ43Yj5gL._SL160_.jpg" alt="CSS: The Definitive Guide Book Cover" width="122" height="160" /></a></h3>
<p>
The only CSS resource you need. Coming from an expert like Eric Meyer, you know you&#8217;re in good hands. No other book comes close to the detail in which this book describes every aspect of css. Don&#8217;t waste your time with other CSS books, this is the only one you need.</p>
<p>The companion to this book, CSS Pocket Reference is a very handy addition to its big brother. It&#8217;s perfect for when you just want to look up the syntax for a particular selector.</p>
<h4><a href="http://www.amazon.com/Stop-Stealing-Sheep-Find-Works/dp/0201703394%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0201703394">5. Stop Stealing Sheep &amp; Find Out How Type Works (Erik Spiekermann, E.M Ginger</a>)</h4>
<p></p>
<h3><a href="http://www.amazon.com/Stop-Stealing-Sheep-Find-Works/dp/0201703394%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0201703394"><img class="floatright clearboth" src="http://ecx.images-amazon.com/images/I/4159MTSVE9L._SL160_.jpg" alt="Stop Stealing Sheep Book Cover" width="106" height="160" /></a></h3>
<p>
A great intro to the intimidating and vast world of typography. Learn how to choose and use type properly from experts in the field.</p>
<p>This is another compact but powerful tome of juicy goodness.</p>
<h4><a href="http://www.amazon.com/PHP-MySQL-Dynamic-Web-Sites/dp/032152599X%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D032152599X">6. PHP 6 and MySQL 5 for Dynamic Web Sites: Visual QuickPro Guide (Larry Ullman</a>)</h4>
<p></p>
<h3><a href="http://www.amazon.com/PHP-MySQL-Dynamic-Web-Sites/dp/032152599X%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D032152599X"><img class="floatright clearboth" src="http://ecx.images-amazon.com/images/I/41NSMXp2hWL._SL160_.jpg" alt="PHP 6 and MySQL 5 Book Cover" width="125" height="160" /></a></h3>
<p>
Coming from a Java background where good books on the subject abound, I was, and still am, disappointed by the lack of good literature on PHP. This book does an adequate job of introducing the language, but it&#8217;s aimed at beginner programmers. I&#8217;ve yet to find a good PHP reference for experienced programmers, but I couldn&#8217;t leave this book out. It contains some excellent information and tips if you&#8217;re willing to dig for it.</p>
<p>PHP in a nutshell is also decent source, but outdated and in need of a revision. If you know of a good PHP reference please let me know in the comments.</p>
<h4><a href="http://www.amazon.com/JavaScript-Definitive-Guide-David-Flanagan/dp/0596101996%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0596101996">7. JavaScript: The Definitive Guide (David Flanagan</a>)</h4>
<p></p>
<h3><a href="http://www.amazon.com/JavaScript-Definitive-Guide-David-Flanagan/dp/0596101996%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0596101996"><img class="floatright clearboth" src="http://ecx.images-amazon.com/images/I/51IJ8LZqxmL._SL160_.jpg" alt="Javascript: The Definitive Guide Book Cover" width="122" height="160" /></a></h3>
<p>
My first stop when faced with a JavaScript puzzler. Written by a well-known and regarded Java author, this reference is comprehensive and definitive, just like the title says.</p>
<h4><a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D020161622X">8. The Pragmatic Programmer: From Journeyman to Master (Andrew Hunt and David Thomas</a>)</h4>
<p></p>
<h3><a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D020161622X"><img class="floatright clearboth" src="http://ecx.images-amazon.com/images/I/41HXiIojloL._SL160_.jpg" alt="The Pragmatic Programmer Book Cover" width="127" height="160" /></a></h3>
<p>
While not so much a web design book, this book changed the way I program and approach programming projects in general. It&#8217;s very much geared toward corporate programmers (which I was when I first read it), but it is by far one of the best and most influential programming books I&#8217;ve read.</p>
<p>There are so many good tips and best practices in this book that I couldn&#8217;t leave it out. Many programming shops today will not hire any person who hasn&#8217;t read this excellent book and I don&#8217;t blame them.</p>
<h3>Honarable Mentions and Non-Web Design Books Worth Mentioning</h3>
<p></p>
<div class="honorableMention">
<p style="text-align: left;"><img src="http://ecx.images-amazon.com/images/I/4111k2L-vuL._SL160_.jpg" /></p>
<p><a href="http://www.amazon.com/Elements-Typographic-Style-Robert-Bringhurst/dp/0881792055%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0881792055">The Elements of Typographic Style (Robert Bringhurst)</a></p>
<p><a href="http://www.amazon.com/Elements-Typographic-Style-Robert-Bringhurst/dp/0881792055%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0881792055"></a></p>
<p>Mostly geared toward print designers, this beautifully bound and printed book is, in my opinion, overrated. There is some useful information about typographic scale and a few other nuggets of wisdom, but not the holy grail others make it out to be, at least not for web typography.</p>
</div>
<div class="honorableMention">
<p style="text-align: left;"><img src="http://ecx.images-amazon.com/images/I/51Q-RLSadrL._SL160_.jpg" /></p>
<p><a href="http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0201633612">Design Patterns: Elements of Reusable Object-Oriented Software (Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides)</a></p>
<p>Required reading for any object oriented programmer.</p>
</div>
<div class="honorableMention">
<p style="text-align: left;"><img src="http://ecx.images-amazon.com/images/I/41iWWlUmohL._SL160_.jpg" /></p>
<p><a href="http://www.amazon.com/Prototype-script-aculo-us-JavaScript-Pragmatic-Programmers/dp/1934356018%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1934356018">Prototype and script.aculo.us: You Never Knew JavaScript Could Do This! (Christophe Porteneuve)</a></p>
<p><a href="http://www.amazon.com/Prototype-script-aculo-us-JavaScript-Pragmatic-Programmers/dp/1934356018%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D1934356018"></a>Great intro and reference.</p>
</div>
<div class="honorableMention">
<p style="text-align: left;"><img src="http://ecx.images-amazon.com/images/I/41X1%2Bt8nSWL._SL160_.jpg" /></p>
<p><a href="http://www.amazon.com/Mastering-Regular-Expressions-Jeffrey-Friedl/dp/0596528124%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0596528124">Mastering Regular Expressions (Jeffrey E.F. Friedl</a>)</p>
<p>A Comprehensive reference to this complex and absolutely essential subject.</p>
</div>
<div class="honorableMention">
<p style="text-align: left;"><img src="http://ecx.images-amazon.com/images/I/51EHjWvpClL._SL160_.jpg" /></p>
<p><a href="http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0321356683">Effective Java (Joshua Bloch)</a></p>
<p>Required reading for the serious Java programmer.</p>
</div>
<div class="honorableMention">
<p style="text-align: left;"><img src="http://ecx.images-amazon.com/images/I/51T4YZ3HieL._SL160_.jpg" /></p>
<p><a href="http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0201485672">Refactoring: Improving the Design of Existing Code (Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts)</a></p>
<p>Another object-oriented bible. This highly-regarded text walks through the process of changing existing code (refactoring) safely. It also attempts to name and describe many common &#8220;refactorings&#8221; and provide step by step procedures for doing so.</p>
</div>
<div class="honorableMention">
<p style="text-align: left;"><img src="http://ecx.images-amazon.com/images/I/41FU7RrzPfL._SL160_.jpg" /></p>
<p><a href="http://www.amazon.com/Pragmatic-Project-Automation-Deploy-Monitor/dp/0974514039%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0974514039">Pragmatic Project Automation: How to Build, Deploy, and Monitor Java Apps (Mike Clark)</a></p>
<p><a href="http://www.amazon.com/Pragmatic-Project-Automation-Deploy-Monitor/dp/0974514039%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0974514039"></a>Pertinent to any programmer. Save time by automating everything. I use the principles learned in this book to make deploying my wordpress websites a one button push process.</p>
</div>
<div class="honorableMention">
<p style="text-align: left;"><img src="http://ecx.images-amazon.com/images/I/51R9fAwn1wL._SL160_.jpg" /></p>
<p><a href="http://www.amazon.com/Bash-Cookbook-Solutions-Examples-Cookbooks/dp/0596526784%3FSubscriptionId%3D0PZ7TM66EXQCXFVTMTR2%26tag%3Dadriaantijsse-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D0596526784">Bash Cookbook: Solutions and Examples for Bash Users (Carl Albing, JP Vossen, Cameron Newham)</a></p>
<p>Great source of command line scripts and goodies.</p>
</div>
<h3 class="clearboth">What Are Your Favorite Books?</h3>
<p class="clearboth">Let me know which books I&#8217;ve left out in the comments below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.acousticwebdesign.net/web-design/8-books-that-will-make-you-a-better-web-designer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Real World Browser Testing – 8 Steps to Building Compatible Websites</title>
		<link>http://www.acousticwebdesign.net/web-design/real-world-browser-testing-8-steps-to-building-compatible-websites/</link>
		<comments>http://www.acousticwebdesign.net/web-design/real-world-browser-testing-8-steps-to-building-compatible-websites/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 17:20:11 +0000</pubDate>
		<dc:creator>Mitchell Hall</dc:creator>
				<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.acousticwebdesign.net/?p=144</guid>
		<description><![CDATA[Modern web browsers are getting us closer to write once, publish everywhere, but we aren’t quite there yet and so we must suffer through the grueling task of browser testing. In this article, I’ll explain the process I use to test my websites for compatibility.  Along the way I’ll point out some helpful tips and</p><p class="readmore"><a href="http://www.acousticwebdesign.net/web-design/real-world-browser-testing-8-steps-to-building-compatible-websites/">Continue Reading &#8230;</a></p>]]></description>
			<content:encoded><![CDATA[<p><img src="file:///Users/mitch/Library/Caches/TemporaryItems/moz-screenshot-10.png" alt="" /><img src="file:///Users/mitch/Library/Caches/TemporaryItems/moz-screenshot-11.png" alt="" />Modern  web browsers are getting us closer to write once, publish everywhere,  but we aren’t quite there yet and so we must suffer through the grueling  task of browser testing.</p>
<p>In this article, I’ll explain the process I use to test my websites  for compatibility.  Along the way I’ll point out some helpful tips and  tools I’ve discovered that have helped ease this stressful task.</p>
<h3>Step 1 &#8211; Develop in Firefox.</h3>
<p>Build your website in Firefox.  Firefox is the most standards  compliant browser available today.  If you’re site looks and functions  correctly in Firefox, you’ll spend less time getting it to work in other  browsers.  Plus, with Firebug and the Web Developer toolbar installed,  Firefox is by far the most web-friendly browser.</p>
<p>Links:<br />
<a href="http://getfirebug.com/">Firebug</a><br />
<a href="http://chrispederick.com/work/web-developer/">Web Developer Toolbar</a></p>
<h3>Step 2 &#8211; Validate.</h3>
<p>Before even opening another browser, validate your web site.   Starting with a valid, standards compliant website is the best way to  ease the remaining steps in the process.</p>
<p>I have found the easiest and fastest way to validate is by using the  Web Developer Toolbar plugin in firefox.  With the toolbar installed,  choose “Validate Local HTML” from the Tools menu (or hit  command-shift-a) to validate your web page.  No copying and pasting code  and your website does not have to be accessible publicly.  A new page  will open showing the results of the w3c validation.</p>
<p><img class="alignnone size-full wp-image-146" title="w3cvalidation" src="http://www.acousticwebdesign.net/wp-content/uploads/2010/10/w3cvalidation.png" alt="W3C Validation Screenshot" width="500" height="446" /></p>
<p>You’ll want to make sure that “Show Source” is checked in the web  developers toolbar settings (Options &gt; Validation) so that you can  instantly see the line number for any errors found.  Since most websites  have some amount of generated code, it’s helpful to see the exact  source that was validated along side the results.</p>
<p>You can also use the web developer toolbar to validate your css.   Choose “Validate Local CSS” from the Tools Menu on the toolbar.</p>
<h3>Step 3 &#8211; Only Test Browsers that are Being Used.</h3>
<p>Don’t waste time testing obscure browsers and versions that aren’t  being used to view your site.  Look at your traffic statistics to find  out what browsers your site is being viewed in and only test on those  being used by 5% or more of your visitors.  This has worked great for  me, but if your site sees thousands of visitors every day you may need  to go down a few percent to draw the line.  If your site hasn’t been  published yet, test Firefox, Safari, Internet Explorer (versions 6  through 9), and Safari for iphone.  On almost all of the websites I have  developed, I only need to test in these browsers.  Only twice, have I  found a problem in Safari, that didn’t show up in Firefox.  So, in  short, browser testing means testing Internet Explorer.</p>
<p>I know many of you are dropping support for IE6, but every website I  manage still gets a significant number of visitors using IE6, so I’m  still supporting it.</p>
<p>I have never had to test any of my websites in Opera or Chrome.  I  have no idea why standardistas and big names in the industry always  mention Opera when talking about browsers.  I’ve never seen more than a  handful of people visit any of my sites using Opera.</p>
<h3>Step 4 &#8211; Virtual Machine or Real Machine &#8211; You must test in a real browser.</h3>
<p>You must test in an real browser installed on a windows operating  system.  There’s no way around this.  If you want to accurately test  your sites for compatibility, this is the only way.  This means either  installing Windows on a second partition or virtual machine like  Parallels or using a dedicated windows computer.</p>
<p>I test in Windows 7 installed on a Parallels virtual machine, but I  plan to move to another virtual machine solution.  Parallels is very  slow and gets slower with each new release despite their claims to the  contrary.  My machine is an 8-core Mac Pro (2 x 3Ghz quad core intel  xeon) with 7 GB of ram and it still takes about 5 minutes for my virtual  machine to resume from being suspended.  Regardless of how I allocate  resources everything slows down tremendously while running my vm.</p>
<p>Here are some popular virtual machine solutions.<br />
<a href="http://www.virtualbox.org/">Virtual Box</a> &#8211; I’ve used this to run linux and thought it was great&#8230;and free.<br />
<a href="http://store.vmware.com/store/vmware/pd/productID.165310200/Currency.USD/?src=PaidSearch_10Q1_EBIZ_FUSION-NOR">VMWare Fusion</a> &#8211; I’m planning to try this next.<br />
<a href="http://www.parallels-store.com/parallels-desktop-for-mac.html?ClickID=apnoyp9w5zsy9swslnvyzprrov5rty95lrll">Parallels Desktop</a> &#8211; My current solution that I’m not satisfied with.</p>
<h3>Step 5 &#8211; Browsershots Doesn’t Count.</h3>
<p>I’ve seen many articles written recently that recommend screenshot  services such as browsershots.org as a viable means of testing  compatibility.  This is just nonsense, you might as well not test at  all.  Not only do you have to wait in line to see the results but you  can’t test interactive features of your website.  90% of the issues I  find during browser testing are related to forms and ajax and these  simply can’t be tested with a screenshot service.  Don’t waste your  time.</p>
<h3>Step 6 &#8211; IETester is the best tool for the job period!</h3>
<p>The best way to install multiple versions of IE on windows is  IETester, a somewhat new tool that is better than anything else  available.  IETester is a free WebBrowser that allows you to have the  rendering and javascript engines of IE9 preview, IE8, IE7 IE 6 and IE5.5  on Windows 7, Vista and XP, as well as the installed IE in the same  process.</p>
<p>In the past, I’ve used the IE Collection to install multiple versions  of Internet Explorer, but it crashes all the time and I found it  difficult to have more than one version open at the same time and not  confuse them.</p>
<p>With IETester, you can open each version of IE in its own tab that is  clearly labelled.  You can also run each tab in its own process so that  when it crashes (and it will, this is windows were talking about), all  you have to do is re-open that tab.  You can also install the DebugBar  plugin to get a limited, but still useful inspector similar to Firebug’s  inspector.</p>
<p>There’s simply no better tool for testing internet explorer.</p>
<p><img class="alignnone size-full wp-image-147" title="ietester" src="http://www.acousticwebdesign.net/wp-content/uploads/2010/10/ietester.png" alt="IETester Screenshot" width="500" height="407" /></p>
<p>Links:<br />
<a href="http://finalbuilds.edskes.net/iecollection.htm">IETester</a><a href="http://finalbuilds.edskes.net/iecollection.htm"><br />
IE Collection</a></p>
<h3>Step 7 &#8211; Put browser-specific CSS in Separate Stylesheets and add conditional comments.</h3>
<p>Always separate your browser hacks from your regular CSS.  Put your  browser-specific fixes in separate stylesheets and use conditional  comments to load them only for the browsers they target.  This keeps  your pages standards compliant and your css files compact for standards  compliant browsers.</p>
<p>Below is a section of my standard header for sites built on wordpress.</p>
<pre>&lt;!--[if lte IE 6]&gt;</pre>
<pre>    &lt;style type="text/css" media="all"&gt;</pre>
<pre>    @import "&lt;?php bloginfo('template_directory'); ?&gt;/styles/ie6style.css";</pre>
<pre>    &lt;/style&gt;</pre>
<pre>    &lt;script type="text/javascript" src="&lt;?php bloginfo('template_directory'); ?&gt;/scripts/supersleight-min.js"&gt;&lt;/script&gt;</pre>
<pre>    &lt;script src="&lt;?php bloginfo('template_directory'); ?&gt;/scripts/IE7.js" type="text/javascript"&gt;IE7_PNG_SUFFIX = ":";&lt;/script&gt;</pre>
<pre>&lt;![endif]--&gt;</pre>
<pre>&lt;!--[if IE 7]&gt;</pre>
<pre>    &lt;style type="text/css" media="all"&gt;
    @import "&lt;?php bloginfo('template_directory'); ?&gt;/styles/ie7style.css";
    &lt;/style&gt;</pre>
<pre>&lt;![endif]--&gt;</pre>
<pre>&lt;!--[if IE 8]&gt;</pre>
<pre>    &lt;style type="text/css" media="all"&gt;@import "&lt;?php bloginfo('template_directory'); ?&gt;/styles/ie8style.css";&lt;/style&gt;</pre>
<pre>&lt;![endif]--&gt;</pre>
<p>Supersleight enables transparent PNGs in IE6. See <a href="http://24ways.org/2007/supersleight-transparent-png-in-ie6">Transparent PNGs in Internet Explorer 6</a>.</p>
<p><a href="http://code.google.com/p/ie7-js/">IE7.js</a> is a JavaScript library to make Microsoft Internet Explorer behave like  a standards-compliant browser. It fixes many HTML and CSS issues under  IE5 and IE6.</p>
<h3>Step 8 &#8211; Web pages don’t have to look the same in every browser.</h3>
<p>I have stopped trying to make my sites look perfect in every  browser.  So few users are using IE6, that I don’t worry about small  layout problems.  It’s just not worth it.  I spend a little more time on  IE7, and the most time on IE8, and now IE9.</p>
<p>As long as your site functions properly in all browsers, minor visual formatting differences are perfectly ok.</p>
<p>Often times, I find it easier to show a reduced version of a page to  older browsers.  For example, on a recent site I developed, there is a  page that uses jquery UI to display lots of information and some google  maps in tabs.  Getting this to work properly in IE6 was starting to  become a nightmare.  Instead of wasting half a day trying to get it to  work, I simply got rid of the tabs and displayed everything on one page  for IE6 users.  It didn’t look as good without the tabs, but all the  information was displayed.  Chances are if your using IE6 as your  browser, you don’t care about modern interfaces.</p>
<h3>Conclusion</h3>
<p>Browser testing is not fun, but following the above guidelines should  ease the burden slightly.  If you know of any other useful tips or  tools that I’ve left out, let me know by leaving a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.acousticwebdesign.net/web-design/real-world-browser-testing-8-steps-to-building-compatible-websites/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>11 Spectacular Free Fonts No Web Designer Should be Without</title>
		<link>http://www.acousticwebdesign.net/typography/11-spectacular-free-fonts-no-web-designer-should-be-without/</link>
		<comments>http://www.acousticwebdesign.net/typography/11-spectacular-free-fonts-no-web-designer-should-be-without/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 09:39:37 +0000</pubDate>
		<dc:creator>Mitchell Hall</dc:creator>
				<category><![CDATA[Fonts]]></category>
		<category><![CDATA[Freebies]]></category>
		<category><![CDATA[Typography]]></category>

		<guid isPermaLink="false">http://www.acousticwebdesign.net/?p=100</guid>
		<description><![CDATA[There are so many free fonts available on the internet today and finding quality ones can be a challenge.  Listed below are 11 exceptional free fonts that are sure to be a welcome addition to your library.  These are professional quality fonts that will enhance any design project your working on. Geo Sans Light A</p><p class="readmore"><a href="http://www.acousticwebdesign.net/typography/11-spectacular-free-fonts-no-web-designer-should-be-without/">Continue Reading &#8230;</a></p>]]></description>
			<content:encoded><![CDATA[<p>There are so many free fonts available on the internet today and finding quality ones can be a challenge.  Listed below are 11 exceptional free fonts that are sure to be a welcome addition to your library.  These are professional quality fonts that will enhance any design project your working on.</p>
<h3><a title="Geo Sans Light" href="http://www.dafont.com/geo-sans-light.font" target="_self">Geo Sans Light</a></h3>
<p>A fantastic thin sans serif particularly suited for headings, titles, and intro blocks.<a title="Geo Sans Light" href="http://www.dafont.com/geo-sans-light.font" target="_self"></a></p>
<p><a title="Geo Sans Light" href="http://www.dafont.com/geo-sans-light.font" target="_self"><img class="alignnone size-full wp-image-110" title="Geo Sans Light" src="http://www.acousticwebdesign.net/wp-content/uploads/2010/09/geosans.jpg" alt="Geo Sans Light Example" width="500" height="250" /></a></p>
<h3><a title="Bebas Neue" href="http://www.dafont.com/bebas-neue.font">Bebas Neue</a></h3>
<p>One of my all-time favorite title/heading typefaces.  It’s great for that professional, business look.</p>
<p><a href="http://www.dafont.com/bebas-neue.font"><img title="Bebas Neue Font Example" src="http://www.acousticwebdesign.net/wp-content/uploads/2010/09/bebas.jpg" alt="Bebas Neue Font Example - 21 Simple Ways to Genereate More Business With your Website Cover" width="500" height="251" /></a></p>
<h3><a title="Trashed" href="http://www.dafont.com/trashed.font" target="_self">Trashed</a></h3>
<p>A nice grunge font for those times when you just need something dirty.  Commercial use is prohibited without permission from the author.</p>
<p><a title="Trashed" href="http://www.dafont.com/trashed.font" target="_self"><img class="alignnone size-full wp-image-114" title="Trashed Font Example" src="http://www.acousticwebdesign.net/wp-content/uploads/2010/09/trashed.jpg" alt="Trashed Font Example" width="500" height="250" /></a></p>
<h3><a title="Steiner" href="http://www.dafont.com/steiner.font">Steiner</a></h3>
<p>A perfect font for your retro or vintage project.</p>
<p><a title="Steiner" href="http://www.dafont.com/steiner.font"><img class="alignnone size-full wp-image-113" title="Steiner Font Example" src="http://www.acousticwebdesign.net/wp-content/uploads/2010/09/steiner.jpg" alt="Steiner in Use Font Example" width="500" height="250" /></a></p>
<h3><a title="Museo" href="http://www.josbuivenga.demon.nl/museo.html">Museo</a></h3>
<p>Museo will add interest to any web project you use it on.  It also has a complimentarry sans available.<a title="Museo" href="http://www.josbuivenga.demon.nl/museo.html"></a></p>
<p><a title="Museo" href="http://www.josbuivenga.demon.nl/museo.html"><img class="alignnone size-full wp-image-112" title="Museo Font Example" src="http://www.acousticwebdesign.net/wp-content/uploads/2010/09/museo.jpg" alt="Museo in Use Font Example" width="500" height="250" /></a></p>
<h3><a title="League Gothic" href="http://www.theleagueofmoveabletype.com/fonts/7-league-gothic">League Gothic</a></h3>
<p>A revival of the classic Alternate Gothic No.1 designed by Morris Fuller Benton in 1903.<a title="League Gothic" href="http://www.theleagueofmoveabletype.com/fonts/7-league-gothic"></a></p>
<p><a title="League Gothic" href="http://www.theleagueofmoveabletype.com/fonts/7-league-gothic"><img class="alignnone" title="League Gothic Font Example" src="http://s3.amazonaws.com/theleague-production/images/large/league-gothic/league-gothic-27.png" alt="League Gothic Font Example" width="500" /></a><a title="Cardo" href="http://scholarsfonts.net/cardofnt.html"></a></p>
<h3><a title="Cardo" href="http://scholarsfonts.net/cardofnt.html">Cardo</a></h3>
<p>Cardo is an elegant serif suitable for large passages of text.  Unfortunately, it doesn’t have italics, but the author plans to add it in a future revision.</p>
<p><a title="Cardo" href="http://scholarsfonts.net/cardofnt.html"><img class="alignnone size-full wp-image-107" title="Cardo Font Example" src="http://www.acousticwebdesign.net/wp-content/uploads/2010/09/cardo.png" alt="Cardo Font Example" width="501" height="214" /></a></p>
<h3><a title="Colaborate" href="http://www.fontsquirrel.com/fonts/Colaborate">Colaborate</a></h3>
<p>Another fantastic sans-serif typeface.  And it&#8217;s embeddable using @font-face.</p>
<p><a title="Cardo" href="http://scholarsfonts.net/cardofnt.html"><img class="alignnone size-full wp-image-108" title="Colaborate Font Example" src="http://www.acousticwebdesign.net/wp-content/uploads/2010/09/colaborate.jpg" alt="Colaborate Font Example" width="500" height="250" /></a></p>
<h3><a title="Fontin" href="http://www.josbuivenga.demon.nl/fontin.html">Fontin and Fontin Sans</a></h3>
<p>Fontin was designed for use at small sizes, but looks great at any size.  Small caps and italics are included and it has a matching sans sister.  This is a very well-designed font and sure to please.<a title="Fontin" href="http://www.josbuivenga.demon.nl/fontin.html"></a></p>
<p><a title="Fontin" href="http://www.josbuivenga.demon.nl/fontin.html"><img class="alignnone size-full wp-image-109" title="Fontin and Fontin Sans Font Example" src="http://www.acousticwebdesign.net/wp-content/uploads/2010/09/fontin.jpg" alt="Fontin and Fontin Sans Font Example" width="500" height="277" /></a></p>
<h3><a title="Vegur" href="http://www.fontspace.com/arro/vegur">Vegur</a></h3>
<p>Another great multi-weight sans.<a title="Vegur" href="http://www.fontspace.com/arro/vegur"></a></p>
<p><a title="Vegur" href="http://www.fontspace.com/arro/vegur"><img class="alignnone size-full wp-image-115" title="Vegur Font Example" src="http://www.acousticwebdesign.net/wp-content/uploads/2010/09/vegur.jpg" alt="Vegur in Use Font Example" width="500" height="250" /></a></p>
<h3><a title="MgOpen" href="http://www.zvr.gr/typo/mgopen/index">MgOpen</a></h3>
<p>A very complete collection based on 3 popular typfaces:  Helvetica, Times New Roman, Optima.<a title="MgOpen" href="http://www.zvr.gr/typo/mgopen/index"></a></p>
<p><a title="MgOpen" href="http://www.zvr.gr/typo/mgopen/index"><img class="alignnone size-full wp-image-111" title="MgOpen Font Example" src="http://www.acousticwebdesign.net/wp-content/uploads/2010/09/mgopen.jpg" alt="MgOpen Font Example" width="500" height="250" /></a></p>
<h3>Want More Free Fonts?</h3>
<p><a title="50 Fresh Free Fonts of 2010" href="http://blog.templatemonster.com/2010/09/22/50-fresh-free-fonts/">50 Fresh Free Fonts of 2010</a></p>
<p><a title="30 Free High Quality Free Fonts" href="http://www.smashingmagazine.com/2010/08/12/30-new-free-high-quality-fonts-typography/">30 New Free High Quality Fonts</a></p>
<p><a href="http://www.smashingmagazine.com/2010/05/11/20-fresh-high-quality-free-fonts/">20 Fresh High-Quality Free Fonts</a></p>
<p><a title="25 New High Quality Fonts" href="http://www.smashingmagazine.com/2010/01/18/25-new-high-quality-free-fonts/">25 New High Quality Free Fonts</a></p>
<p><a title="20 New High Quality Fonts" href="http://www.smashingmagazine.com/2009/11/15/20-new-high-quality-free-fonts/">20 New High Quality Free Fonts</a></p>
<p><a href="http://www.smashingmagazine.com/2008/11/24/15-beautiful-high-quality-free-fonts/">15 Beautiful High-Quality Free Fonts</a><a href="http://www.smashingmagazine.com/2007/11/08/40-excellent-freefonts-for-professional-design/"></a></p>
<p><a href="http://www.smashingmagazine.com/2007/11/08/40-excellent-freefonts-for-professional-design/">40 Excellent Free Fonts for Professional Design</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.acousticwebdesign.net/typography/11-spectacular-free-fonts-no-web-designer-should-be-without/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

