<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Ardamis&#187; Web Site Dev</title>
	<atom:link href="http://www.ardamis.com/category/web-site-dev/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ardamis.com</link>
	<description>Ardamis is a blog about web development and technology in general.</description>
	<lastBuildDate>Sun, 01 Aug 2010 02:43:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Ardamis.com&#8217;s Google Page Speed score is 93/100</title>
		<link>http://www.ardamis.com/2010/07/30/ardamis-google-page-speed-score/</link>
		<comments>http://www.ardamis.com/2010/07/30/ardamis-google-page-speed-score/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 05:06:31 +0000</pubDate>
		<dc:creator>ardamis</dc:creator>
				<category><![CDATA[Web Site Dev]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://www.ardamis.com/?p=846</guid>
		<description><![CDATA[Ardamis.com has a Google PageSpeed score of 93/100, and that's not too shabby.]]></description>
			<content:encoded><![CDATA[<p>The results are in, and they&#8217;re good.  After <a href="http://www.ardamis.com/2010/07/11/compress-files-without-mod_gzip-or-mod_deflate/">compressing .php, .css and .js files without mod_gzip or mod_deflate</a> and <a href="http://www.ardamis.com/2010/07/17/sending-headers-to-leverage-browser-caching/">sending the correct headers to leverage browser caching</a>, Ardamis.com now has a Google Page Speed score of 93/100.</p>
<p><div id="attachment_848" class="wp-caption aligncenter" style="width: 431px"><a href="http://www.ardamis.com/wp-content/uploads/2010/07/ardamis-pagespeed-93-072910.png"><img src="http://www.ardamis.com/wp-content/uploads/2010/07/ardamis-pagespeed-93-072910.png" alt="Ardamis.com PageSpeed score of 93/100" title="ardamis-pagespeed-93-072910" width="421" height="356" class="size-full wp-image-848" /></a><p class="wp-caption-text">Ardamis.com Page Speed score of 93/100</p></div></p>
<p>Page Speed just keeps getting better, and it keeps getting tougher to score well.  I&#8217;m happy, but not satisfied yet.  The remaining hurdle is to serve static content from a cookieless domain.  I&#8217;m looking into the CDN offered by Amazon.com, but it&#8217;s a paid service.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ardamis.com/2010/07/30/ardamis-google-page-speed-score/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ardamis.com is HTML5</title>
		<link>http://www.ardamis.com/2010/07/21/ardamis-com-is-html5/</link>
		<comments>http://www.ardamis.com/2010/07/21/ardamis-com-is-html5/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 18:51:50 +0000</pubDate>
		<dc:creator>ardamis</dc:creator>
				<category><![CDATA[Nonsense]]></category>
		<category><![CDATA[Web Site Dev]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://www.ardamis.com/?p=823</guid>
		<description><![CDATA[Ardamis.com is now being served as valid HTML5.]]></description>
			<content:encoded><![CDATA[<p>It required only a few small changes to move from XHTML 1.0 Strict to HTML5, but as of today, ardamis.com is being served as valid HTML5.  For some time, I&#8217;ve been waiting for HTML5 to get closer to becoming a W3C recommendation, and for better support from user agents, but I&#8217;ve gotten caught up with other improvements to the site and decided to make the transition now.</p>
<p>Over the next few weeks, I&#8217;ll be updating the HTML to incorporate some of the new tags.  I&#8217;m pretty excited about replacing divs with new semantic elements like <code>&lt;header&gt;</code>, <code>&lt;article&gt;</code>, and <code>&lt;footer&gt;</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ardamis.com/2010/07/21/ardamis-com-is-html5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to send the correct headers to leverage browser caching</title>
		<link>http://www.ardamis.com/2010/07/17/sending-headers-to-leverage-browser-caching/</link>
		<comments>http://www.ardamis.com/2010/07/17/sending-headers-to-leverage-browser-caching/#comments</comments>
		<pubDate>Sat, 17 Jul 2010 23:23:39 +0000</pubDate>
		<dc:creator>ardamis</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Site Dev]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[godaddy]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.ardamis.com/?p=794</guid>
		<description><![CDATA[How to use .htaccess to send the correct HTTP headers in order to leverage browser caching and reduce page load times for returning visitors.]]></description>
			<content:encoded><![CDATA[<p>As a follow-up to my post on <a href="http://www.ardamis.com/2010/07/11/compress-files-without-mod_gzip-or-mod_deflate/">compressing .php, .css and .js files without mod_gzip or mod_deflate</a>, I&#8217;m documenting the changes I made to the .htaccess file on ardamis.com in order to speed up page load times for returning visitors and satisfy the <a href="http://code.google.com/speed/page-speed/docs/caching.html#LeverageBrowserCaching">Leverage browser caching</a> recommendation of Google&#8217;s <a href="http://code.google.com/speed/page-speed/">Page Speed</a> Firefox/Firebug Add-on. </p>
<p>A great explanation of why browser caching helps the web deliver a better user experience is at <a href="http://betterexplained.com/articles/how-to-optimize-your-site-with-http-caching/">betterexplained.com</a>.</p>
<p>Two authoritative articles on the subject are Google&#8217;s <a href="http://code.google.com/speed/page-speed/docs/caching.html">Performance Best Practices | Optimize caching</a> and Yahoo&#8217;s <a href="http://developer.yahoo.com/performance/rules.html#expires">Best Practices for Speeding Up Your Web Site | Add an Expires or a Cache-Control Header</a>.</p>
<p>I&#8217;d like to point out that in researching browser cashing, I came across a lot of information that contradicted the rather clear instructions from Google:</p>
<blockquote><p>It is important to specify one of <code>Expires</code> or <code>Cache-Control max-age</code>, <i>and</i> one of <code>Last-Modified</code> or <code>ETag</code>, for all cacheable resources. It is redundant to specify both <code>Expires</code> and <code>Cache-Control: max-age</code>, or to specify both <code>Last-Modified</code> and <code>ETag</code>.</p></blockquote>
<p>I&#8217;m not sure that this recommendation is entirely correct, as the W3C states that Expires and Cache-Control max-age are used in different situations, with Cache-Control max-age overriding Expires in the event of conflicts.</p>
<blockquote><p>If a response includes both an Expires header and a max-age directive, the max-age directive overrides the Expires header, even if the Expires header is more restrictive. This rule allows an origin server to provide, for a given response, a longer expiration time to an HTTP/1.1 (or later) cache than to an HTTP/1.0 cache.</p>
<p><a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html</a></p></blockquote>
<p>It would seem that Cache-Control is the preferred method of controlling browser caching going forward.</p>
<blockquote><p>HTTP 1.1 clients will honour &#8220;Cache-Control&#8221; (which is easier to use and much more flexible).<br />
HTTP 1.0 clients will ignore &#8220;Cache-Control&#8221; but honour &#8220;Expires&#8221;. With &#8220;Expires&#8221; you get thus at least a bit control for these old clients.</p>
<p><a href="http://www.peterbe.com/plog/cache-control_or_expires">http://www.peterbe.com/plog/cache-control_or_expires</a></p></blockquote>
<p>In any event, Page Speed won&#8217;t protest if you do end up sending both Expires and Cache-Control max-age, or if you remove both Last-Modified and ETag, but I was able to get the best results with just setting Cache-Control max-age and removing the ETag.</p>
<h2>Setting the headers in .htaccess</h2>
<p>On Apache, configuring the proper headers can be done in the .htaccess file, using the <code>Header</code> directive.  The <code>Header</code> directive requires the <code>mod_headers</code> module to be enabled.</p>
<p>I&#8217;m choosing to set a far future Expires header of one year on my images files, because I tweak the CSS and JavaScript pretty often, and don&#8217;t want those file types to be cached as long.</p>
<p>Add the following code to your .htaccess file to set your Cache-Control and Expires headers, adjusting the date to be one year from today.</p>
<pre class="brush: plain;">
# Set Cache-Control and Expires headers
&lt;filesMatch &quot;\\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4)$&quot;&gt;
Header set Cache-Control &quot;max-age=2592000, private&quot;
Header set Expires &quot;Sun, 17 July 2011 20:00:00 GMT&quot;
&lt;/filesMatch&gt;
&lt;filesMatch &quot;\\.(css|css.gz)$&quot;&gt;
Header set Cache-Control &quot;max-age=604800, private&quot;
&lt;/filesMatch&gt;
&lt;filesMatch &quot;\\.(js|js.gz)$&quot;&gt;
Header set Cache-Control &quot;max-age=604800, private&quot;
&lt;/filesMatch&gt;
&lt;filesMatch &quot;\\.(xml|txt)$&quot;&gt;
Header set Cache-Control &quot;max-age=216000, private, must-revalidate&quot;
&lt;/filesMatch&gt;
&lt;filesMatch &quot;\\.(html|htm)$&quot;&gt;
Header set Cache-Control &quot;max-age=7200, private, must-revalidate&quot;
&lt;/filesMatch&gt;
</pre>
<h2>Removing ETags in .htaccess</h2>
<p>Most sources recommend simply removing ETags if they are not required.</p>
<blockquote><p>Entity tags (ETags) are a mechanism that web servers and browsers use to determine whether the component in the browser&#8217;s cache matches the one on the origin server.<br />
&#8230;<br />
If you&#8217;re not taking advantage of the flexible validation model that ETags provide, it&#8217;s better to just remove the ETag altogether.</p>
<p><a href="http://developer.yahoo.com/performance/rules.html#etags">http://developer.yahoo.com/performance/rules.html#etags</a>
</p></blockquote>
<p>Add the following code to your .htaccess file to remove ETag headers.</p>
<pre class="brush: plain;">
# Turn off ETags
FileETag None
Header unset ETag
</pre>
<h2>Set Expires headers with ExpiresByType (optional)</h2>
<p>If your host has the <code>mod_expires</code> module enabled, you can specify Expires headers by file type.  Godaddy does not have this module enabled.</p>
<pre class="brush: plain;">
# Set Expires headers
ExpiresActive On
ExpiresDefault &quot;access plus 1 year&quot;
ExpiresByType text/html &quot;access plus 1 second&quot;
ExpiresByType image/gif &quot;access plus 2592000 seconds&quot;
ExpiresByType image/jpeg &quot;access plus 2592000 seconds&quot;
ExpiresByType image/png &quot;access plus 2592000 seconds&quot;
ExpiresByType image/x-icon &quot;access plus 2592000 seconds&quot;
ExpiresByType text/css &quot;access plus 604800 seconds&quot;
ExpiresByType text/javascript &quot;access plus 604800 seconds&quot;
ExpiresByType application/x-javascript &quot;access plus 604800 seconds&quot;
</pre>
<h2>Removing the Last-Modified header in .htaccess (optional)</h2>
<p>I&#8217;m following Google&#8217;s instructions and not removing the Last-Modified header, but if you wanted to do so, you could use:</p>
<pre class="brush: plain;">
# Remove Last-Modified header
Header unset Last-Modified
</pre>
<h2>Busting the cache when files change</h2>
<p>What happens when you change files and need to force browsers to load the new files? Christian Johansen offers two methods in his post on <a href="http://cjohansen.no/en/apache/using_a_far_future_expires_header">Using a far future expires header</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ardamis.com/2010/07/17/sending-headers-to-leverage-browser-caching/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>One million inbound links</title>
		<link>http://www.ardamis.com/2010/07/13/one-million-inbound-links/</link>
		<comments>http://www.ardamis.com/2010/07/13/one-million-inbound-links/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 12:32:14 +0000</pubDate>
		<dc:creator>ardamis</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Web Site Dev]]></category>

		<guid isPermaLink="false">http://www.ardamis.com/?p=747</guid>
		<description><![CDATA[Google Webmaster Tools is reporting over one million inbound links to pages on ardamis.com.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d like to note that, as of today, Google Webmaster Tools is reporting over one million inbound links to pages on ardamis.com.</p>
<p><div id="attachment_748" class="wp-caption aligncenter" style="width: 432px"><a href="http://www.ardamis.com/wp-content/uploads/2010/07/one-million-inbound-links.png"><img src="http://www.ardamis.com/wp-content/uploads/2010/07/one-million-inbound-links.png" alt="one million inbound links" title="one million inbound links" width="422" height="251" class="size-full wp-image-748" /></a><p class="wp-caption-text">One million inbound links!</p></div></p>
<p>I&#8217;ve been spending quite a bit of time on ardamis.com lately, giving it a new look, working at improving the site&#8217;s navigation, cultivating some inbound links, and posting more regularly.  It&#8217;s rewarding to see that the effort is paying off.</p>
<p>Over the last few days, I&#8217;ve been concentrating on reducing page load times by sending the proper headers and compressing files.</p>
<p>I&#8217;ll give it some time and see how performance improves.</p>
<p>According to Google&#8217;s Webmaster Tools&#8217; performance overview, with Super Cache running, a single minified CSS, a single minified JavaScript, etc. but no compression or header tweaks:<br />
On average, pages in your site take 2.8 seconds to load (updated on Jun 28, 2010). This is faster than 53% of sites.</p>
<p>The chart illustrating page load times is pretty much all over the place, but at no time has the site dipped into the 20th percentile, indicating a &#8216;fast&#8217; site.  I&#8217;m trying to change that.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ardamis.com/2010/07/13/one-million-inbound-links/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to compress .php, .css and .js files without mod_gzip or mod_deflate</title>
		<link>http://www.ardamis.com/2010/07/11/compress-files-without-mod_gzip-or-mod_deflate/</link>
		<comments>http://www.ardamis.com/2010/07/11/compress-files-without-mod_gzip-or-mod_deflate/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 04:42:27 +0000</pubDate>
		<dc:creator>ardamis</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Web Site Dev]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[downloads]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[godaddy]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.ardamis.com/?p=753</guid>
		<description><![CDATA[How to speed up page load times by compressing .php, .css and .js files on Apache web hosts that do not have mod_gzip or mod_deflate enabled.]]></description>
			<content:encoded><![CDATA[<p>File compression is possible on Apache web hosts that do not have mod_gzip or mod_deflate enabled, and it&#8217;s easier than you might think.</p>
<p>A great explanation of why compression helps the web deliver a better user experience is at <a href="http://betterexplained.com/articles/how-to-optimize-your-site-with-gzip-compression/">betterexplained.com</a>.</p>
<p>Two authoritative articles on the subject are Google&#8217;s <a href="http://code.google.com/speed/page-speed/docs/payload.html#GzipCompression">Performance Best Practices documentation | Enable compression</a> and Yahoo&#8217;s <a href="http://developer.yahoo.com/performance/rules.html#gzip">Best Practices for Speeding Up Your Web Site | Gzip Components</a>.</p>
<h2>Compressing PHP files</h2>
<p>If your Apache server does not have mod_gzip or mod_deflate enabled (Godaddy shared hosting, for one), you can use PHP to compress pages on the fly.  This is still preferable to sending uncompressed files to the browser, so don&#8217;t worry about the additional work the server has to do to compress the files at each request.  Add the following line of code to the top of your PHP pages, above the DOCTYPE declaration or first line of output:</p>
<pre class="brush: plain;">
&lt;?php if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start(&quot;ob_gzhandler&quot;); else ob_start(); ?&gt;
</pre>
<p>Credit: <a href="http://help.godaddy.com/article/4485">GoDaddy.com</a></p>
<h2>Compressing CSS and JavaScript files</h2>
<p>Because the on-the-fly method above only works for PHP pages, you&#8217;ll need something else to compress CSS and JavaScript files.  These can be gzipped ahead of time, then uploaded along side the normal files.  Use <a href="http://www.7-zip.org/">7-Zip</a> (quite possibly the best compression software around, and it&#8217;s free) to compress the CSS and JavaScript files as gzip, then upload them to your server.  Add the following lines to your .htaccess file to send user agents the gzipped versions if they support the encoding.</p>
<pre class="brush: plain;">
&lt;files *.js.gz&gt;
  AddType &quot;text/javascript&quot; .gz
  AddEncoding gzip .gz
&lt;/files&gt;
&lt;files *.css.gz&gt;
  AddType &quot;text/css&quot; .gz
  AddEncoding gzip .gz
&lt;/files&gt;
RewriteEngine on
#Check to see if browser can accept gzip files.
ReWriteCond %{HTTP:accept-encoding} gzip
RewriteCond %{HTTP_USER_AGENT} !Safari
#make sure there's no trailing .gz on the url
ReWriteCond %{REQUEST_FILENAME} !^.+\.gz$
#check to see if a .gz version of the file exists.
RewriteCond %{REQUEST_FILENAME}.gz -f
#All conditions met so add .gz to URL filename (invisibly)
RewriteRule ^(.+) $1.gz [QSA,L]
</pre>
<p>Credit: <a href="http://www.opensourcetutor.com/2009/06/01/how-to-compress-css-javascript-an-alternative-to-mod_deflate-or-mod_gzip/">opensourcetutor.com</a></p>
<p>I&#8217;m not sure it&#8217;s still necessary to exclude Safari.</p>
<p>For added benefit, minify the CSS and JavaScript files before gzipping them.  Google&#8217;s excellent <a href="http://code.google.com/speed/page-speed/">Page Speed</a> Firefox/Firebug Add-on makes this very easy.</p>
<h2>Verify that your content is being compressed</h2>
<p>Use the nifty Web Page Content Compression Verification tool at <a href="http://www.whatsmyip.org/http_compression/">http://www.whatsmyip.org/http_compression/</a> to confirm that your server is sending the compressed files.</p>
<h2>Speed up page load times for returning visitors</h2>
<p>Compression is only part of the story.  In order to further speed page load times for your returning visitors, you want to <a href="http://www.ardamis.com/2010/07/17/sending-headers-to-leverage-browser-caching/">send the correct headers to leverage browser caching</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ardamis.com/2010/07/11/compress-files-without-mod_gzip-or-mod_deflate/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Compete.com tracking code is not for traffic</title>
		<link>http://www.ardamis.com/2010/07/04/compete-is-not-for-traffic/</link>
		<comments>http://www.ardamis.com/2010/07/04/compete-is-not-for-traffic/#comments</comments>
		<pubDate>Sun, 04 Jul 2010 05:11:59 +0000</pubDate>
		<dc:creator>ardamis</dc:creator>
				<category><![CDATA[Nonsense]]></category>
		<category><![CDATA[Web Site Dev]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.ardamis.com/?p=724</guid>
		<description><![CDATA[How the Compete tracking code shares your visitor information with FOX / News Corp. and why it doesn't do you any good when it comes to gathering analytic information.]]></description>
			<content:encoded><![CDATA[<p>I had noticed mentions of <em>analytic information provided by Compete.com</em> often enough that I was curious about what it could do for me.  </p>
<p>Compete already had some <a href="http://www.compete.com/m/profiles/site/ardamis.com/">information about ardamis.com</a>, but it was stunningly wrong.  For example, it was telling me that the phrase &#8220;godaddy referral program&#8221; was responsible for 20.35% of the total traffic sent to my site by search engines.  Until recently, I did have a page that mentioned godaddy referral programs, but according to Google Analytics, it was barely ever visited (7 page views in the last 30 days &#8211; it was the 78th most popular page on my site, which does get a few thousand visitors a month).  Even more strange, it told me that I was getting traffic for the search phrase &#8220;myspace&#8221;.  I have never written anything about myspace before.</p>
<p>I figured that once I installed their JavaScript tracking code, the analytics information would be much more accurate.  So I installed the code, confirmed it appeared at the bottom of the home page, and attempted to verify my site at http://www.ardamis.com/, but was unable to.  I had read somewhere that the free account does not support tracking subdomains, and the verification process seemed to get hung up on the use of .htaccess to redirect non-www traffic to www.ardamis.com.  I was mystified that Compete apparently could not recognize this was happening via a 301 redirect header and compensate.</p>
<blockquote><p>Sorry,</p>
<p>It looks like the CompeteXL code has not been correctly placed on the homepage of your site.</p>
<p>This could be because either the code was not copied over correctly, or because it has been placed on the wrong page.</p>
<p>We think your homepage is</p>
<p>ardamis.com</p></blockquote>
<p>I went so far as to email my amazement to their support staff, who promptly and politely wrote me back.  (Thumbs up to the guys answering the emails.)</p>
<p>I had made a few other changes to my site at the same time, so I ran a <a href="http://code.google.com/speed/page-speed/">Page Speed</a> check on it.  Page Speed told me that I was linking to a resource at trgc.opt.fimserve.com that was throwing a 404 error.  I was pretty sure I didn&#8217;t intentionally link to anything at that domain, so I Googled it.  Surprisingly, there&#8217;s not much out there on trgc.opt.fimserve.com other than <a href="http://wordpress.org/support/topic/337084">this</a> and <a href="http://www.webmasterworld.com/analytics/4038221.htm">this</a>.  As it turns out, fimserve.com is part of something called the <a rel="nofollow" href="http://www.foxaudiencenetwork.com/">FOX Audience Network</a>, and FAN&#8217;s parent company is News Corporation, which also owns myspace.com.</p>
<p>Here&#8217;s the WHOIS on fimserve.com:</p>
<pre>
Domain Name: FIMSERVE.COM
Registrar: REGISTER.COM, INC.
Whois Server: whois.register.com
Referral URL: http://www.register.com
Name Server: NS1.MYSPACE.COM
Name Server: NS2.MYSPACE.COM
Status: clientTransferProhibited
Updated Date: 17-oct-2006
Creation Date: 17-oct-2006
Expiration Date: 17-oct-2011
</pre>
<p>And here&#8217;s the WHOIS on foxaudiencenetwork.com:</p>
<pre>
Domain Name: FOXAUDIENCENETWORK.COM
Registrar: MARKMONITOR INC.
Whois Server: whois.markmonitor.com
Referral URL: http://www.markmonitor.com
Name Server: NS1.MYSPACE.COM
Name Server: NS2.MYSPACE.COM
Status: clientDeleteProhibited
Status: clientTransferProhibited
Status: clientUpdateProhibited
Updated Date: 03-may-2010
Creation Date: 03-jun-2008
Expiration Date: 03-jun-2011
</pre>
<p>I didn&#8217;t like the idea that information about my visitors was being shared with anyone but the site I had signed up for, so I started looking through the Compete FAQs and found this:</p>
<blockquote><p>Currently, the CompeteXL code tracks ONLY self-reported Audience Profile data through a partnership with the FOX Audience Network.</p>
<p>The CompeteXL code DOES NOT track traffic or user engagement metrics, that information continues to be provided through our multi-sourced panel and requires NO addition of code to your site.</p>
<p><a rel="nofollow" href="http://www.compete.com/help/q225">http://www.compete.com/help/q225</a></p></blockquote>
<p><em>What the hell?</em>  Why am I installing a tracking code if it&#8217;s not used to track traffic?</p>
<p>Oh, and this was a fun discovery, too:</p>
<blockquote><p>The FOX Audience Network (FAN) is a unit of News Corporation that supports monetization efforts across the company&#8217;s online content portfolio, as well as third-party publisher sites.</p>
<p>FAN leverages proprietary advertising technology to create highly-targeted advertising campaigns for a wide range of marketers, while also delivering cutting-edge tools and services to third-party publisher partners. FAN works directly with hundreds of advertisers to develop customized marketing programs that optimize both branded and performance-based strategies.</p>
<p><a rel="nofollow" href="http://www.foxaudiencenetwork.com/aboutus.php">http://www.foxaudiencenetwork.com/aboutus.php</a>
</p></blockquote>
<p>I use a very popular <a href="http://www.mvps.org/winhelp2002/hosts.htm">HOSTS file</a> to block a huge number of servers that are known to host advertisements, tracking scripts (including Google Analytics), parasites, hijackers and unwanted Adware/Spyware programs.  The 404 error in Page Speed was caused by the inclusion of trgc.opt.fimserve.com in this custom HOSTS file, which then led me to finding all this out the next day.  I&#8217;ve removed the tracking code because the information I wanted was on traffic &#8211; who&#8217;s coming to my site, why, and through what means &#8211; and not user demographics.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ardamis.com/2010/07/04/compete-is-not-for-traffic/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Is it possible to get inbound links from the Xbox Forums?</title>
		<link>http://www.ardamis.com/2010/03/17/is-it-possible-to-get-inbound-links-from-the-xbox-forums/</link>
		<comments>http://www.ardamis.com/2010/03/17/is-it-possible-to-get-inbound-links-from-the-xbox-forums/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 03:23:33 +0000</pubDate>
		<dc:creator>ardamis</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Web Site Dev]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[Xbox 360]]></category>

		<guid isPermaLink="false">http://www.ardamis.com/?p=550</guid>
		<description><![CDATA[I'm trying to find out if I can create inbound links from forums.xbox.com by linking to the printer-friendly version of a thread.]]></description>
			<content:encoded><![CDATA[<p>I was having some problems with <a href="http://www.ardamis.com/2010/03/12/final-fantasy-xiii-freezing-xbox-360/">Final Fantasy XIII freezing on my Xbox 360</a>, so I posted a few times to the Xbox Forums at <a href="http://forums.xbox.com/">http://forums.xbox.com/</a>.  The posts contained a link to a blog post here on ardamis.com that explained my situation in greater detail.  I started to wonder if the forums were searcheable in Google, so I checked and found that for the most part, they weren&#8217;t.  </p>
<p>The regular forum thread URLs contain a nofollow, noindex robots meta tag and end with &#8216;ShowPost.aspx&#8217;, but if you click on the Print button, you&#8217;re taken to a URL that ends with &#8216;PrintPost.aspx&#8217;.  These printer-friendly pages have no such tag.</p>
<p>If you Google this &#8211; <strong>site:forums.xbox.com</strong> &#8211; you&#8217;ll see what I mean.  There are currently less than a thousand results in Google.</p>
<p>This post is just to test whether I can get a PrintPost.aspx page indexed in Google by linking to it, and whether I can create an inbound link from forums.xbox.com by linking to the printer-friendly version of a thread that contains a link back to a page on ardamis.com.</p>
<p>The URL to the normal thread: <a href="http://forums.xbox.com/31685195/ShowPost.aspx">http://forums.xbox.com/31685195/ShowPost.aspx</a><br />
The URL to the printer-friendly page: <a href="http://forums.xbox.com/31685195/PrintPost.aspx">http://forums.xbox.com/31685195/PrintPost.aspx</a></p>
<p>The URL to the normal thread: <a href="http://forums.xbox.com/31685953/ShowPost.aspx">http://forums.xbox.com/31685953/ShowPost.aspx</a><br />
The URL to the printer-friendly page: <a href="http://forums.xbox.com/31685953/PrintPost.aspx">http://forums.xbox.com/31685953/PrintPost.aspx</a></p>
<p>To test, as of 03.17.2010&#8230;<br />
Your search &#8211; <strong>site:forums.xbox.com ardamis</strong> &#8211; did not match any documents.</p>
<h3>Update: 03.18.2010</h3>
<p>Both PrintPost.aspx pages are now indexed.  Google Webmaster Tools still doesn&#8217;t know of any inbound links to my Final Fantasy post, although there are probably a handful by now.</p>
<h3>Update: 03.19.2010</h3>
<p>The PrintPost.aspx pages are now showing up as the first two results in Google for <strong>final fantasy xiii xbox freeze</strong>.  My post is the third result.</p>
<h3>Update: 03.31.2010</h3>
<p>My post is now the first result for <strong>final fantasy xiii xbox freeze</strong>. The PrintPost.aspx pages are now showing up as the second and third results.</p>
<h3>Update: 06.26.2010</h3>
<p>The answer is Yes, it is possible to get inbound links that show up in Google Webmaster Tools from <a href="http://forums.xbox.com/33153553/PrintPost.aspx">forums.xbox.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ardamis.com/2010/03/17/is-it-possible-to-get-inbound-links-from-the-xbox-forums/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Word 2007 macros for converting symbols to HTML entities</title>
		<link>http://www.ardamis.com/2010/03/02/word-2007-macros-for-converting-symbols-to-html-entities/</link>
		<comments>http://www.ardamis.com/2010/03/02/word-2007-macros-for-converting-symbols-to-html-entities/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 03:24:08 +0000</pubDate>
		<dc:creator>ardamis</dc:creator>
				<category><![CDATA[Nonsense]]></category>
		<category><![CDATA[Web Site Dev]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://www.ardamis.com/?p=443</guid>
		<description><![CDATA[A few Word macros that will replace the symbols commonly found in documents with html entities.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m often given copy for web sites as Word documents.  As one would expect, these documents contain all sorts of symbols that should be converted to entities before they can be used in a web page.</p>
<p>For example, &#8216;smart quotes&#8217; (curly quotes), trademark and registered symbols, em-dashes, and other symbols look great, but can cause problems if you just drop them into a page and don&#8217;t use the corresponding character encoding.</p>
<p>Rather than do a global find-and-replace in my HTML editor, I&#8217;ve written a few Word macros that replace these symbols.</p>
<p>The first macro, CleanupHTML, replaces smart quotes with straight quotes.  The second macro, PrettyHTML, replaces smart quotes with the correct pretty quote, ala <strong>&rsquo;</strong>.</p>
<p>At some point, I want to extend the macro to replace accented characters, such as <strong>&egrave;</strong>, and also to wrap bold and italics in <strong>strong</strong> and <em>em</em> tags.  Ideally, I&#8217;d also find a way of converting lists in Word to straight text wrapped in unordered list items, as lists seem to require the most cleanup when copying and pasting.</p>
<pre class="brush: plain;">
Sub CleanupHTML()
'
' CleanupHTML Macro
' Cleanup document for HTML by replacing special characters with entities.
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;&amp;&quot;
        .Replacement.Text = &quot;&amp;amp;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;©&quot;
        .Replacement.Text = &quot;&amp;copy;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;®&quot;
        .Replacement.Text = &quot;&amp;reg;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;™&quot;
        .Replacement.Text = &quot;&amp;#8482;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;--&quot;
        .Replacement.Text = &quot;&amp;#8212;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;—&quot;
        .Replacement.Text = &quot;&amp;#8212;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;–&quot;
        .Replacement.Text = &quot;&amp;#8211;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;…&quot;
        .Replacement.Text = &quot;...&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;'&quot;
        .Replacement.Text = &quot;'&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = &quot;&quot;&quot;&quot;
        .Replacement.Text = &quot;&quot;&quot;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Sub PrettyHTML()
'
' PrettyHTML Macro
'
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;&amp;&quot;
        .Replacement.Text = &quot;&amp;amp;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;©&quot;
        .Replacement.Text = &quot;&amp;copy;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;®&quot;
        .Replacement.Text = &quot;&amp;reg;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;™&quot;
        .Replacement.Text = &quot;&amp;#8482;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;--&quot;
        .Replacement.Text = &quot;&amp;#8212;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;—&quot;
        .Replacement.Text = &quot;&amp;#8212;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;–&quot;
        .Replacement.Text = &quot;&amp;#8211;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;…&quot;
        .Replacement.Text = &quot;...&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = ChrW(8220)
        .Replacement.Text = &quot;&amp;ldquo;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = ChrW(8221)
        .Replacement.Text = &quot;&amp;rdquo;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;'&quot;
        .Replacement.Text = &quot;&amp;rsquo;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = &quot;è&quot;
        .Replacement.Text = &quot;&amp;egrave;&quot;
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
End Sub
</pre>
<p>Many thanks to<br />
<a href="http://celebritycola.blogspot.com/2004/09/preserving-formatting-when-posting.html">http://celebritycola.blogspot.com/2004/09/preserving-formatting-when-posting.html</a> for getting me started on this.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ardamis.com/2010/03/02/word-2007-macros-for-converting-symbols-to-html-entities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My favorite themeforest.net WordPress templates</title>
		<link>http://www.ardamis.com/2010/02/21/my-favorite-themeforest-net-wordpress-templates/</link>
		<comments>http://www.ardamis.com/2010/02/21/my-favorite-themeforest-net-wordpress-templates/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 06:20:56 +0000</pubDate>
		<dc:creator>ardamis</dc:creator>
				<category><![CDATA[Web Site Dev]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[templates]]></category>
		<category><![CDATA[themes]]></category>

		<guid isPermaLink="false">http://www.ardamis.com/?p=483</guid>
		<description><![CDATA[A collection of my favorite themeforest.net WordPress templates, mostly intended for web designers or graphics-related businesses.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been collecting links to good WordPress templates for a long time.  Because I&#8217;ve been asked a few times recently if I can recommend some templates, I&#8217;m putting them together here.</p>
<h2>Huge, isolated, animated slideshow</h2>
<p>I really like these themes for focusing almost exclusively on one&#8217;s portfolio.  They feature a massive, animated slideshow that keeps the visitor&#8217;s attention on the images.  In some cases, a shadow underneath the slideshow, combined with the animation, creates a 3-D effect to put the portfolio right in the visitor&#8217;s face.</p>
<ul>
<li><a href="http://themeforest.net/item/black-eve-wordpress-version/full_screen_preview/93185">http://themeforest.net/item/black-eve-wordpress-version/full_screen_preview/93185</a></li>
<li><a href="http://themeforest.net/item/novatorix-10-in-1-business-portfolio-and-blog/full_screen_preview/111717">http://themeforest.net/item/novatorix-10-in-1-business-portfolio-and-blog/full_screen_preview/111717</a></li>
<li><a href="http://themeforest.net/item/iportfolio/full_screen_preview/75877">http://themeforest.net/item/iportfolio/full_screen_preview/75877</a></li>
<li><a href="http://themeforest.net/item/display-3-in-1-business-portfolio-wordpress-/full_screen_preview/74542">http://themeforest.net/item/display-3-in-1-business-portfolio-wordpress-/full_screen_preview/74542</a></li>
<li><a href="http://themeforest.net/item/7-in-1-business-success-wordpress-theme/full_screen_preview/88463">http://themeforest.net/item/7-in-1-business-success-wordpress-theme/full_screen_preview/88463</a></li>
<li><a href="http://themeforest.net/item/flexolio-porfolio-blog-business-cms-wp-theme-/full_screen_preview/81146">http://themeforest.net/item/flexolio-porfolio-blog-business-cms-wp-theme-/full_screen_preview/81146</a></li>
<li><a href="http://themeforest.net/item/discovery-wordpress/full_screen_preview/83792">http://themeforest.net/item/discovery-wordpress/full_screen_preview/83792</a></li>
<li><a href="http://themeforest.net/item/assurance-wordpress-cms-theme/full_screen_preview/84092">http://themeforest.net/item/assurance-wordpress-cms-theme/full_screen_preview/84092</a></li>
</ul>
<h2>Confined slideshow</h2>
<p>These themes are a bit more modest than the first collection.  They still accentuate a portfolio of images, but in a less flashy way.  The slideshow exists within a defined banner area, so the look is a little more traditional.  These templates would be a better fit for businesses.</p>
<ul>
<li><a href="http://themeforest.net/item/vulcan-minimalist-business-wordpress-theme-4/full_screen_preview/111625">http://themeforest.net/item/vulcan-minimalist-business-wordpress-theme-4/full_screen_preview/111625</a></li>
<li><a href="http://themeforest.net/item/creation-minimalist-business-wordpress-theme/full_screen_preview/113734">http://themeforest.net/item/creation-minimalist-business-wordpress-theme/full_screen_preview/113734</a></li>
<li><a href="http://themeforest.net/item/corporate-business-portfolio-wordpress-theme-/full_screen_preview/81507">http://themeforest.net/item/corporate-business-portfolio-wordpress-theme-/full_screen_preview/81507</a></li>
<li><a href="http://themeforest.net/item/luxury-wordpress-template/full_screen_preview/83220">http://themeforest.net/item/luxury-wordpress-template/full_screen_preview/83220</a></li>
<li><a href="http://themeforest.net/item/tylium-premium-wordpress-theme/full_screen_preview/68229">http://themeforest.net/item/tylium-premium-wordpress-theme/full_screen_preview/68229</a></li>
<li><a href="http://themeforest.net/item/shapeshifter-one-page-infinite-possibilities/full_screen_preview/75759">http://themeforest.net/item/shapeshifter-one-page-infinite-possibilities/full_screen_preview/75759</a></li>
<li><a href="http://themeforest.net/item/delericon-businessportfolio-template-wordpress/full_screen_preview/76635">http://themeforest.net/item/delericon-businessportfolio-template-wordpress/full_screen_preview/76635</a></li>
<li><a href="http://themeforest.net/item/twicet-business-portfolio-wordpress-5-in-1/full_screen_preview/49773">http://themeforest.net/item/twicet-business-portfolio-wordpress-5-in-1/full_screen_preview/49773</a></li>
<li><a href="http://themeforest.net/item/benzo/full_screen_preview/50977">http://themeforest.net/item/benzo/full_screen_preview/50977</a></li>
<li><a href="http://themeforest.net/item/creative-wordpress-theme-9-in-1/full_screen_preview/84549">http://themeforest.net/item/creative-wordpress-theme-9-in-1/full_screen_preview/84549</a></li>
<li><a href="http://themeforest.net/item/levitation-wordpress-business-portfolio-4-in-1/full_screen_preview/60299">http://themeforest.net/item/levitation-wordpress-business-portfolio-4-in-1/full_screen_preview/60299</a></li>
<li><a href="http://themeforest.net/item/mapollo/full_screen_preview/60268">http://themeforest.net/item/mapollo/full_screen_preview/60268</a></li>
<li><a href="http://themeforest.net/item/elite-force-premium-wordpress-theme/full_screen_preview/84456">http://themeforest.net/item/elite-force-premium-wordpress-theme/full_screen_preview/84456</a></li>
</ul>
<h2>Partial-banner image rotation</h2>
<p>These themes use only part of the banner to display a rotating group of images, leaving an area for text next to the images.  This allows a short message or tagline to get equal placement.  These are the most conservative themes.</p>
<ul>
<l><a href="http://themeforest.net/item/designer-portfolio-elegant-template-wordpress/full_screen_preview/96810">http://themeforest.net/item/designer-portfolio-elegant-template-wordpress/full_screen_preview/96810</a></li>
<li><a href="http://themeforest.net/item/bluelight-wordpress-20-portfolio-and-blog/full_screen_preview/40433">http://themeforest.net/item/bluelight-wordpress-20-portfolio-and-blog/full_screen_preview/40433</a></li>
<li><a href="http://themeforest.net/item/quadro-wordpress-version/full_screen_preview/79966">http://themeforest.net/item/quadro-wordpress-version/full_screen_preview/79966</a></li>
<li><a href="http://themeforest.net/item/concept-wordpress-a-premium-wp-theme/full_screen_preview/53845">http://themeforest.net/item/concept-wordpress-a-premium-wp-theme/full_screen_preview/53845</a></li>
<li><a href="http://themeforest.net/item/lightcorners/full_screen_preview/82046">http://themeforest.net/item/lightcorners/full_screen_preview/82046</a></li>
<li><a href="http://themeforest.net/item/concise/full_screen_preview/66396">http://themeforest.net/item/concise/full_screen_preview/66396</a></li>
<li><a href="http://themeforest.net/item/spotlight-portfolio-theme-wordpress-edition/full_screen_preview/80959">http://themeforest.net/item/spotlight-portfolio-theme-wordpress-edition/full_screen_preview/80959</a></li>
<li><a href="http://themeforest.net/item/transformer/82402">http://themeforest.net/item/transformer/82402</a></li>
<li><a href="http://themeforest.net/item/scroller-wordpress-theme/full_screen_preview/83162">http://themeforest.net/item/scroller-wordpress-theme/full_screen_preview/83162</a></li>
<li><a href="http://themeforest.net/item/advantage-wordpress-theme-4-in-1/full_screen_preview/88112">http://themeforest.net/item/advantage-wordpress-theme-4-in-1/full_screen_preview/88112</a></li>
<li><a href="http://themeforest.net/item/durable-5-in-1-business-portfolio-wordpress/full_screen_preview/84440">http://themeforest.net/item/durable-5-in-1-business-portfolio-wordpress/full_screen_preview/84440</a></li>
<li><a href="http://themeforest.net/item/equator-global-community-wordpress-theme/full_screen_preview/65549">http://themeforest.net/item/equator-global-community-wordpress-theme/full_screen_preview/65549</a></li>
<li><a href="http://themeforest.net/item/oxygene-clean-environment/full_screen_preview/62657">http://themeforest.net/item/oxygene-clean-environment/full_screen_preview/62657</a></li>
<li><a href="http://themeforest.net/item/foliothemes-portfolio/full_screen_preview/66448">http://themeforest.net/item/foliothemes-portfolio/full_screen_preview/66448</a></li>
<li><a href="http://themeforest.net/item/eclectic-premium-wordpress-theme/full_screen_preview/63212">http://themeforest.net/item/eclectic-premium-wordpress-theme/full_screen_preview/63212</a></li>
<li><a href="http://themeforest.net/item/bitwork-portfolio-and-business-wordpress-theme/full_screen_preview/87092">http://themeforest.net/item/bitwork-portfolio-and-business-wordpress-theme/full_screen_preview/87092</a></li>
<li><a href="http://themeforest.net/item/business-showcase-corporate-layout-html/full_screen_preview/50191">http://themeforest.net/item/business-showcase-corporate-layout-html/full_screen_preview/50191</a></li>
<li><a href="http://themeforest.net/item/corpomino/full_screen_preview/63883">http://themeforest.net/item/corpomino/full_screen_preview/63883</a></li>
<li><a href="http://themeforest.net/item/photography-and-portfolio-wordpress-theme/full_screen_preview/82048">http://themeforest.net/item/photography-and-portfolio-wordpress-theme/full_screen_preview/82048</a></li>
<li><a href="http://themeforest.net/item/kava-wp-theme-for-cms-business-portfolio-blog/full_screen_preview/82551">http://themeforest.net/item/kava-wp-theme-for-cms-business-portfolio-blog/full_screen_preview/82551</a></li>
</ul>
<h2>Creative themes</h2>
<p>This last group of themes break with the conventions of the above themes and use full-screen-width or otherwise larger-than-normal images that rotate behind the other elements of the site.  Undeniably attention-grabbing, but also slower to load.</p>
<ul>
<li><a href="http://themeforest.net/item/the-architect-wp-edition/full_screen_preview/113414">http://themeforest.net/item/the-architect-wp-edition/full_screen_preview/113414</a></li>
<li><a href="http://themeforest.net/item/photome-photography-and-portfolio-template-wp/full_screen_preview/113474">http://themeforest.net/item/photome-photography-and-portfolio-template-wp/full_screen_preview/113474</a></li>
<li><a href="http://themeforest.net/item/wp-portfolius-v9/full_screen_preview/81863">http://themeforest.net/item/wp-portfolius-v9/full_screen_preview/81863</a></li>
<li><a href="http://themeforest.net/item/photo-graphic-studio-wordpress/full_screen_preview/36070">http://themeforest.net/item/photo-graphic-studio-wordpress/full_screen_preview/36070</a></li>
<li><a href="http://themeforest.net/item/desktop-press-creative-wordpress-theme/full_screen_preview/87968">http://themeforest.net/item/desktop-press-creative-wordpress-theme/full_screen_preview/87968</a></li>
<li><a href="http://themeforest.net/item/luna-premium-wordpress-theme/full_screen_preview/85233">http://themeforest.net/item/luna-premium-wordpress-theme/full_screen_preview/85233</a></li>
</ul>
<h2>Single page</h2>
<p>These are single-page web sites.  These types of pages are great as business cards or resumes, or as place holders while a larger site is developed.</p>
<ul>
<li><a href="http://themeforest.net/item/galeria-single-page-wordpress-portfolio/full_screen_preview/105848">http://themeforest.net/item/galeria-single-page-wordpress-portfolio/full_screen_preview/105848</a></li>
<li><a href="http://themeforest.net/item/path-finder-keyboard-navigation-wordpress-theme/full_screen_preview/109983">http://themeforest.net/item/path-finder-keyboard-navigation-wordpress-theme/full_screen_preview/109983</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ardamis.com/2010/02/21/my-favorite-themeforest-net-wordpress-templates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A PHP function to sum values in associative arrays</title>
		<link>http://www.ardamis.com/2009/10/12/php-function-sum-values-associative-arrays/</link>
		<comments>http://www.ardamis.com/2009/10/12/php-function-sum-values-associative-arrays/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 05:40:35 +0000</pubDate>
		<dc:creator>ardamis</dc:creator>
				<category><![CDATA[Web Site Dev]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.ardamis.com/?p=378</guid>
		<description><![CDATA[Combine two or more associative arrays and sum the values of any keys that exist in common.]]></description>
			<content:encoded><![CDATA[<p>For a new project, I needed to combine two or more associative arrays and sum the values of any keys that exist in common.  I was a little surprised to find that there wasn&#8217;t a built-in function to do this in PHP.  So I wrote my own.  It can accept any number of arrays as arguments, and goes through each array one key at a time, comparing the keys to those in an output array.  Where the keys match, the values are summed.  If the key does not exist in the output array, it&#8217;s appended to it.</p>
<p>The function returns an array that contains all of the unique keys in the input arrays.</p>
<p>If anyone has any ideas about how to optimize this, please post a comment.  One thought would be to use the first array as the output array, avoiding the key-by-key comparison of the first array against an empty array.</p>
<pre class="brush: php;">
function array_mesh() {
	// Combine multiple associative arrays and sum the values for any common keys
	// The function can accept any number of arrays as arguments
	// The values must be numeric or the summed value will be 0

	// Get the number of arguments being passed
	$numargs = func_num_args();

	// Save the arguments to an array
	$arg_list = func_get_args();

	// Create an array to hold the combined data
	$out = array();

	// Loop through each of the arguments
	for ($i = 0; $i &lt; $numargs; $i++) {
		$in = $arg_list[$i]; // This will be equal to each array passed as an argument

		// Loop through each of the arrays passed as arguments
		foreach($in as $key =&gt; $value) {
			// If the same key exists in the $out array
			if(array_key_exists($key, $out)) {
				// Sum the values of the common key
				$sum = $in[$key] + $out[$key];
				// Add the key =&gt; value pair to array $out
				$out[$key] = $sum;
			}else{
				// Add to $out any key =&gt; value pairs in the $in array that did not have a match in $out
				$out[$key] = $in[$key];
			}
		}
	}

	return $out;
}
</pre>
<p>If you want to test it out, here&#8217;s some additional code.</p>
<pre class="brush: php;">
$a = array('abc' =&gt; '100.000', 'def' =&gt; '50', 'ghi' =&gt; '25', 'xyz' =&gt; '10');
$b = array('abc' =&gt; '100.333', 'def' =&gt; '75', 'ghi' =&gt; '50', 'jkl' =&gt; '25');
$c = array('abc' =&gt; '100.111', 'def' =&gt; '75', 'ghi' =&gt; '50', 'uvw' =&gt; '5');

echo &quot;&lt;pre&gt;&quot;;
print_r(array_mesh($a, $b, $c));
echo &quot;&lt;/pre&gt;&quot;;
</pre>
<p>I hope you find it helpful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ardamis.com/2009/10/12/php-function-sum-values-associative-arrays/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
