<?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>Chris Abernethy . com</title>
	
	<link>http://www.chrisabernethy.com</link>
	<description />
	<lastBuildDate>Wed, 31 Mar 2010 14:42:26 +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/ChrisAbernethyCom" /><feedburner:info uri="chrisabernethycom" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Tracking Keyword Ranking Position with Google Analytics</title>
		<link>http://feedproxy.google.com/~r/ChrisAbernethyCom/~3/a76RC34b93g/</link>
		<comments>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Ftracking-keyword-ranking-position-with-google-analytics%2F&amp;seed_title=Tracking+Keyword+Ranking+Position+with+Google+Analytics#comments</comments>
		<pubDate>Thu, 16 Apr 2009 17:52:43 +0000</pubDate>
		<dc:creator>Brownoxford</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[keywords]]></category>

		<guid isPermaLink="false">http://www.chrisabernethy.com/?p=224</guid>
		<description><![CDATA[Google has changed the referring URL format for visitors coming from Google search result pages. This post walks you through the necessary steps to take advantage of the new format and track SERP rankings per keyword using Google Analytics profiles and filters. ]]></description>
			<content:encoded><![CDATA[<p>Google recently <a href="http://analytics.blogspot.com/2009/04/upcoming-change-to-googlecom-search.html" title="Google Announces Change in Referring URL Format">announced a change in the format of the referring URL</a> for visitors finding your site through keyword searches.</p>

<p>The new format promises to reveal much more information about the search result rankings that was previously available, and this post will show you how to take advantage of that information to tune your SEO efforts using Google Analytics.</p>
<span id="more-224"></span>
<blockquote>
<p>Starting this week, you may start seeing a new referring URL format for visitors coming from Google search result pages. Up to now, the usual referrer for clicks on search results for the term "flowers", for example, would be something like this:</p>

<p><code>http://www.google.com/search?hl=en&#038;q=flowers&#038;btnG=Google+Search</code></p>

<p>Now you will start seeing some referrer strings that look like this:</p>

<p><code>http://www.google.com/url?sa=t&#038;source=web&#038;ct=res&#038;cd=7&#038;url=http%3A%2F%2Fwww.example.com%2Fmypage.htm&#038;ei=0SjdSa-1N5O8M_qW8dQN&#038;rct=j&#038;q=flowers&#038;usg=AFQjCNHJXSUh7Vw7oubPaO3tZOzz-F-u_w&#038;sig2=X8uCFh6IoPtnwmvGMULQfw</code></p>

</blockquote>

<h2>What does that mean for me?</h2>

<p>Common speculation is that the <code>cd</code> parameter in the referral URL indicates the position of your page in the search results, and this has been <a href="http://www.blogstorm.co.uk/google-adds-ranking-data-to-referrer-string/#comment-136464" title="Matt Cutts Confirms Speculation about CD Parameter in New Google Referer">confirmed by Matt Cutts</a>.</p>

<p>Knowing what position your pages hold in the SERPS for a given keyword can be enormously helpful to your SEO efforts, so it makes sense to start tracking this new data. Prior to the change in referer, it was possible to <a href="http://yoast.com/track-seo-rankings-google-analytics/" title="Track SEO Rankings With Google Analytics">track your SEO rankings with Google Analytics</a>, but you could only get information about the <em>page</em> on which you were ranking for a keyword search, not your overall position.</p>

<h2>Create a New Profile</h2>

<p>You are definitely going to want to create a new profile within Google Analytics so that you do not interfere with the data that is already being collected for your site (The profile that we are about to set up will <em>only</em> capture data for organic search results from Google that use the new referer string).</p>

<p>Sign in to your Google Analytics account and "Add a Profile for an Existing domain". You can give it any name you like, I chose to use "Google SERP Ranking".</p>

<p><img src="http://www.chrisabernethy.com/wp-content/uploads/2009/04/step-1-create-new-website-profile.png" alt="step-1-create-new-website-profile" title="step-1-create-new-website-profile" width="475" height="128" class="alignleft size-full wp-image-235" /></p>

<h2>Create the Filters</h2>

<p>The first thing that we need to do is create a couple of filters to make sure that only organic google searches are included in this profile. Order is important, so make sure that you either create your filters in the order that they are described here, or that you go back when you are finished and reorder them appropriately.</p>

<h3>1. Include Organic Search Results</h3>

<p>Create your first custom include filter using the <em>Campaign Medium</em> filter field and a filter pattern of <em>organic</em>.</p>

<p><img src="http://www.chrisabernethy.com/wp-content/uploads/2009/04/step-2-include-only-organic-search-results.png" alt="step-2-include-only-organic-search-results" title="step-2-include-only-organic-search-results" width="475" height="256" class="alignleft size-full wp-image-236" /></p>

<h3>2. Include Google Search Results</h3>

<p>Create another custom include filter using the <em>Campaign Source</em> filter field and a filter pattern of <em>google</em>.</p>

<p><img src="http://www.chrisabernethy.com/wp-content/uploads/2009/04/step-3-include-only-google-searches.png" alt="step-3-include-only-google-searches" title="step-3-include-only-google-searches" width="475" height="256" class="alignleft size-full wp-image-237" /></p>

<h3>3. Include New Google Referral URL</h3>

<p>Create the final custom include filter using the <em>Referral</em> filter field and a filter pattern of <code>google.com/(search|url).*\bcd=\d*</code>.</p>

<p><img src="http://www.chrisabernethy.com/wp-content/uploads/2009/04/step-4-include-new-google-referer.png" alt="step-4-include-new-google-referer" title="step-4-include-new-google-referer" width="475" height="233" class="alignleft size-full wp-image-238" /></p>

<h3>4. Extract Keyword and Ranking Data</h3>

<p>The last filter we need to create is an advanced filter that will extract data from the referal string and create custom output that will be viewable in our reports. Create an advanced custom filter, and set the pulldowns, text areas and radio buttons as shown in the screenshot. This will extract the keywords and SERP position from the referal string and replace the output with our own custom string in the format <code>&lt;keyword&gt; (Rank: &lt;position&gt;)</code></p>

<p><img src="http://www.chrisabernethy.com/wp-content/uploads/2009/04/step-5-construct-output.png" alt="step-5-construct-output" title="step-5-construct-output" width="475" height="326" class="alignleft size-full wp-image-239" /></p>

For clarity, here are the three regular expressions from the previous screenshot:
<pre>\bq=([^&#038;]*)
\bcd=(\d*)
$A1 (Rank: $B1)</pre>

<h2>Visualizing Results</h2>

<p>Once you have created the new profile and filters, and have started receiving traffic, you should be able to see the keyword/ranking data in any of your reports when you change the dimension to <em>User Defined Value</em>.</p>

<p><img src="http://www.chrisabernethy.com/wp-content/uploads/2009/04/results.png" alt="results" title="results" width="390" height="121" class="alignleft size-full wp-image-240" /></p>

<p>Please share your experiences with this or any other helpful Google Analytics tricks that you use!</p>



	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Ftracking-keyword-ranking-position-with-google-analytics%252F%26amp%3Bseed_title%3DTracking%2BKeyword%2BRanking%2BPosition%2Bwith%2BGoogle%2BAnalytics&amp;title=Tracking%20Keyword%20Ranking%20Position%20with%20Google%20Analytics&amp;bodytext=Google%20has%20changed%20the%20referring%20URL%20format%20for%20visitors%20coming%20from%20Google%20search%20result%20pages.%20This%20post%20walks%20you%20through%20the%20necessary%20steps%20to%20take%20advantage%20of%20the%20new%20format%20and%20track%20SERP%20rankings%20per%20keyword%20using%20Google%20Analytics%20profiles%20and%20filters.%20" title="Digg"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Ftracking-keyword-ranking-position-with-google-analytics%252F%26amp%3Bseed_title%3DTracking%2BKeyword%2BRanking%2BPosition%2Bwith%2BGoogle%2BAnalytics&amp;title=Tracking%20Keyword%20Ranking%20Position%20with%20Google%20Analytics" title="StumbleUpon"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Ftracking-keyword-ranking-position-with-google-analytics%252F%26amp%3Bseed_title%3DTracking%2BKeyword%2BRanking%2BPosition%2Bwith%2BGoogle%2BAnalytics" title="Sphinn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Ftracking-keyword-ranking-position-with-google-analytics%252F%26amp%3Bseed_title%3DTracking%2BKeyword%2BRanking%2BPosition%2Bwith%2BGoogle%2BAnalytics&amp;title=Tracking%20Keyword%20Ranking%20Position%20with%20Google%20Analytics&amp;notes=Google%20has%20changed%20the%20referring%20URL%20format%20for%20visitors%20coming%20from%20Google%20search%20result%20pages.%20This%20post%20walks%20you%20through%20the%20necessary%20steps%20to%20take%20advantage%20of%20the%20new%20format%20and%20track%20SERP%20rankings%20per%20keyword%20using%20Google%20Analytics%20profiles%20and%20filters.%20" title="del.icio.us"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Ftracking-keyword-ranking-position-with-google-analytics%252F%26amp%3Bseed_title%3DTracking%2BKeyword%2BRanking%2BPosition%2Bwith%2BGoogle%2BAnalytics&amp;title=Tracking%20Keyword%20Ranking%20Position%20with%20Google%20Analytics&amp;source=Chris+Abernethy+.+com+&amp;summary=Google%20has%20changed%20the%20referring%20URL%20format%20for%20visitors%20coming%20from%20Google%20search%20result%20pages.%20This%20post%20walks%20you%20through%20the%20necessary%20steps%20to%20take%20advantage%20of%20the%20new%20format%20and%20track%20SERP%20rankings%20per%20keyword%20using%20Google%20Analytics%20profiles%20and%20filters.%20" title="LinkedIn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Ftracking-keyword-ranking-position-with-google-analytics%252F%26amp%3Bseed_title%3DTracking%2BKeyword%2BRanking%2BPosition%2Bwith%2BGoogle%2BAnalytics&amp;t=Tracking%20Keyword%20Ranking%20Position%20with%20Google%20Analytics" title="Facebook"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="" title="TwitThis"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/" title="TwitThis" alt="TwitThis" class="sociable-hovers" /></a>


<br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/dAvjwh66DU4yJTJg2FuaR_O0hMA/0/da"><img src="http://feedads.g.doubleclick.net/~a/dAvjwh66DU4yJTJg2FuaR_O0hMA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/dAvjwh66DU4yJTJg2FuaR_O0hMA/1/da"><img src="http://feedads.g.doubleclick.net/~a/dAvjwh66DU4yJTJg2FuaR_O0hMA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ChrisAbernethyCom/~4/a76RC34b93g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Ftracking-keyword-ranking-position-with-google-analytics%2F&amp;seed_title=Tracking+Keyword+Ranking+Position+with+Google+Analytics/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		<feedburner:origLink>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Ftracking-keyword-ranking-position-with-google-analytics%2F&amp;seed_title=Tracking+Keyword+Ranking+Position+with+Google+Analytics</feedburner:origLink></item>
		<item>
		<title>Profiling PHP with Xdebug and Webgrind</title>
		<link>http://feedproxy.google.com/~r/ChrisAbernethyCom/~3/ofyS73qp2IU/</link>
		<comments>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fphp-profiling-xdebug-webgrind%2F&amp;seed_title=Profiling+PHP+with+Xdebug+and+Webgrind#comments</comments>
		<pubDate>Sat, 10 Jan 2009 20:24:40 +0000</pubDate>
		<dc:creator>Brownoxford</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[profiling]]></category>
		<category><![CDATA[xdebug]]></category>

		<guid isPermaLink="false">http://www.chrisabernethy.com/?p=178</guid>
		<description><![CDATA[Finding and fixing performance bottlenecks in PHP web applications can be both time-consuming and difficult. Fortunately, free tools like Xdebug and Webgrind allow you to easily find and visualize bottlenecks in your PHP scripts.]]></description>
			<content:encoded><![CDATA[Finding and fixing performance bottlenecks in PHP web applications can be both time-consuming and difficult. Fortunately, free tools like <a href="http://www.xdebug.org/index.php" title="Xdebug Homepage">Xdebug</a> and <a href="http://code.google.com/p/webgrind/" title="Webgrind Project Home">Webgrind</a> allow you to easily find and visualize bottlenecks in your PHP scripts.

<blockquote>Webgrind is an Xdebug profiling web frontend in PHP5. It implements a subset of the features of kcachegrind and installs in seconds and works on all platforms.<cite>--Webgrind</cite></blockquote>
<span id="more-178"></span>
<p>Anyone who has ever needed to profile code is probably familiar with <a href="http://kcachegrind.sourceforge.net/cgi-bin/show.cgi" title="KcacheGrind">KcacheGrind</a> (a profile data visualization tool). KcacheGrind provides a way to visualize the profile data from a program execution, allowing you to quickly and easily see where the program is spending its time. Knowing where the execution bottlenecks are allows you to focus your optimization efforts in the correct places.</p>

<p>For a long time, the Xdebug extension for PHP has been able to (among other things) dump execution profile information to disk in a format that is usable by KcacheGrind, which is great if you are running Linux with KDE.</p>

<p>The webgrind project provides a web-based replacement for KcacheGrind that can be installed on any operating system, allowing you to visualize a portion of the Xdebug profiling data through a browser.</p>

<img src="http://www.chrisabernethy.com/wp-content/uploads/2009/01/webgrind_small.png" alt="Webgrind Interface" title="Webgrind Interface" width="440" height="324" class="aligncenter size-full wp-image-179" />

<h2>Installation</h2>
<p>Before using webgrind, you must first <a href="http://www.xdebug.org/docs/install" title="Installing Xdebug">install Xdebug</a>.</p>
<p>Installing webgrind is pretty simple:</p>
<ol>
<li><a href="http://code.google.com/p/webgrind/downloads/list" title="Download Webgrind">Download webgrind</a></li>
<li>Unzip webgrind in your web server's document root</li>
<li>Configure Xdebug and webgrind</li>
<li>Point your browser to where you installed webgrind</li>
</ol>

<h2>Configuration</h2>
<p>Unfortunately, webgrind does not often work "out-of-the-box"... There are a few configuration details that need to be dealt with in order to start profiling your code. The following PHP configuration directives can be used to control the behavior of Xcebug:</p>

<dl>
<dt>xdebug.profiler_enable</dt>
<dd>This directive actually turns on Xdebug's internal profiler. You <em>must</em> set this to <code>1</code> in order to have Xdebug actually produce output for webgrind to analyze.</dd>

<dt>xdebug.profiler_enable_trigger</dt>
<dd>
If you enable this option, profiles will only be generated if you pass a GET/POST parameter or cookie with the name <code>XDEBUG_PROFILE</code>, <em>e.g.</em>, <code>http://localhost/script.php?XDEBUG_PROFILE</code>. You must <em>not</em> enable <code>xdebug.profiler_enable</code> if you use this option.
</dd>

<dt>xdebug.profiler_output_dir</dt>
<dd>This directive tells Xdebug where to put the profile data. By default, it is set to '/tmp', which is usually fine. If you want, you can probably omit this from your Xdebug configuration.</dd>

<dt>xdebug.profiler_output_name</dt>
<dd>This value tells Xdebug how to create filenames for the data it writes to disk. By default, the value is set to <code>cachegrind.out.%p</code>, where <code>%p</code> will be replaced with the process ID. This is bad, and you will definitely need to change it. The problem is that Apache processes serve multiple requests, so each request in a given process will overwrite the profiling data from previous requests. Other <a href="http://www.xdebug.org/docs/all_settings#trace_output_name" title="xdebug.profiler_output_name format specifiers">possible format specifiers</a> can be used.</dd>

<dt>xdebug.profiler_append</dt>
<dd>
Enabling this option will cause xdebug to append data to the output file if it already exists (the default behavior is to overwrite the output file). This is a handy option if you need to average out the profiling data over multiple script executions. In that case, be sure to set <code>xdebug.profiler_output_name</code> using a format that will ensure that each successive page load uses the same profiler output name, <em>e.g.</em>, <code>cachegrind.out.%s</code>.
</dd>
</dl>

<p>Assuming you have already loaded the Xdebug extension, the following additional PHP configuration directives should be a good starting point for you:</p>

<pre>
xdebug.profiler_enable = 1
xdebug.profiler_output_name = cachegrind.out.%t.%p
</pre>

<p>That's it, you should be ready to profile your PHP code with Xdebug and Cachegrind!</p>



	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fphp-profiling-xdebug-webgrind%252F%26amp%3Bseed_title%3DProfiling%2BPHP%2Bwith%2BXdebug%2Band%2BWebgrind&amp;title=Profiling%20PHP%20with%20Xdebug%20and%20Webgrind&amp;bodytext=Finding%20and%20fixing%20performance%20bottlenecks%20in%20PHP%20web%20applications%20can%20be%20both%20time-consuming%20and%20difficult.%20Fortunately%2C%20free%20tools%20like%20Xdebug%20and%20Webgrind%20allow%20you%20to%20easily%20find%20and%20visualize%20bottlenecks%20in%20your%20PHP%20scripts." title="Digg"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fphp-profiling-xdebug-webgrind%252F%26amp%3Bseed_title%3DProfiling%2BPHP%2Bwith%2BXdebug%2Band%2BWebgrind&amp;title=Profiling%20PHP%20with%20Xdebug%20and%20Webgrind" title="StumbleUpon"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fphp-profiling-xdebug-webgrind%252F%26amp%3Bseed_title%3DProfiling%2BPHP%2Bwith%2BXdebug%2Band%2BWebgrind" title="Sphinn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fphp-profiling-xdebug-webgrind%252F%26amp%3Bseed_title%3DProfiling%2BPHP%2Bwith%2BXdebug%2Band%2BWebgrind&amp;title=Profiling%20PHP%20with%20Xdebug%20and%20Webgrind&amp;notes=Finding%20and%20fixing%20performance%20bottlenecks%20in%20PHP%20web%20applications%20can%20be%20both%20time-consuming%20and%20difficult.%20Fortunately%2C%20free%20tools%20like%20Xdebug%20and%20Webgrind%20allow%20you%20to%20easily%20find%20and%20visualize%20bottlenecks%20in%20your%20PHP%20scripts." title="del.icio.us"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fphp-profiling-xdebug-webgrind%252F%26amp%3Bseed_title%3DProfiling%2BPHP%2Bwith%2BXdebug%2Band%2BWebgrind&amp;title=Profiling%20PHP%20with%20Xdebug%20and%20Webgrind&amp;source=Chris+Abernethy+.+com+&amp;summary=Finding%20and%20fixing%20performance%20bottlenecks%20in%20PHP%20web%20applications%20can%20be%20both%20time-consuming%20and%20difficult.%20Fortunately%2C%20free%20tools%20like%20Xdebug%20and%20Webgrind%20allow%20you%20to%20easily%20find%20and%20visualize%20bottlenecks%20in%20your%20PHP%20scripts." title="LinkedIn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fphp-profiling-xdebug-webgrind%252F%26amp%3Bseed_title%3DProfiling%2BPHP%2Bwith%2BXdebug%2Band%2BWebgrind&amp;t=Profiling%20PHP%20with%20Xdebug%20and%20Webgrind" title="Facebook"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="" title="TwitThis"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/" title="TwitThis" alt="TwitThis" class="sociable-hovers" /></a>


<br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/LhJmrEfxTqxZkayMcyv5A62Y6es/0/da"><img src="http://feedads.g.doubleclick.net/~a/LhJmrEfxTqxZkayMcyv5A62Y6es/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/LhJmrEfxTqxZkayMcyv5A62Y6es/1/da"><img src="http://feedads.g.doubleclick.net/~a/LhJmrEfxTqxZkayMcyv5A62Y6es/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ChrisAbernethyCom/~4/ofyS73qp2IU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fphp-profiling-xdebug-webgrind%2F&amp;seed_title=Profiling+PHP+with+Xdebug+and+Webgrind/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		<feedburner:origLink>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fphp-profiling-xdebug-webgrind%2F&amp;seed_title=Profiling+PHP+with+Xdebug+and+Webgrind</feedburner:origLink></item>
		<item>
		<title>Google PageRank Update For The New Year</title>
		<link>http://feedproxy.google.com/~r/ChrisAbernethyCom/~3/qOWTkB3Rzsk/</link>
		<comments>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fgoogle-pagerank-update-new-year%2F&amp;seed_title=Google+PageRank+Update+For+The+New+Year#comments</comments>
		<pubDate>Wed, 31 Dec 2008 15:42:17 +0000</pubDate>
		<dc:creator>Brownoxford</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[pagerank]]></category>

		<guid isPermaLink="false">http://www.chrisabernethy.com/?p=172</guid>
		<description><![CDATA[Google has updated their PageRank, just in time for the new year! Never heard of PageRank? PageRank is Google's method of determining how "valueable" it considers your page to be. Learn how to check the PageRank of your sites, and join the discussion about the latest PageRank update!]]></description>
			<content:encoded><![CDATA[<p>Google has updated their PageRank, just in time for the new year! Never heard of PageRank? PageRank is Google's method of determining how "valueable" it considers your page to be. According to <a href="http://en.wikipedia.org/wiki/Pagerank" title="Wikipedia">Wikipedia</a>, PageRank is defined as:</p>

<blockquote>PageRank is a link analysis algorithm used by the Google Internet search engine that assigns a numerical weighting to each element of a hyperlinked set of documents, such as the World Wide Web, with the purpose of "measuring" its relative importance within the set. 
</blockquote>
<span id="more-172"></span>
<h2>What is my PageRank?</h2>

<p>There are a number of ways to check your PageRank, but some of the easiest and most useful come in the form of Firefox plugins. These are a few of the most popular:</p>

<ul>
<li><a href="http://tools.seobook.com/firefox/seo-for-firefox.html" title="SEO For Firefox">SEO For Firefox</a></li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/321" title="SearchStatus Firefox Plugin">SearchStatus</a></li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/2007" title="Live PageRank Firefox Plugin">Live PageRank</a></li>
</ul>

<p>My <a href="http://www.chrisabernethy.com/wordpress-plugins/member-access/" title="Member Access WordPress Plugin">Member Access</a> and <a href="http://www.chrisabernethy.com/wordpress-plugins/user-voice/" title="UserVoice WordPress Plugin">UserVoice</a> WordPress plugin pages received an increase in PageRank, but for the most part pages here retained the same ranking. How did your site fare after this Google PageRank update?</p>

<p>Here's a sample of what people are <a href="http://search.twitter.com/search?q=pagerank" title="Twitter search for PageRank">saying on Twitter</a> about the latest Google PageRank update:</p>

<ul>
<li><a href="http://twitter.com/KennethMoody" title="Twitter profile for KennethMoody">@KennethMoody</a>: The Google Pagerank God has been been good. - 8:24</li>
<li><a href="http://twitter.com/jredd77" title="Twitter profile for jredd77">@jredd77</a>: Celebrating my website's PageRank increase from 0/10 to 3/10 overnight. - 9:21</li>
<li><a href="http://twitter.com/highonbeingdave" title="Twitter profile for highonbeingdave">@highonbeingdave</a>: Finally got my web site from 0 to 1 on PageRank! Yippie! (cheap thrills come easily) - 10:26</li>
</ul>

<p>Join the conversation!</p>



	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fgoogle-pagerank-update-new-year%252F%26amp%3Bseed_title%3DGoogle%2BPageRank%2BUpdate%2BFor%2BThe%2BNew%2BYear&amp;title=Google%20PageRank%20Update%20For%20The%20New%20Year&amp;bodytext=Google%20has%20updated%20their%20PageRank%2C%20just%20in%20time%20for%20the%20new%20year%21%20Never%20heard%20of%20PageRank%3F%20PageRank%20is%20Google%27s%20method%20of%20determining%20how%20%22valueable%22%20it%20considers%20your%20page%20to%20be.%20Learn%20how%20to%20check%20the%20PageRank%20of%20your%20sites%2C%20and%20join%20the%20discussion%20about%20the%20latest%20PageRank%20update%21" title="Digg"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fgoogle-pagerank-update-new-year%252F%26amp%3Bseed_title%3DGoogle%2BPageRank%2BUpdate%2BFor%2BThe%2BNew%2BYear&amp;title=Google%20PageRank%20Update%20For%20The%20New%20Year" title="StumbleUpon"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fgoogle-pagerank-update-new-year%252F%26amp%3Bseed_title%3DGoogle%2BPageRank%2BUpdate%2BFor%2BThe%2BNew%2BYear" title="Sphinn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fgoogle-pagerank-update-new-year%252F%26amp%3Bseed_title%3DGoogle%2BPageRank%2BUpdate%2BFor%2BThe%2BNew%2BYear&amp;title=Google%20PageRank%20Update%20For%20The%20New%20Year&amp;notes=Google%20has%20updated%20their%20PageRank%2C%20just%20in%20time%20for%20the%20new%20year%21%20Never%20heard%20of%20PageRank%3F%20PageRank%20is%20Google%27s%20method%20of%20determining%20how%20%22valueable%22%20it%20considers%20your%20page%20to%20be.%20Learn%20how%20to%20check%20the%20PageRank%20of%20your%20sites%2C%20and%20join%20the%20discussion%20about%20the%20latest%20PageRank%20update%21" title="del.icio.us"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fgoogle-pagerank-update-new-year%252F%26amp%3Bseed_title%3DGoogle%2BPageRank%2BUpdate%2BFor%2BThe%2BNew%2BYear&amp;title=Google%20PageRank%20Update%20For%20The%20New%20Year&amp;source=Chris+Abernethy+.+com+&amp;summary=Google%20has%20updated%20their%20PageRank%2C%20just%20in%20time%20for%20the%20new%20year%21%20Never%20heard%20of%20PageRank%3F%20PageRank%20is%20Google%27s%20method%20of%20determining%20how%20%22valueable%22%20it%20considers%20your%20page%20to%20be.%20Learn%20how%20to%20check%20the%20PageRank%20of%20your%20sites%2C%20and%20join%20the%20discussion%20about%20the%20latest%20PageRank%20update%21" title="LinkedIn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fgoogle-pagerank-update-new-year%252F%26amp%3Bseed_title%3DGoogle%2BPageRank%2BUpdate%2BFor%2BThe%2BNew%2BYear&amp;t=Google%20PageRank%20Update%20For%20The%20New%20Year" title="Facebook"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="" title="TwitThis"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/" title="TwitThis" alt="TwitThis" class="sociable-hovers" /></a>


<br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/v6wpnKIA9jmzfam1MpG0SO26U-8/0/da"><img src="http://feedads.g.doubleclick.net/~a/v6wpnKIA9jmzfam1MpG0SO26U-8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/v6wpnKIA9jmzfam1MpG0SO26U-8/1/da"><img src="http://feedads.g.doubleclick.net/~a/v6wpnKIA9jmzfam1MpG0SO26U-8/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ChrisAbernethyCom/~4/qOWTkB3Rzsk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fgoogle-pagerank-update-new-year%2F&amp;seed_title=Google+PageRank+Update+For+The+New+Year/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fgoogle-pagerank-update-new-year%2F&amp;seed_title=Google+PageRank+Update+For+The+New+Year</feedburner:origLink></item>
		<item>
		<title>Why WordPress Asks for Connection Info</title>
		<link>http://feedproxy.google.com/~r/ChrisAbernethyCom/~3/s-__XrYDQws/</link>
		<comments>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fwhy-wordpress-asks-connection-info%2F&amp;seed_title=Why+WordPress+Asks+for+Connection+Info#comments</comments>
		<pubDate>Sat, 13 Dec 2008 01:33:53 +0000</pubDate>
		<dc:creator>Brownoxford</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://www.chrisabernethy.com/?p=152</guid>
		<description><![CDATA[Does WordPress ask you for FTP information whenever you install or upgrade plugins? If you feel that your WordPress installation should not be asking you for this information, or you simply do not want WordPress to use this method of plugin management, you may be able to work around it.]]></description>
			<content:encoded><![CDATA[<p>One of the great features of WordPress is that it allows you to automatically install and upgrade plugins.</p>

<p>A common problem is that WordPress is unable to access the filesystem directly, which results in a page indicating that "<em>To perform the requested action, connection information is required.</em>"</p>
<span id="more-152"></span>
<p><img class="alignnone size-full wp-image-151" title="Connection Information" src="http://www.chrisabernethy.com/wp-content/uploads/2008/12/connection_info_needed.jpg" alt="Connection Information" width="470" height="262" /></p>

<p>If you feel that your WordPress installation should not be asking you for this information, or you simply do not want WordPress to use this method of plugin management, you may be able to work around it.</p>

<h2>What is Causing This?</h2>

<p>Whenever you use the WordPress control panel to automatically install, upgrade, or delete plugins, WordPress must make changes to files on the filesystem.</p>

<p>Before making any changes, WordPress first checks to see whether or not it has access to directly manipulate the file system.</p>

<p>If WordPress does not have the necessary permissions to modify the filesystem directly, you will be asked for FTP credentials so that WordPress can try to do what it needs to via FTP.</p> 

<h2>Why Can't WordPress Write To The Filesystem?</h2>

<p>In order to understand why WordPress can't write to the filesystem, we need to take a look at some WordPress internals.</p>

<p>The following code is from the <code>get_filesystem_method()</code> method in the <code>wp-admin/includes/file.php</code> file:

<pre>
if( function_exists('getmyuid') &#038;& function_exists('fileowner') ){
    $temp_file = wp_tempnam();
    if ( getmyuid() == fileowner($temp_file) )
        $method = 'direct';
    unlink($temp_file);
}
</pre>

<p>This code creates a temporary file and confirms that the file just created is owned by the same user that <em>owns the script currently being run</em>. In the case of installing plugins, the script being run is <code>wp-admin/plugin-install.php</code>.</p>

<p>This may seem a little counter-intuitive, since the only thing WordPress really needs to be able to do is write to the <code>wp-content/plugins</code> directory.</p>

<h2>What Can I Do About It?</h2>

<p>In order to fix this issue, you will need to make sure that the scripts which need to write to the filesystem are owned by the same user that apache is running as.</p>

<p>Many hosting companies will run your apache instance using your user account, and all of your files will be owned by the same account. In those cases, you will probably not have the issue described here.</p>

<p>If your hosting company is running apache as a system user, and your files are owned by your own account, your only option may be to enter your FTP credentials here and allow WordPress to use FTP.</p>

<p>If you are running on a hosting company that gives you root access, or you have installed WordPress on your own development machine at home or at work, you should be able to modify the filesystem permissions to allow WordPress to directly access the filesystem.</p>

<p>The easiest way to do this is to find out what user apache is running as and change ownership of the entire WordPress directory to that user. For example, if apache is running as 'httpd', you could use the following commands on your WordPress installation directory:</p>

<pre>
# chown -R httpd: wordpress
</pre>

<p>Note that not all versions of <code>chown</code> are equal. If that command does not work, see your local <code>chown</code> man page for usage information.</p>

<p class="donate-callout">
<strong>Tip:</strong> In order to find out what user your instance of apache is running as, create a test script with the following content:<br/>
<code>&lt;?php echo(exec("whoami")); ?&gt;</code><br/>
Thanks <a href="http://wp-wizardry.com/" title="WP Wizardry: Magical Stuff for WordPress">Suzanne</a>!
</p>




	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fwhy-wordpress-asks-connection-info%252F%26amp%3Bseed_title%3DWhy%2BWordPress%2BAsks%2Bfor%2BConnection%2BInfo&amp;title=Why%20WordPress%20Asks%20for%20Connection%20Info&amp;bodytext=Does%20WordPress%20ask%20you%20for%20FTP%20information%20whenever%20you%20install%20or%20upgrade%20plugins%3F%20If%20you%20feel%20that%20your%20WordPress%20installation%20should%20not%20be%20asking%20you%20for%20this%20information%2C%20or%20you%20simply%20do%20not%20want%20WordPress%20to%20use%20this%20method%20of%20plugin%20management%2C%20you%20may%20be%20able%20to%20work%20around%20it." title="Digg"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fwhy-wordpress-asks-connection-info%252F%26amp%3Bseed_title%3DWhy%2BWordPress%2BAsks%2Bfor%2BConnection%2BInfo&amp;title=Why%20WordPress%20Asks%20for%20Connection%20Info" title="StumbleUpon"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fwhy-wordpress-asks-connection-info%252F%26amp%3Bseed_title%3DWhy%2BWordPress%2BAsks%2Bfor%2BConnection%2BInfo" title="Sphinn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fwhy-wordpress-asks-connection-info%252F%26amp%3Bseed_title%3DWhy%2BWordPress%2BAsks%2Bfor%2BConnection%2BInfo&amp;title=Why%20WordPress%20Asks%20for%20Connection%20Info&amp;notes=Does%20WordPress%20ask%20you%20for%20FTP%20information%20whenever%20you%20install%20or%20upgrade%20plugins%3F%20If%20you%20feel%20that%20your%20WordPress%20installation%20should%20not%20be%20asking%20you%20for%20this%20information%2C%20or%20you%20simply%20do%20not%20want%20WordPress%20to%20use%20this%20method%20of%20plugin%20management%2C%20you%20may%20be%20able%20to%20work%20around%20it." title="del.icio.us"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fwhy-wordpress-asks-connection-info%252F%26amp%3Bseed_title%3DWhy%2BWordPress%2BAsks%2Bfor%2BConnection%2BInfo&amp;title=Why%20WordPress%20Asks%20for%20Connection%20Info&amp;source=Chris+Abernethy+.+com+&amp;summary=Does%20WordPress%20ask%20you%20for%20FTP%20information%20whenever%20you%20install%20or%20upgrade%20plugins%3F%20If%20you%20feel%20that%20your%20WordPress%20installation%20should%20not%20be%20asking%20you%20for%20this%20information%2C%20or%20you%20simply%20do%20not%20want%20WordPress%20to%20use%20this%20method%20of%20plugin%20management%2C%20you%20may%20be%20able%20to%20work%20around%20it." title="LinkedIn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fwhy-wordpress-asks-connection-info%252F%26amp%3Bseed_title%3DWhy%2BWordPress%2BAsks%2Bfor%2BConnection%2BInfo&amp;t=Why%20WordPress%20Asks%20for%20Connection%20Info" title="Facebook"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="" title="TwitThis"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/" title="TwitThis" alt="TwitThis" class="sociable-hovers" /></a>


<br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/YG3KMEES0I8fz-KBw3Rab7t5Z-A/0/da"><img src="http://feedads.g.doubleclick.net/~a/YG3KMEES0I8fz-KBw3Rab7t5Z-A/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/YG3KMEES0I8fz-KBw3Rab7t5Z-A/1/da"><img src="http://feedads.g.doubleclick.net/~a/YG3KMEES0I8fz-KBw3Rab7t5Z-A/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ChrisAbernethyCom/~4/s-__XrYDQws" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fwhy-wordpress-asks-connection-info%2F&amp;seed_title=Why+WordPress+Asks+for+Connection+Info/feed/</wfw:commentRss>
		<slash:comments>95</slash:comments>
		<feedburner:origLink>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fwhy-wordpress-asks-connection-info%2F&amp;seed_title=Why+WordPress+Asks+for+Connection+Info</feedburner:origLink></item>
		<item>
		<title>6 Essential Firefox Add-ons</title>
		<link>http://feedproxy.google.com/~r/ChrisAbernethyCom/~3/nk51FrNQw0c/</link>
		<comments>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2F6-essential-firefox-add-ons%2F&amp;seed_title=6+Essential+Firefox+Add-ons#comments</comments>
		<pubDate>Tue, 18 Nov 2008 01:14:39 +0000</pubDate>
		<dc:creator>Brownoxford</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.chrisabernethy.com/?p=117</guid>
		<description><![CDATA[There are some Firefox add-ons that are just so useful that once you've tried them, you simply cannot imagine working without them. These are six add-ons that I use every day, and that I think are worth your time to install and check out!]]></description>
			<content:encoded><![CDATA[<p>There are some add-ons for Firefox that are just so useful that I find myself installing them on every machine that I use on a regular basis. These add-ons are such an integral part of my everyday workflow, that I'm not sure I'd be able to get much done without them, and I think that you'll feel the same way once you give them a try (if you don't already have them installed, that is!)</p>
<span id="more-117"></span>
<div class="grid_4 first">
<h2>Firebug</h2>
Firebug gives you fantastic insight into the properties of a web page. Once installed, it allows you to navigate the DOM, browse calculated styles, view CSS attributes, visually see element layout properties, debug JavaScript, and view raw network requests and responses. If you create web pages, you need this add-on.
<br/>
<a title="Download Firebug" href="https://addons.mozilla.org/en-US/firefox/addon/1843" target="_blank">Download Firebug</a>
</div>

<div class="grid_4 last">
<h2>MeasureIt</h2>
MeasureIt allows you to click and drag to select a rectangular area of the currently displayed webpage and be told in real-time the width and height of the selection. This is a great tool for web developers who often need to quickly determine the width and/or height of page elements.
<br/>
<a title="Download MeasureIt" href="https://addons.mozilla.org/en-US/firefox/addon/539" target="_blank">Download MeasureIt</a>
</div>

<br style="clear:both;"/><br/>

<div class="grid_4 first">
<h2>Web Developer</h2>
Another great add-on for web developers... Web Developer provides complementary functionality to FireBug, with many pre-set menu options for tasks like displaying form element information, disabling javascript, outlining specific element types, and viewing cookie information.
<br/>
<a title="Download Web Developer" href="https://addons.mozilla.org/en-US/firefox/addon/60" target="_blank">Download Web Developer</a>
</div>

<div class="grid_4 last">
<h2>SEO for Firefox</h2>
If you are at all concerned with SEO, and you should be, go and install this add-on right now. SEO for Firefox pulls together all kinds of useful SEO-relevant data and makes it available as inline data on your search result pages, as well as on-demand for the currently viewed page through Firefox context menus.
<br/>
<a title="Download SEO for Firefox" href="http://tools.seobook.com/firefox/seo-for-firefox.html" target="_blank">Download SEO for Firefox</a>
</div>

<br style="clear:both;"/><br/>

<div class="grid_4 first">
<h2>Delicious</h2>
If you use Delicious to store your online bookmarks, this add-on is a great tool to have installed. It allows you to browse and manage your existing bookmarks, create new bookmarks, and sync bookmarks between Firefox and Delicious.
<br/>
<a title="Download Delicious" href="http://delicious.com/help/installff" target="_blank">Download Delicious</a>
</div>

<div class="grid_4 last">
<h2>TwitterBar</h2>
A great add-on for frequent Twitter users! TwitterBar allows you to type your message in the URL bar and post both your message and the URL for the page you are currently browsing directly to Twitter. Long URLs are automatically shortened using tinyurl.com.
<br/>
<a title="Download TwitterBar" href="https://addons.mozilla.org/en-US/firefox/addon/4664" target="_blank">Download TwitterBar</a>
</div>

<br style="clear:both;"/><br/>

<p>Do you have any Firefox add-ons that you can't live without? Leave a comment and tell us about them!</p>



	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252F6-essential-firefox-add-ons%252F%26amp%3Bseed_title%3D6%2BEssential%2BFirefox%2BAdd-ons&amp;title=6%20Essential%20Firefox%20Add-ons&amp;bodytext=There%20are%20some%20Firefox%20add-ons%20that%20are%20just%20so%20useful%20that%20once%20you%27ve%20tried%20them%2C%20you%20simply%20cannot%20imagine%20working%20without%20them.%20These%20are%20six%20add-ons%20that%20I%20use%20every%20day%2C%20and%20that%20I%20think%20are%20worth%20your%20time%20to%20install%20and%20check%20out%21" title="Digg"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252F6-essential-firefox-add-ons%252F%26amp%3Bseed_title%3D6%2BEssential%2BFirefox%2BAdd-ons&amp;title=6%20Essential%20Firefox%20Add-ons" title="StumbleUpon"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252F6-essential-firefox-add-ons%252F%26amp%3Bseed_title%3D6%2BEssential%2BFirefox%2BAdd-ons" title="Sphinn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252F6-essential-firefox-add-ons%252F%26amp%3Bseed_title%3D6%2BEssential%2BFirefox%2BAdd-ons&amp;title=6%20Essential%20Firefox%20Add-ons&amp;notes=There%20are%20some%20Firefox%20add-ons%20that%20are%20just%20so%20useful%20that%20once%20you%27ve%20tried%20them%2C%20you%20simply%20cannot%20imagine%20working%20without%20them.%20These%20are%20six%20add-ons%20that%20I%20use%20every%20day%2C%20and%20that%20I%20think%20are%20worth%20your%20time%20to%20install%20and%20check%20out%21" title="del.icio.us"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252F6-essential-firefox-add-ons%252F%26amp%3Bseed_title%3D6%2BEssential%2BFirefox%2BAdd-ons&amp;title=6%20Essential%20Firefox%20Add-ons&amp;source=Chris+Abernethy+.+com+&amp;summary=There%20are%20some%20Firefox%20add-ons%20that%20are%20just%20so%20useful%20that%20once%20you%27ve%20tried%20them%2C%20you%20simply%20cannot%20imagine%20working%20without%20them.%20These%20are%20six%20add-ons%20that%20I%20use%20every%20day%2C%20and%20that%20I%20think%20are%20worth%20your%20time%20to%20install%20and%20check%20out%21" title="LinkedIn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252F6-essential-firefox-add-ons%252F%26amp%3Bseed_title%3D6%2BEssential%2BFirefox%2BAdd-ons&amp;t=6%20Essential%20Firefox%20Add-ons" title="Facebook"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="" title="TwitThis"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/" title="TwitThis" alt="TwitThis" class="sociable-hovers" /></a>


<br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/C5ZlZ86QikPx4lo1OdMTYNZ0Ndw/0/da"><img src="http://feedads.g.doubleclick.net/~a/C5ZlZ86QikPx4lo1OdMTYNZ0Ndw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/C5ZlZ86QikPx4lo1OdMTYNZ0Ndw/1/da"><img src="http://feedads.g.doubleclick.net/~a/C5ZlZ86QikPx4lo1OdMTYNZ0Ndw/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ChrisAbernethyCom/~4/nk51FrNQw0c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2F6-essential-firefox-add-ons%2F&amp;seed_title=6+Essential+Firefox+Add-ons/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2F6-essential-firefox-add-ons%2F&amp;seed_title=6+Essential+Firefox+Add-ons</feedburner:origLink></item>
		<item>
		<title>A New Coat of Paint</title>
		<link>http://feedproxy.google.com/~r/ChrisAbernethyCom/~3/nd1q_W2OvBI/</link>
		<comments>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fa-new-coat-of-paint%2F&amp;seed_title=A+New+Coat+of+Paint#comments</comments>
		<pubDate>Fri, 24 Oct 2008 02:11:55 +0000</pubDate>
		<dc:creator>Brownoxford</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.chrisabernethy.com/?p=98</guid>
		<description><![CDATA[Sometimes it's just time for a new look, and that was definitely the case around here. I've spruced up the joint with a nice clean theme called Downtown Java, by Brian Gardner.]]></description>
			<content:encoded><![CDATA[<p>Sometimes it's just time for a new look, and that was definitely the case around here. I've spruced up the joint with a nice clean theme called <a href="http://www.briangardner.com/themes/downtown-java-wordpress-theme.htm" title="Downtown Java WordPress Theme">Downtown Java</a>, by <a href="http://www.briangardner.com/" title="Brian Gardner">Brian Gardner</a>.</p>

<p>I've already started making customizations with a new Twitter badge that features an icon from the free icon set <a href="http://www.smashingmagazine.com/2008/09/23/practika-a-free-icon-set/" title="Practika free icon set">Practika</a> featured over at <a href="http://www.smashingmagazine.com/">Smashing Magazine</a> (If you don't read Smashing Magazine, you're really missing out!).</p>

<p>Look for more customizations over the next few days!</p>



	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fa-new-coat-of-paint%252F%26amp%3Bseed_title%3DA%2BNew%2BCoat%2Bof%2BPaint&amp;title=A%20New%20Coat%20of%20Paint&amp;bodytext=Sometimes%20it%27s%20just%20time%20for%20a%20new%20look%2C%20and%20that%20was%20definitely%20the%20case%20around%20here.%20I%27ve%20spruced%20up%20the%20joint%20with%20a%20nice%20clean%20theme%20called%20Downtown%20Java%2C%20by%20Brian%20Gardner." title="Digg"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fa-new-coat-of-paint%252F%26amp%3Bseed_title%3DA%2BNew%2BCoat%2Bof%2BPaint&amp;title=A%20New%20Coat%20of%20Paint" title="StumbleUpon"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fa-new-coat-of-paint%252F%26amp%3Bseed_title%3DA%2BNew%2BCoat%2Bof%2BPaint" title="Sphinn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fa-new-coat-of-paint%252F%26amp%3Bseed_title%3DA%2BNew%2BCoat%2Bof%2BPaint&amp;title=A%20New%20Coat%20of%20Paint&amp;notes=Sometimes%20it%27s%20just%20time%20for%20a%20new%20look%2C%20and%20that%20was%20definitely%20the%20case%20around%20here.%20I%27ve%20spruced%20up%20the%20joint%20with%20a%20nice%20clean%20theme%20called%20Downtown%20Java%2C%20by%20Brian%20Gardner." title="del.icio.us"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fa-new-coat-of-paint%252F%26amp%3Bseed_title%3DA%2BNew%2BCoat%2Bof%2BPaint&amp;title=A%20New%20Coat%20of%20Paint&amp;source=Chris+Abernethy+.+com+&amp;summary=Sometimes%20it%27s%20just%20time%20for%20a%20new%20look%2C%20and%20that%20was%20definitely%20the%20case%20around%20here.%20I%27ve%20spruced%20up%20the%20joint%20with%20a%20nice%20clean%20theme%20called%20Downtown%20Java%2C%20by%20Brian%20Gardner." title="LinkedIn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fa-new-coat-of-paint%252F%26amp%3Bseed_title%3DA%2BNew%2BCoat%2Bof%2BPaint&amp;t=A%20New%20Coat%20of%20Paint" title="Facebook"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="" title="TwitThis"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/" title="TwitThis" alt="TwitThis" class="sociable-hovers" /></a>


<br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/wiURhYtmyOcdZ4Ephco-SqZIWGQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/wiURhYtmyOcdZ4Ephco-SqZIWGQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/wiURhYtmyOcdZ4Ephco-SqZIWGQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/wiURhYtmyOcdZ4Ephco-SqZIWGQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ChrisAbernethyCom/~4/nd1q_W2OvBI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fa-new-coat-of-paint%2F&amp;seed_title=A+New+Coat+of+Paint/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fa-new-coat-of-paint%2F&amp;seed_title=A+New+Coat+of+Paint</feedburner:origLink></item>
		<item>
		<title>WordPress Static Front Pages Demystified</title>
		<link>http://feedproxy.google.com/~r/ChrisAbernethyCom/~3/56jmk1nNnCA/</link>
		<comments>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fwordpress-static-front-howto-page%2F&amp;seed_title=WordPress+Static+Front+Pages+Demystified#comments</comments>
		<pubDate>Wed, 22 Oct 2008 22:32:09 +0000</pubDate>
		<dc:creator>Brownoxford</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.chrisabernethy.com/?p=69</guid>
		<description><![CDATA[By default, WordPress will display a list of your latest posts on the homepage, but did you know that it is also possible to use one of your published pages as the homepage instead? Read on to get the full scoop on configuring wordpress to use a static page for your blog's homepage.]]></description>
			<content:encoded><![CDATA[<p>If you're like me, there is always some configuration option or another in the software that you use regularly which you are aware of, but don't really understand how it works. Until today, that was the case for me with WordPress static front pages.</p>
<span id="more-69"></span>
<p>If you navigate the the <em>Settings</em> tab, and click on the <em>Reading</em> sub-menu option, you will see the <em>Front page displays</em> WordPress configuration option. This option allows you to specify whether your front page, <em>i.e.</em>, the page displayed when a user visits your main site URL, will contain a listing of your latest posts, or a different, static page.</p>

<img src="http://www.chrisabernethy.com/wp-content/uploads/2008/10/wp_reading_settings.jpg" alt="" title="WordPress Static Front Page Settings" width="435" height="187" class="aligncenter size-full wp-image-71" />

<dl>
  <dt><strong>Your latest posts</strong></dt>
  <dd>Selecting this radio option will make your latest posts show up on the front page of your site</dd>
  <dt><strong>A static page</strong></dt>
  <dd>Selecting this radio option allows you to choose a static page as your front page</dd>
  <dt><strong>Front page</strong></dt>
  <dd>The page that you select in this pull-down will now be displayed when a user visits the front page of your site.</dd>
  <dt><strong>Posts page</strong></dt>
  <dd>The page that you select in this pull-down will now display your latest posts instead of any content that it might currently contain (you don't have to use this option).</dd>
</dl>

<h2>What's the Point?</h2>
<p>This functionality makes it easy for WordPress administrators to handle sites with formats that make it more appropriate to show a static page as the front page, but that also want to be able to show the default listing of recent posts without making any template modifications.</p>

<p>I hope you found this article helpful, please feel free to <a href="http://www.chrisabernethy.com/contact/" title="Contact Me">contact me</a> with any of your WordPress questions!</p>





	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fwordpress-static-front-howto-page%252F%26amp%3Bseed_title%3DWordPress%2BStatic%2BFront%2BPages%2BDemystified&amp;title=WordPress%20Static%20Front%20Pages%20Demystified&amp;bodytext=By%20default%2C%20WordPress%20will%20display%20a%20list%20of%20your%20latest%20posts%20on%20the%20homepage%2C%20but%20did%20you%20know%20that%20it%20is%20also%20possible%20to%20use%20one%20of%20your%20published%20pages%20as%20the%20homepage%20instead%3F%20Read%20on%20to%20get%20the%20full%20scoop%20on%20configuring%20wordpress%20to%20use%20a%20static%20page%20for%20your%20blog%27s%20homepage." title="Digg"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fwordpress-static-front-howto-page%252F%26amp%3Bseed_title%3DWordPress%2BStatic%2BFront%2BPages%2BDemystified&amp;title=WordPress%20Static%20Front%20Pages%20Demystified" title="StumbleUpon"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fwordpress-static-front-howto-page%252F%26amp%3Bseed_title%3DWordPress%2BStatic%2BFront%2BPages%2BDemystified" title="Sphinn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fwordpress-static-front-howto-page%252F%26amp%3Bseed_title%3DWordPress%2BStatic%2BFront%2BPages%2BDemystified&amp;title=WordPress%20Static%20Front%20Pages%20Demystified&amp;notes=By%20default%2C%20WordPress%20will%20display%20a%20list%20of%20your%20latest%20posts%20on%20the%20homepage%2C%20but%20did%20you%20know%20that%20it%20is%20also%20possible%20to%20use%20one%20of%20your%20published%20pages%20as%20the%20homepage%20instead%3F%20Read%20on%20to%20get%20the%20full%20scoop%20on%20configuring%20wordpress%20to%20use%20a%20static%20page%20for%20your%20blog%27s%20homepage." title="del.icio.us"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fwordpress-static-front-howto-page%252F%26amp%3Bseed_title%3DWordPress%2BStatic%2BFront%2BPages%2BDemystified&amp;title=WordPress%20Static%20Front%20Pages%20Demystified&amp;source=Chris+Abernethy+.+com+&amp;summary=By%20default%2C%20WordPress%20will%20display%20a%20list%20of%20your%20latest%20posts%20on%20the%20homepage%2C%20but%20did%20you%20know%20that%20it%20is%20also%20possible%20to%20use%20one%20of%20your%20published%20pages%20as%20the%20homepage%20instead%3F%20Read%20on%20to%20get%20the%20full%20scoop%20on%20configuring%20wordpress%20to%20use%20a%20static%20page%20for%20your%20blog%27s%20homepage." title="LinkedIn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fwordpress-static-front-howto-page%252F%26amp%3Bseed_title%3DWordPress%2BStatic%2BFront%2BPages%2BDemystified&amp;t=WordPress%20Static%20Front%20Pages%20Demystified" title="Facebook"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="" title="TwitThis"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/" title="TwitThis" alt="TwitThis" class="sociable-hovers" /></a>


<br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/DCxB6e7bbdi51M1OOk83s5z6j84/0/da"><img src="http://feedads.g.doubleclick.net/~a/DCxB6e7bbdi51M1OOk83s5z6j84/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/DCxB6e7bbdi51M1OOk83s5z6j84/1/da"><img src="http://feedads.g.doubleclick.net/~a/DCxB6e7bbdi51M1OOk83s5z6j84/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ChrisAbernethyCom/~4/56jmk1nNnCA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fwordpress-static-front-howto-page%2F&amp;seed_title=WordPress+Static+Front+Pages+Demystified/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fwordpress-static-front-howto-page%2F&amp;seed_title=WordPress+Static+Front+Pages+Demystified</feedburner:origLink></item>
		<item>
		<title>Force Lower-Case URLs with mod_rewrite</title>
		<link>http://feedproxy.google.com/~r/ChrisAbernethyCom/~3/7hj_iXP-ziE/</link>
		<comments>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fforce-lower-case-urls-with-mod_rewrite%2F&amp;seed_title=Force+Lower-Case+URLs+with+mod_rewrite#comments</comments>
		<pubDate>Fri, 25 Apr 2008 13:00:07 +0000</pubDate>
		<dc:creator>Brownoxford</dc:creator>
				<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://www.chrisabernethy.com/?p=34</guid>
		<description><![CDATA[If you need your URLs to be all lower-case and you are running a standard LAMP stack, you're in luck. Apache's mod_rewrite can be used to 301-redirect all incoming requests to their lower-case counterparts with just a few configuration directives; see how it's done here.]]></description>
			<content:encoded><![CDATA[<p>You may find yourself in a situation at some point where you need to ensure that all access to your site is done using lower-case only. This may be because of SEO (avoiding duplicate content), or perhaps you want to ensure that you can seamlessly move between case-sensitive/insensitive operating systems. If you are running a standard LAMP stack, you're in luck. Apache's mod_rewrite can be used to 301-redirect all incoming requests to their lower-case counterparts with just a few configuration directives.</p>
<span id="more-34"></span>
<blockquote>
<b>10. Don't be Case Sensitive</b><br />
Since URLs can accept both uppercase and lowercase characters, don't ever, ever allow any uppercase letters in your structure. If you have them now, 301 them to all-lowercase versions to help avoid confusion. If you have a lot of type-in traffic, you might even consider a 301 rule that sends any incorrect capitalization permutation to its rightful home.<br />
<cite><a href="http://www.seomoz.org/blog/11-best-practices-for-urls">http://www.seomoz.org/blog/11-best-practices-for-urls</a></cite>
</blockquote>

<p>It doesn't require much to rewrite URLs to lower-case, and the necessary configuration directives can be placed in either a virtualhost or .htaccess file. First, the RewriteEngine is enabled, and a custom RewriteMap called 'lc' is defined using the internal 'tolower' map. Next, a RewriteCond rule is used so that only URLs containing upper-case characters are rewritten. Finally, the actual RewriteRule is defined using the 'lc' RewriteMap that we just created to transform the captured URL to lower-case before 301-redirecting the user.</p>

<pre lang="apache">
RewriteEngine On
RewriteMap  lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]
</pre>

<p>The following is the output from the RewriteLog that shows the processing for a request to /INDEX.PHP. Note that only a single upper-case letter needs to be present for the rewrite rule to be triggered. The log output clearly shows the rewrite rule being applied, the RewriteMap being referenced, and the 301 redirect taking place. The subsequent request for /index.php is also shown, where the rewrite condition does not match and the request is passed through.</p>

<pre line="1">
init rewrite engine with requested uri /INDEX.PHP
applying pattern '(.*)' to uri '/INDEX.PHP'
RewriteCond: input='/INDEX.PHP' pattern='[A-Z]' => matched
map lookup OK: map=lc key=/index.php -> val=/index.php
rewrite '/INDEX.PHP' -> '/index.php'
explicitly forcing redirect with http://test/index.php
escaping http://test/index.php for redirect
redirect to http://test/index.php [REDIRECT/301]
init rewrite engine with requested uri /index.php
applying pattern '(.*)' to uri '/index.php'
RewriteCond: input='/index.php' pattern='[A-Z]' => not-matched
pass through /index.php
</pre>




	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fforce-lower-case-urls-with-mod_rewrite%252F%26amp%3Bseed_title%3DForce%2BLower-Case%2BURLs%2Bwith%2Bmod_rewrite&amp;title=Force%20Lower-Case%20URLs%20with%20mod_rewrite&amp;bodytext=If%20you%20need%20your%20URLs%20to%20be%20all%20lower-case%20and%20you%20are%20running%20a%20standard%20LAMP%20stack%2C%20you%27re%20in%20luck.%20Apache%27s%20mod_rewrite%20can%20be%20used%20to%20301-redirect%20all%20incoming%20requests%20to%20their%20lower-case%20counterparts%20with%20just%20a%20few%20configuration%20directives%3B%20see%20how%20it%27s%20done%20here." title="Digg"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fforce-lower-case-urls-with-mod_rewrite%252F%26amp%3Bseed_title%3DForce%2BLower-Case%2BURLs%2Bwith%2Bmod_rewrite&amp;title=Force%20Lower-Case%20URLs%20with%20mod_rewrite" title="StumbleUpon"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fforce-lower-case-urls-with-mod_rewrite%252F%26amp%3Bseed_title%3DForce%2BLower-Case%2BURLs%2Bwith%2Bmod_rewrite" title="Sphinn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fforce-lower-case-urls-with-mod_rewrite%252F%26amp%3Bseed_title%3DForce%2BLower-Case%2BURLs%2Bwith%2Bmod_rewrite&amp;title=Force%20Lower-Case%20URLs%20with%20mod_rewrite&amp;notes=If%20you%20need%20your%20URLs%20to%20be%20all%20lower-case%20and%20you%20are%20running%20a%20standard%20LAMP%20stack%2C%20you%27re%20in%20luck.%20Apache%27s%20mod_rewrite%20can%20be%20used%20to%20301-redirect%20all%20incoming%20requests%20to%20their%20lower-case%20counterparts%20with%20just%20a%20few%20configuration%20directives%3B%20see%20how%20it%27s%20done%20here." title="del.icio.us"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fforce-lower-case-urls-with-mod_rewrite%252F%26amp%3Bseed_title%3DForce%2BLower-Case%2BURLs%2Bwith%2Bmod_rewrite&amp;title=Force%20Lower-Case%20URLs%20with%20mod_rewrite&amp;source=Chris+Abernethy+.+com+&amp;summary=If%20you%20need%20your%20URLs%20to%20be%20all%20lower-case%20and%20you%20are%20running%20a%20standard%20LAMP%20stack%2C%20you%27re%20in%20luck.%20Apache%27s%20mod_rewrite%20can%20be%20used%20to%20301-redirect%20all%20incoming%20requests%20to%20their%20lower-case%20counterparts%20with%20just%20a%20few%20configuration%20directives%3B%20see%20how%20it%27s%20done%20here." title="LinkedIn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fforce-lower-case-urls-with-mod_rewrite%252F%26amp%3Bseed_title%3DForce%2BLower-Case%2BURLs%2Bwith%2Bmod_rewrite&amp;t=Force%20Lower-Case%20URLs%20with%20mod_rewrite" title="Facebook"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="" title="TwitThis"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/" title="TwitThis" alt="TwitThis" class="sociable-hovers" /></a>


<br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/zJI3FePZpbxivQHLX-PybJO0qoQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/zJI3FePZpbxivQHLX-PybJO0qoQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/zJI3FePZpbxivQHLX-PybJO0qoQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/zJI3FePZpbxivQHLX-PybJO0qoQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ChrisAbernethyCom/~4/7hj_iXP-ziE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fforce-lower-case-urls-with-mod_rewrite%2F&amp;seed_title=Force+Lower-Case+URLs+with+mod_rewrite/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fforce-lower-case-urls-with-mod_rewrite%2F&amp;seed_title=Force+Lower-Case+URLs+with+mod_rewrite</feedburner:origLink></item>
		<item>
		<title>Extracting Translatable Strings From Zend_Validate</title>
		<link>http://feedproxy.google.com/~r/ChrisAbernethyCom/~3/UtDLUSy384Q/</link>
		<comments>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fextracting-translatable-strings-from-zend_validate%2F&amp;seed_title=Extracting+Translatable+Strings+From+Zend_Validate#comments</comments>
		<pubDate>Thu, 24 Apr 2008 01:05:59 +0000</pubDate>
		<dc:creator>Brownoxford</dc:creator>
				<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://www.chrisabernethy.com/?p=33</guid>
		<description><![CDATA[This article presents a scripted method for using ReflectionClass to extract translatable strings from concrete Zend_Validate class files for use with Zend_Translate.]]></description>
			<content:encoded><![CDATA[<p>Recently I started working with Zend Framework's Zend_Form and its integrated automatic translation functionality using Zend_Translate. In general, the functionality is really great, but if you have ever tried to translate all of the possible validation error messages, you know that finding them can be a long manual task. Naturally, I brought this up on <a href="irc://irc.freenode.org/#zftalk">#zftalk</a>, and the consensus seemed to be that the translatable messages could be extracted using a little PHP and ReflectionClass magic.</p>
<span id="more-33"></span>
<h2>ReflectionClass to the Rescue</h2>

<p>The following is the script that I came up with, which pulls translatable error messages along with available message variables and generates a data structure based on the class name of the validators. Here is the script in its entirety, with some short comments describing how it works:</p>

<pre lang="php">
$zend_library = "/my/php/library";
set_include_path($zend_library);

// Create a new RecursiveDirectoryIterator for the Zend_Validate
// directory and recursively iterate over the files.

$messages = array();
$rdi = new RecursiveDirectoryIterator($zend_library . '/Zend/Validate');
foreach (new RecursiveIteratorIterator($rdi) as $path) {

    // Read in the file and generate the expected class name by
    // converting the portion of the path starting with Zend/Validate
    // and replacing '/' with '_'. For example, this converts the path
    // Zend/Validate/Regex.php to Zend_Validate_Regex.

    require_once($path);
    $class = strtr(preg_replace('#.*(Zend/Validate/.*)\.php$#', '\1', $path), '/', '_');

    if (class_exists($class)) {

        // If the expected class exists, create a ReflectionClass
        // instance and fetch the properties of the class. Make
        // sure that the property '_messageTemplates' exists, as
        // this indicates that we are dealing with an actual concrete
        // Zend_Validate class.

        $reflection = new ReflectionClass($class);
        if ($reflection->hasProperty('_messageTemplates')) {

            // Get the default properties as an associative array and
            // add the 'value' key to the _messageVariables property
            // since by default, 'value' is always available for substitution
            // into a message template.

            $props = $reflection->getDefaultProperties();
            $props['_messageVariables']['value'] = true;

            // Add an element to the $messages array, keyed on
            // the name of the current class. The element contains
            // an array of translatable templates, and an array of
            // valid message variables that can be substituted into
            // those templates.

            $messages[$class] = array(
                'templates' => $props['_messageTemplates']
              , 'variables' => array_keys($props['_messageVariables'])
            );
        }
    }
}

</pre>

<p>Printing out an element of the $messages array shows the structure that is now available to work with, which brings us to the next step... what can we do with this data?</p>

<pre lang="php">
print_r($messages['Zend_Validate_Regex']);

Array
(
    [templates] => Array
        (
            [regexNotMatch] => '%value%' does not match against pattern '%pattern%'
        )
    [variables] => Array
        (
            [0] => pattern
            [1] => value
        )
)
</pre>

<h2>Processing the Output</h2>

<p>Now we have the data that we need to start providing translations, what can be done with it? I am using the Zend_Translate_Tmx translation adapter, so I iterate over the data and write out a single TMX 1.4 format file for all of my validation error translations (including some notes regarding the source of the translatable string as well as the possible variables that can be used). The following code illustrates how this is done:</p>

<pre lang="php">
$format = '
        &lt;tu tuid="%s"&gt;
            &lt;note>Validation message template for class %s.&lt;/note&gt;
            &lt;note>Possible variables include %s&lt;/note&gt;
            &lt;tuv xml:lang="en"&gt;
                &lt;seg>%s&lt;/seg&gt;
            &lt;/tuv&gt;
        &lt;/tu&gt;
';

echo &lt;&lt;&lt;XML
&lt;?xml version="1.0" ?&gt;
&lt;!DOCTYPE tmx SYSTEM "http://www.lisa.org/fileadmin/standards/tmx1.4/tmx14.dtd.txt"&gt;
&lt;tmx version="1.4"&gt;
    &lt;header creationtool="Reflection" creationtoolversion="1.0" datatype="winres" segtype="sentence" adminlang="en-us" srclang="en-us" o-tmf="txt"&gt;
    &lt;/header&gt;
    &lt;body&gt;
XML;

foreach ($messages as $class_name => $data) {
    $variables = join(', ', $data['variables']);
    foreach ($data['templates'] as $key => $template) {
        printf($format, $key, $class_name, $variables, $template);
    }
}

echo "    &lt;/body&gt;\n"
  .  "&lt;/tmx&gt;\n";
</pre>

<p>The collected data can of course also be formatted in whatever way is required by the type of Zend_Validate_Adapter that you are using.</p>

<p>Hopefully this will save you some time in your translation efforts. One thing to watch out for is that several validators re-use messageTemplate identifiers and so cannot be translated (see bug <a href="http://framework.zend.com/issues/browse/ZF-3164">ZF-3164</a> for more info).</p>



	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fextracting-translatable-strings-from-zend_validate%252F%26amp%3Bseed_title%3DExtracting%2BTranslatable%2BStrings%2BFrom%2BZend_Validate&amp;title=Extracting%20Translatable%20Strings%20From%20Zend_Validate&amp;bodytext=This%20article%20presents%20a%20scripted%20method%20for%20using%20ReflectionClass%20to%20extract%20translatable%20strings%20from%20concrete%20Zend_Validate%20class%20files%20for%20use%20with%20Zend_Translate." title="Digg"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fextracting-translatable-strings-from-zend_validate%252F%26amp%3Bseed_title%3DExtracting%2BTranslatable%2BStrings%2BFrom%2BZend_Validate&amp;title=Extracting%20Translatable%20Strings%20From%20Zend_Validate" title="StumbleUpon"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fextracting-translatable-strings-from-zend_validate%252F%26amp%3Bseed_title%3DExtracting%2BTranslatable%2BStrings%2BFrom%2BZend_Validate" title="Sphinn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fextracting-translatable-strings-from-zend_validate%252F%26amp%3Bseed_title%3DExtracting%2BTranslatable%2BStrings%2BFrom%2BZend_Validate&amp;title=Extracting%20Translatable%20Strings%20From%20Zend_Validate&amp;notes=This%20article%20presents%20a%20scripted%20method%20for%20using%20ReflectionClass%20to%20extract%20translatable%20strings%20from%20concrete%20Zend_Validate%20class%20files%20for%20use%20with%20Zend_Translate." title="del.icio.us"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fextracting-translatable-strings-from-zend_validate%252F%26amp%3Bseed_title%3DExtracting%2BTranslatable%2BStrings%2BFrom%2BZend_Validate&amp;title=Extracting%20Translatable%20Strings%20From%20Zend_Validate&amp;source=Chris+Abernethy+.+com+&amp;summary=This%20article%20presents%20a%20scripted%20method%20for%20using%20ReflectionClass%20to%20extract%20translatable%20strings%20from%20concrete%20Zend_Validate%20class%20files%20for%20use%20with%20Zend_Translate." title="LinkedIn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fextracting-translatable-strings-from-zend_validate%252F%26amp%3Bseed_title%3DExtracting%2BTranslatable%2BStrings%2BFrom%2BZend_Validate&amp;t=Extracting%20Translatable%20Strings%20From%20Zend_Validate" title="Facebook"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="" title="TwitThis"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/" title="TwitThis" alt="TwitThis" class="sociable-hovers" /></a>


<br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/XV-qZq1Nw2gdE0tHWnK3pbPYPbQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/XV-qZq1Nw2gdE0tHWnK3pbPYPbQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/XV-qZq1Nw2gdE0tHWnK3pbPYPbQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/XV-qZq1Nw2gdE0tHWnK3pbPYPbQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ChrisAbernethyCom/~4/UtDLUSy384Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fextracting-translatable-strings-from-zend_validate%2F&amp;seed_title=Extracting+Translatable+Strings+From+Zend_Validate/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fextracting-translatable-strings-from-zend_validate%2F&amp;seed_title=Extracting+Translatable+Strings+From+Zend_Validate</feedburner:origLink></item>
		<item>
		<title>Benchmarking Zend Framework Routes</title>
		<link>http://feedproxy.google.com/~r/ChrisAbernethyCom/~3/R2EZH64B-NY/</link>
		<comments>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fzend-framework-route-benchmarks%2F&amp;seed_title=Benchmarking+Zend+Framework+Routes#comments</comments>
		<pubDate>Fri, 11 Jan 2008 03:34:51 +0000</pubDate>
		<dc:creator>Brownoxford</dc:creator>
				<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://www.chrisabernethy.com/2008/01/10/zend-framework-route-benchmarks/</guid>
		<description><![CDATA[There are usually several different ways to define the same route using Zend Framework, and the choice of which route type to use is often arbitrary or based on the personal preference of the programmer. I happen to prefer using regex routes over standard routes when positional parameters need to be used, but the opinion on the <a href="irc://irc.freenode.org/#zftalk">#zftalk</a> channel on freenode was that regex routes are always slower than standard routes. This article presents benchmark numbers for both route types obtained using xdebug and kcachegrind. This won't be a full tutorial on how to use xdebug or kcachegrind, so I won't go into great details about how to use them, but the full source code for the benchmarks will be available at the end of the article.]]></description>
			<content:encoded><![CDATA[<p>Hanging out in <a href="irc://irc.freenode.org/#zftalk">#zftalk</a> on freenode is a great way to learn more about using Zend Framework, if you're not already there get yourself an IRC client and sign on. Recently, the following question was posed:</p>

<blockquote>
<p>
How can I create a route with an optional parameter; e.g /search/:foo/:bar, where :bar is optional? Do I need to create two different routes?
</p>
</blockquote>

<p>Several users correctly suggested specifying a default value for :bar when constructing the route, and it was also mentioned that both standard routes and regular expression routes could be used to solve the problem. Naturally, this lead to a discussion of which type of route would be fastest, with no real numbers to fall back on.</p>
<span id="more-26"></span>
<p>The purpose of this article is to present benchmark numbers for both route types (for the specific application described above) and to describe the methods used to run the benchmark tests. This won't be a full tutorial on how to use xdebug or kcachegrind, so I won't go into great details about how to use them, but the full source code for the benchmarks will be available at the end of the article.</p>

<h2>Method</h2>

<p>In order to profile the different routing options, <a href="http://xdebug.org">xdebug</a> was used in profiling mode and the resulting profile data was viewed in <a href="http://kcachegrind.sourceforge.net/cgi-bin/show.cgi">kcachegrind</a>. The profiling test uses two URLs, one with the optional parameter and one without. Each router's <code>match()</code> method is called 10000 with each of the two URLs.</p>

<h2>The Standard Route</h2>

<p>The first route tested was the standard route, which is instantiated with a string describing the route, and an array of default options. The route accepts two parameters, indicated by :foo and :bar. Since a default value is specified for :bar in the initialization array, the route will match both of our test URLs, using the value 'mybar' if no parameter is given for :bar.</p>

<pre lang="php">
$route = new Zend_Controller_Router_Route(
    'search/:foo/:bar'
  , array(
        'controller' => 'search'
      , 'action'     => 'index'
      , 'bar'        => 'mybar'
    )
);
</pre>

<h2>The Regex Route</h2>

<p>The next route tested was the regex route, which is instantiated in the same way as the standard route, with the addition of an array that maps parameter positions to value names; this allows the route map the results from an internal <code>preg_match</code> call to the numerically keyed captured parameters.</p>

<pre lang="php">
$route = new Zend_Controller_Router_Route_Regex(
    'search/(\w+)(?:/(\w+))'
  , array(
        'controller' => 'search'
      , 'action'     => 'index'
      , 'bar'        => 'mybar'
    )
  , array(
        'foo' => 1
      , 'bar' => 2
    )
);
</pre>

<h2>The Results</h2>

<p>The initial test with 10,000 iterations using the test URL that contained both the foo and bar parameters shows that the standard route is faster than the regex route by about 12%. The image at right is a kcachegrind visualization of the call tree rooted in the function that executes the two tests with a distance limit of 1.</p>

<div style="margin:15px 0;text-align:center;">
<img src='http://www.chrisabernethy.com/wp-content/uploads/2008/01/10k_with_optional.png' alt='Zend Router Profiling (part one)' />
</div>

<p>The second test of 10,000 iterations used the test URL with did <em>not</em> contain the bar parameter. It shows that the regex route is significantly faster than the standard route by about 48%.</p>

<div style="margin:15px 0;text-align:center;">
<img src='http://www.chrisabernethy.com/wp-content/uploads/2008/01/10k_without_optional.png' alt='Zend Router Profiling (part two)' />
</div>

<p>Based on these tests, it seems like the best choice depends on how often the optional parameter is expected to be provided. If the answer is less than about 60% of the time, the regex route would seem like the best choice; otherwise the regex route will be faster. Keep in mind that this is all based on a specific route, and your situation may vary so if performance is an issue some custom tests may be in order.</p>

<p>If you are interested in reproducing these benchmarks, you can <a href="http://www.chrisabernethy.com/wp-content/uploads/2008/10/zf_benchmark_routes.tgz" title="Benchmarking Code">download the benchmarking scripts</a> and customize them as needed.</p>




	<a rel="nofollow"  target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fzend-framework-route-benchmarks%252F%26amp%3Bseed_title%3DBenchmarking%2BZend%2BFramework%2BRoutes&amp;title=Benchmarking%20Zend%20Framework%20Routes&amp;bodytext=There%20are%20usually%20several%20different%20ways%20to%20define%20the%20same%20route%20using%20Zend%20Framework%2C%20and%20the%20choice%20of%20which%20route%20type%20to%20use%20is%20often%20arbitrary%20or%20based%20on%20the%20personal%20preference%20of%20the%20programmer.%20I%20happen%20to%20prefer%20using%20regex%20routes%20over%20standard%20routes%20when%20positional%20parameters%20need%20to%20be%20used%2C%20but%20the%20opinion%20on%20the%20%23zftalk%20channel%20on%20freenode%20was%20that%20regex%20routes%20are%20always%20slower%20than%20standard%20routes.%20This%20article%20presents%20benchmark%20numbers%20for%20both%20route%20types%20obtained%20using%20xdebug%20and%20kcachegrind.%20This%20won%27t%20be%20a%20full%20tutorial%20on%20how%20to%20use%20xdebug%20or%20kcachegrind%2C%20so%20I%20won%27t%20go%20into%20great%20details%20about%20how%20to%20use%20them%2C%20but%20the%20full%20source%20code%20for%20the%20benchmarks%20will%20be%20available%20at%20the%20end%20of%20the%20article." title="Digg"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fzend-framework-route-benchmarks%252F%26amp%3Bseed_title%3DBenchmarking%2BZend%2BFramework%2BRoutes&amp;title=Benchmarking%20Zend%20Framework%20Routes" title="StumbleUpon"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/stumbleupon.png" title="StumbleUpon" alt="StumbleUpon" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://sphinn.com/index.php?c=post&amp;m=submit&amp;link=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fzend-framework-route-benchmarks%252F%26amp%3Bseed_title%3DBenchmarking%2BZend%2BFramework%2BRoutes" title="Sphinn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/sphinn.png" title="Sphinn" alt="Sphinn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fzend-framework-route-benchmarks%252F%26amp%3Bseed_title%3DBenchmarking%2BZend%2BFramework%2BRoutes&amp;title=Benchmarking%20Zend%20Framework%20Routes&amp;notes=There%20are%20usually%20several%20different%20ways%20to%20define%20the%20same%20route%20using%20Zend%20Framework%2C%20and%20the%20choice%20of%20which%20route%20type%20to%20use%20is%20often%20arbitrary%20or%20based%20on%20the%20personal%20preference%20of%20the%20programmer.%20I%20happen%20to%20prefer%20using%20regex%20routes%20over%20standard%20routes%20when%20positional%20parameters%20need%20to%20be%20used%2C%20but%20the%20opinion%20on%20the%20%23zftalk%20channel%20on%20freenode%20was%20that%20regex%20routes%20are%20always%20slower%20than%20standard%20routes.%20This%20article%20presents%20benchmark%20numbers%20for%20both%20route%20types%20obtained%20using%20xdebug%20and%20kcachegrind.%20This%20won%27t%20be%20a%20full%20tutorial%20on%20how%20to%20use%20xdebug%20or%20kcachegrind%2C%20so%20I%20won%27t%20go%20into%20great%20details%20about%20how%20to%20use%20them%2C%20but%20the%20full%20source%20code%20for%20the%20benchmarks%20will%20be%20available%20at%20the%20end%20of%20the%20article." title="del.icio.us"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fzend-framework-route-benchmarks%252F%26amp%3Bseed_title%3DBenchmarking%2BZend%2BFramework%2BRoutes&amp;title=Benchmarking%20Zend%20Framework%20Routes&amp;source=Chris+Abernethy+.+com+&amp;summary=There%20are%20usually%20several%20different%20ways%20to%20define%20the%20same%20route%20using%20Zend%20Framework%2C%20and%20the%20choice%20of%20which%20route%20type%20to%20use%20is%20often%20arbitrary%20or%20based%20on%20the%20personal%20preference%20of%20the%20programmer.%20I%20happen%20to%20prefer%20using%20regex%20routes%20over%20standard%20routes%20when%20positional%20parameters%20need%20to%20be%20used%2C%20but%20the%20opinion%20on%20the%20%23zftalk%20channel%20on%20freenode%20was%20that%20regex%20routes%20are%20always%20slower%20than%20standard%20routes.%20This%20article%20presents%20benchmark%20numbers%20for%20both%20route%20types%20obtained%20using%20xdebug%20and%20kcachegrind.%20This%20won%27t%20be%20a%20full%20tutorial%20on%20how%20to%20use%20xdebug%20or%20kcachegrind%2C%20so%20I%20won%27t%20go%20into%20great%20details%20about%20how%20to%20use%20them%2C%20but%20the%20full%20source%20code%20for%20the%20benchmarks%20will%20be%20available%20at%20the%20end%20of%20the%20article." title="LinkedIn"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/linkedin.png" title="LinkedIn" alt="LinkedIn" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.chrisabernethy.com%2Ffeeder%2F%3FFeederAction%3Dclicked%26amp%3Bfeed%3DArticles%2B%2528RSS2%2529%26amp%3Bseed%3Dhttp%253A%252F%252Fwww.chrisabernethy.com%252Fzend-framework-route-benchmarks%252F%26amp%3Bseed_title%3DBenchmarking%2BZend%2BFramework%2BRoutes&amp;t=Benchmarking%20Zend%20Framework%20Routes" title="Facebook"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow"  target="_blank" href="" title="TwitThis"><img src="http://www.chrisabernethy.com/wp-content/plugins/sociable/images/" title="TwitThis" alt="TwitThis" class="sociable-hovers" /></a>


<br/><br/>
<p><a href="http://feedads.g.doubleclick.net/~a/4UUXxTTGQTue8o6n4sI0UAEPjNo/0/da"><img src="http://feedads.g.doubleclick.net/~a/4UUXxTTGQTue8o6n4sI0UAEPjNo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/4UUXxTTGQTue8o6n4sI0UAEPjNo/1/da"><img src="http://feedads.g.doubleclick.net/~a/4UUXxTTGQTue8o6n4sI0UAEPjNo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/ChrisAbernethyCom/~4/R2EZH64B-NY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fzend-framework-route-benchmarks%2F&amp;seed_title=Benchmarking+Zend+Framework+Routes/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fzend-framework-route-benchmarks%2F&amp;seed_title=Benchmarking+Zend+Framework+Routes</feedburner:origLink></item>
	</channel>
</rss>
