<?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>Fri, 02 Mar 2012 11:42:36 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.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>Widespread Internet Disruption</title>
		<link>http://feedproxy.google.com/~r/ChrisAbernethyCom/~3/_Jm_xZ5YDjY/</link>
		<comments>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fwidespread-internet-disruption%2F&amp;seed_title=Widespread+Internet+Disruption#comments</comments>
		<pubDate>Mon, 07 Nov 2011 15:06:08 +0000</pubDate>
		<dc:creator>Chris Abernethy</dc:creator>
				<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://www.chrisabernethy.com/?p=452</guid>
		<description><![CDATA[Looks like there was some fairly widespread disruption of internet services this morning, with users from LA, San Francisco, DC, New York, North Carolina and other areas experiencing loss of connectivity for anywhere from 30 seconds to 15 minutes. According to Gizmodo, the outage was on the Time Warner network, but sources at Rackspace indicate ...]]></description>
				<content:encoded><![CDATA[<p><img src="http://www.chrisabernethy.com/wp-content/uploads/2011/11/no-net-for-you-150x150.jpg" alt="" title="no-net-for-you" width="150" height="150" class="alignright size-thumbnail wp-image-454" />Looks like there was some fairly widespread disruption of internet services this morning, with users from LA, San Francisco, DC, New York, North Carolina and other areas experiencing loss of connectivity for anywhere from 30 seconds to 15 minutes.</p>
<p><a href="http://gizmodo.com/5857010/massive-time-warner-outage-hits-the-us" title="Massive Time Warner Outage" target="_blank">According to Gizmodo</a>, the outage was on the Time Warner network, but sources at Rackspace indicate that Level 3 was particularly hard-hit.</p>
<p>Anyone else experience this issue of have ongoing problems?</p>
<p><strong>Update:</strong> <a href="https://twitter.com/#!/twcablehelp" title="Time Warner Cable on Twitter" target="_blank">Time Warner&#8217;s twitter feed</a> has more information on this problem, along with a slew of response tweets to affected customers:</p>
<blockquote><p>Again, we&#8217;re recovering from a brief inet outage affecting most of our srvce areas.Pls attempt to connect again.Still down? DM us w/ yr info</p></blockquote>
<img src="http://feeds.feedburner.com/~r/ChrisAbernethyCom/~4/_Jm_xZ5YDjY" 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%2Fwidespread-internet-disruption%2F&amp;seed_title=Widespread+Internet+Disruption/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fwidespread-internet-disruption%2F&amp;seed_title=Widespread+Internet+Disruption</feedburner:origLink></item>
		<item>
		<title>How To Resize a Xen Virtual Disk</title>
		<link>http://feedproxy.google.com/~r/ChrisAbernethyCom/~3/tDJmLm_ezOY/</link>
		<comments>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fhow-to-resize-a-xen-virtual-disk%2F&amp;seed_title=How+To+Resize+a+Xen+Virtual+Disk#comments</comments>
		<pubDate>Thu, 21 Jul 2011 18:24:06 +0000</pubDate>
		<dc:creator>Chris Abernethy</dc:creator>
				<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://www.chrisabernethy.com/?p=406</guid>
		<description><![CDATA[One of the challenges that comes with managing Xen domU instances is dealing with virtual machines that run out of disk space. In this post, I'll demonstrate two different methods for adding more disk space to a Xen virtual machine that uses a file-based container as a disk.]]></description>
				<content:encoded><![CDATA[<p>One of the challenges that comes with managing Xen domU instances is dealing with virtual machines that run out of disk space. If the initial setup was not done carefully, you may find that resizing the virtual machine is a bit more involved than it sounds, especially if the domU is backed by a disk image or single physical partition.</p>
<p>In this post, I&#8217;ll demonstrate two different methods for adding more disk space to a Xen virtual machine. Unless otherwise indicated, all systems described here are running fully up-to-date versions of CentOS 5.6 (Final), and all Xen domU instances are using file based disk images.<br />
<span id="more-406"></span><br />
When a file-backed virtual machine runs out of space, one way to gain additional space is to add a second file-backed virtual disk. Note that you could also add a physical disk, and the steps would largely be the same, but that is left as an exercise for the reader.</p>
<h2>Create a new virtual disk</h2>
<p>First, create a <a href="http://en.wikipedia.org/wiki/Sparse_file" title="Sparse File" target="_blank">sparse file</a> to use as the new disk image. In this case, we will create a new 10G image file. Note that creating a sparse file in this way will be very fast, but it will only actually use 1M of space on disk (as reported by <code>df</code>), so keep in mind that the actual usage can increase up to the total size of the file you are creating (here, 10G).</p>
<pre>
# cd /var/lib/xen/images
# dd if=/dev/zero of=new_disk.img oflag=direct bs=1M seek=10239 count=1
</pre>
<h2>Add the Disk to the Virtual Machine</h2>
<p>Once you have the new disk image created, you will need to add it to the virtual machine. First, modify the <code>disk</code> entry of the config file so that the disk is recognized when the virtual machine is restarted. In this case, the second entry is the one being added:</p>
<pre>
disk = [
    "tap:aio:/var/lib/xen/images/original.img,xvda,w",
    "tap:aio:/var/lib/xen/images/new_disk.img,xvdb,w"
]
</pre>
<p><em><strong>Note:</strong> Be sure that you use a device name that is not already being used by the domain. In this case, only <code>xvda</code> was in use so using <code>xvdb</code> for the new disk device name is fine.<br />
</em></p>
<p>At this point, you can restart the virtual machine to have the disk recognized, but you can also dynamically add the new storage to the domU without restarting by using the <code>xm</code> utility and the <code>block-attach</code> sub-command (substitute the name of your domain in the following command):</p>
<pre>
# xm block-attach MyDomain tap:aio:/var/lib/xen/images/new_disk.img xvdb w
</pre>
<p>You can use the <code>block-list</code> sub-command to confirm that the device was added to the running virtual machine; prior to running <code>xm block-attach</code>, only one device would have been listed here:</p>
<pre>
# xm block-list MyDomain
Vdev  BE handle state evt-ch ring-ref BE-path
51712    0    0     4      6      8     /local/domain/0/backend/tap/3/51712  
51728    0    0     4      8      12    /local/domain/0/backend/tap/3/51728  
</pre>
<p>Once the domU knows about the new disk, you can configure it for use. Log into the virtual machine and use <code>fdisk</code> to create a new partition table. Here we create a single partition using the default type of <code>83</code> (Linux):</p>
<pre id="fdisk">
# fdisk /dev/xvdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.


The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1): 
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): 
Using default value 1305

Command (m for help): p

Disk /dev/xvdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot      Start         End      Blocks   Id  System
/dev/xvdb1               1        1305    10482381   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
# 
</pre>
<p>Once the partition table is initialized, there are two paths you can take to add the new space to the virtual machine:</p>
<ul>
<li><a href="#traditional">Mount the new space as a traditional partition</a></li>
<li><a href="#lvm">Incorporate the new space into an LVM group</a></li>
</ul>
<p>In general, my preference is to add the space to an LVM group, but there are valid reasons for both methods so each is be presented here for completeness.</p>
<h4 id="traditional">Mount the new partition traditionally</h4>
<p>This is the best option if you need to create isolated space for a specific purpose, or if you do not have LVM available to you on the virtual machine. In either case, the first step is to create a filesystem on the new partition. Here, the standard ext3 format is used:</p>
<pre>
# mkfs.ext3 /dev/xvdb1
</pre>
<p>Next, a directory must be created to serve as the mount point for the new partition. I like to create mount points with permissions <code>000</code> to prevent data from accidentally being written to the directories when the partition is not mounted; any files living in the mount point will be hidden when the partition gets mounted, and making it non-writable, is a good way to help prevent that. </p>
<pre>
# mkdir -m 000 /extraspace
</pre>
<p>Create an entry for the new mount point in <code>/etc/fstab</code> (so that it is mounted on boot) and mount the partition. Make changes the the following mount options as needed for your system:</p>
<pre>
# echo "/dev/xvdb1 /extraspace ext3 defaults 1 3" >> /etc/fstab
# mount /extraspace
</pre>
<p>Finally, use <code>df</code> to confirm that the new partition is mounted and available for use:</p>
<pre id="olddf">
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       45G   40G  2.4G  95% /
/dev/xvda1             99M   22M   73M  23% /boot
tmpfs                 1.0G     0  1.0G   0% /dev/shm
/dev/xvdb1            9.9G  151M  9.2G   2% /extraspace
</pre>
<h4 id="lvm">Incorporate the new space into an LVM group</h4>
<p>As an alternative to mounting the new disk in the filesystem, you can also add it as a physical volume to an existing LVM volume group. This is the best option if you need to increase the size of an existing disk transparently without disrupting existing operations.</p>
<p>If you choose to add the disk this way, start by following the procedure for <a href="#fdisk">creating the new partition table using <code>fdisk</code></a> as described previously, but be sure to use the <code>t</code> command to change the partition type to <code>8e</code> (Linux LVM). The additional output of fdisk for this portion of the process will resemble the following:</p>
<pre>
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/xvdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot      Start         End      Blocks   Id  System
/dev/xvdb1               1        1305    10482381   8e  Linux LVM

Command (m for help):
</pre>
<p>Once the partition has been initialized, use the LVM tools to create a new physical volume with the <code>xvdb1</code> partition that was just created. Then add the physical volume to the volumegroup of your choice, and extend your logical volume to use all available space.</p>
<p>In this example, I am using volume group <code>VolGroup00</code> and logical volume <code>LogVol00</code>; these are the defaults for a standard CentOS LVM configuration.</p>
<pre>
# pvcreate /dev/xvdb1
  Physical volume "/dev/xvdb1" successfully created
# vgextend VolGroup00 /dev/xvdb1
  Volume group "VolGroup00" successfully extended
# lvextend -l+100%FREE -r VolGroup00/LogVol00
  Extending logical volume LogVol00 to 55.88 GB
  Logical volume LogVol00 successfully resized
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/mapper/VolGroup00-LogVol00 is mounted on /; on-line resizing required
Performing an on-line resize of /dev/mapper/VolGroup00-LogVol00 to 14647296 (4k) blocks.
The filesystem on /dev/mapper/VolGroup00-LogVol00 is now 14647296 blocks long.
</pre>
<p><em><strong>Note:</strong> LVM will automatically re-size the filesystem on the logical volume, which is nice.<br />
</em></p>
<p>Finally, compare the file system disk space usage with the <a href="#olddf">output of the previous <code>df</code> command</a> to confirm that the additional space is indeed available:</p>
<pre>
# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       55G   40G   12G  78% /
/dev/xvda1             99M   22M   73M  23% /boot
tmpfs                 1.0G     0  1.0G   0% /dev/shm
</pre>
<h2>Conclusion</h2>
<p>In the end, adding additional space to a Xen virtual machine is not that difficult. Please let me know if you have found this tutorial helpful, or if you have had similar experiences modifying disks on a Xen domU.</p>
<p>Stay tuned for my next article on migrating a Xen virtual machine from a file based container to an LVM-backed block device.</p>
<img src="http://feeds.feedburner.com/~r/ChrisAbernethyCom/~4/tDJmLm_ezOY" 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%2Fhow-to-resize-a-xen-virtual-disk%2F&amp;seed_title=How+To+Resize+a+Xen+Virtual+Disk/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fhow-to-resize-a-xen-virtual-disk%2F&amp;seed_title=How+To+Resize+a+Xen+Virtual+Disk</feedburner:origLink></item>
		<item>
		<title>Installing Node.js on CentOS/RedHat</title>
		<link>http://feedproxy.google.com/~r/ChrisAbernethyCom/~3/X9XLGIb4aec/</link>
		<comments>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Finstalling-node-js-on-centos-redhat%2F&amp;seed_title=Installing+Node.js+on+CentOS%2FRedHat#comments</comments>
		<pubDate>Thu, 14 Apr 2011 17:45:53 +0000</pubDate>
		<dc:creator>Chris Abernethy</dc:creator>
				<category><![CDATA[SysAdmin]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[tutorials]]></category>

		<guid isPermaLink="false">http://www.chrisabernethy.com/?p=337</guid>
		<description><![CDATA[Node.js, if you are not yet familiar with it, facilitates building event-driven server-side javascript services. Services built with Node.js go to sleep after instructing the operating system to wake them if a connection is made (via epoll, kqueue, /dev/poll or select). Additionally, each connection is only a small heap allocation, as opposed to spawning a ...]]></description>
				<content:encoded><![CDATA[<p>Node.js, if you are not yet familiar with it, facilitates building event-driven server-side javascript services. Services built with Node.js go to sleep after instructing the operating system to wake them if a connection is made (via epoll, kqueue, /dev/poll or select). Additionally, each connection is only a small heap allocation, as opposed to spawning a 2M thread/child for each connection like some other popular web services.</p>
<p><span id="more-337"></span></p>
<blockquote><p>Node.js is a server-side JavaScript environment that uses an asynchronous event-driven model. This allows Node.js to get excellent performance based on the architectures of many Internet applications.</p></blockquote>
<p>The event-driven model and Node.js framework makes it ridiculously simple to build web services like the following &#8220;Hello World&#8221; example from the Node.js webpage:</p>
<pre lang="javascript">var http = require('http');

http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World\n');
}).listen(8124);

console.log('Server running at http://127.0.0.1:8124/');</pre>
<h2>Installation</h2>
<p>The online wiki provides instructions on <a href="https://github.com/joyent/node/wiki/Installation">installing Node.js</a> as an unmanaged package, but I prefer to handle as much as possible with RPM. To that end, I put together a simple spec file that can be used to build Node.js RPMs for use on RedHat or CentOS systems (or any other system that uses RPM as a package management tool).</p>
<p>The first thing you&#8217;ll need to do is download the latest Node.js source package. At the time of this writing, v0.4.6 is the most current version of Node.js available. I like to use <code>curl</code> to download the sources directly into the default rpm sources directory, but you could also use <code>wget</code> or simply download the package via your web browser. You&#8217;ll also need to make sure that Node.js source ends up in the right place if you are not building the RPM as root, or if you like to put your build structure somewhere other than <code>/usr/src/redhat</code>.</p>
<pre lang="bash">curl -sR -o /usr/src/redhat/SOURCES/node-v0.4.6.tar.gz \

http://nodejs.org/dist/node-v0.4.6.tar.gz</pre>
<p>Once you have the source in place, <a href="http://www.chrisabernethy.com/wp-content/downloads/nodejs.spec">download the Node.js spec file</a> and place it into <code>/usr/src/redhat/SPECS</code> (or the appropriate spec folder). To build the RPM, execute <code>rpmbuild</code> as follows:</p>
<pre lang="bash">rpmbuild -ba /usr/src/redhat/SPECS/nodejs.spec</pre>
<p>Once the build completes, you will find your RPMs in the /usr/src/redhat/RPMS folder.</p>
<h2>More Information</h2>
<p>For more information about Node.js, visit the following online resources:</p>
<ul>
<li><a href="http://node.js">Node.js Homepage</a></li>
<li><a href="http://groups.google.com/group/nodejs">Mailing List</a></li>
<li>IRC <a href="http://webchat.freenode.net/?channels=node.js&amp;uio=d4">#node.js on freenode.net</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/ChrisAbernethyCom/~4/X9XLGIb4aec" 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%2Finstalling-node-js-on-centos-redhat%2F&amp;seed_title=Installing+Node.js+on+CentOS%2FRedHat/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Finstalling-node-js-on-centos-redhat%2F&amp;seed_title=Installing+Node.js+on+CentOS%2FRedHat</feedburner:origLink></item>
		<item>
		<title>Google Analytics: How To Replace %20 With A Space</title>
		<link>http://feedproxy.google.com/~r/ChrisAbernethyCom/~3/hTZK76BuTrY/</link>
		<comments>http://www.chrisabernethy.com/feeder/?FeederAction=clicked&amp;feed=Articles+%28RSS2%29&amp;seed=http%3A%2F%2Fwww.chrisabernethy.com%2Fgoogle-analytics-how-to-replace-20-with-a-space%2F&amp;seed_title=Google+Analytics%3A+How+To+Replace+%2520+With+A+Space#comments</comments>
		<pubDate>Sun, 03 Oct 2010 20:20:23 +0000</pubDate>
		<dc:creator>Chris Abernethy</dc:creator>
				<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.chrisabernethy.com/?p=304</guid>
		<description><![CDATA[When tracking User Defined Values in your Google Analytics reports, spaces show up as %20. Use this technique to replace those codes with spaces.]]></description>
				<content:encoded><![CDATA[<p>I recently wrote a post entitled <a href="http://www.chrisabernethy.com/tracking-keyword-ranking-position-with-google-analytics/">Tracking Keyword Ranking Position with Google Analytics</a> which demonstrated how you can produce a report using filters and custom variables that will show precisely where your page is ranking for a particular keyword for users referred via Google search results.</p>
<p>One of the downfalls to the approach outlined in the previous article is that the keyword reports produced by the filters display %20 instead of spaces in the <em>User Defined Value</em>, as shown in the following screenshot:</p>
<p><span id="more-304"></span></p>
<p><img src="http://www.chrisabernethy.com/wp-content/uploads/2010/10/GA-Before.gif" alt="User Defined Value Showing %20 Instead Of Spaces" title="User Defined Value Showing %20 Instead Of Spaces" width="418" height="235" class="alignleft size-full wp-image-313" /></p>
<p>My first reaction was to try and create a <em>Search and Replace</em> filter in the Google Analytics profile, but <a href="http://www.google.com/support/forum/p/Google+Analytics/thread?tid=52fe4628373e5003&#038;hl=en">Google does not allow you to enter a single space</a> in the <em>Replace String</em> field, instead treating that field as being empty. Other people <a href="http://www.google.co.uk/support/forum/p/Google+Analytics/thread?tid=2cdb3ec0be32e078&#038;hl=en#fid_2cdb3ec0be32e078000484d3e8e188c4">recommend using an underscore</a> instead of a space as the replacement character.</p>
<p>The solution is to use a <a href="http://en.wikipedia.org/wiki/Non-breaking_space">non-breaking space</a> (Option+Space on OSX, or Alt+0160 on Windows). The only other issue is that the filters will only replace once instance of %20 with a space, so you&#8217;ll need to create several (I  usually create five or six and call it a day).</p>
<p><img src="http://www.chrisabernethy.com/wp-content/uploads/2010/10/GA-Filter.png" alt="Creating A Filter To Replace %20 With A Space" title="Creating A Filter To Replace %20 With A Space" width="418" height="270" class="alignleft size-full wp-image-309" /></p>
<p>After you make this change, note that it will take a few days to start seeing it take effect. Here&#8217;s a screenshot with the updated filters in place, also notice that I&#8217;ve put the rank information at the front of the user defined field so that it is always visible.</p>
<p><img src="http://www.chrisabernethy.com/wp-content/uploads/2010/10/GA-After.png" alt="User Defined Value Showing Non-Breaking Space Instead Of %20" title="User Defined Value Showing Non-Breaking Space Instead Of %20" width="418" height="228" class="alignleft size-full wp-image-315" /></p>
<img src="http://feeds.feedburner.com/~r/ChrisAbernethyCom/~4/hTZK76BuTrY" 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-analytics-how-to-replace-20-with-a-space%2F&amp;seed_title=Google+Analytics%3A+How+To+Replace+%2520+With+A+Space/feed/</wfw:commentRss>
		<slash:comments>9</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-analytics-how-to-replace-20-with-a-space%2F&amp;seed_title=Google+Analytics%3A+How+To+Replace+%2520+With+A+Space</feedburner:origLink></item>
		<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>Chris Abernethy</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>
<p><span id="more-224"></span></p>
<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 &#8220;flowers&#8221;, 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 &#8220;Add a Profile for an Existing domain&#8221;. You can give it any name you like, I chose to use &#8220;Google SERP Ranking&#8221;.</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 style="clear:both;">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 style="clear:both;">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 style="clear:both;">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 style="clear:both;">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 style="clear:both;">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>
<p style="clear:both;">For clarity, here are the three regular expressions from the previous screenshot:</p>
<pre>\bq=([^&#038;]*)
\bcd=(\d*)
$A1 (Rank: $B1)</pre>
<h2 style="clear:both;">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 style="clear:both;">Please share your experiences with this or any other helpful Google Analytics tricks that you use!</p>
<p><strong>Update:</strong> You can also <a href="http://www.chrisabernethy.com/google-analytics-how-to-replace-20-with-a-space/">replace the %20 with a space</a> in your reports by adding some additional filters</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>67</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>Chris Abernethy</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[PHP]]></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[<p>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.</p>
<blockquote><p>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>&#8211;Webgrind</cite></p></blockquote>
<p><span id="more-178"></span></p>
<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>
<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" /></p>
<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&#8217;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 &#8220;out-of-the-box&#8221;&#8230; 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&#8217;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 &#8216;/tmp&#8217;, 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&#8217;s it, you should be ready to profile your PHP code with Xdebug and Cachegrind!</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>27</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>Chris Abernethy</dc:creator>
				<category><![CDATA[SEO]]></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&#8217;s method of determining how &#8220;valueable&#8221; 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><p>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 &#8220;measuring&#8221; its relative importance within the set.
</p></blockquote>
<p><span id="more-172"></span></p>
<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&#8217;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. &#8211; 8:24</li>
<li><a href="http://twitter.com/jredd77" title="Twitter profile for jredd77">@jredd77</a>: Celebrating my website&#8217;s PageRank increase from 0/10 to 3/10 overnight. &#8211; 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) &#8211; 10:26</li>
</ul>
<p>Join the conversation!</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>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%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>Chris Abernethy</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 &#8220;<em>To perform the requested action, connection information is required.</em>&#8220;</p>
<p><span id="more-152"></span></p>
<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&#8217;t WordPress Write To The Filesystem?</h2>
<p>In order to understand why WordPress can&#8217;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:</p>
<pre>
if( function_exists('getmyuid') &#038;&#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 &#8216;httpd&#8217;, 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/><br />
<code>&lt;?php echo(exec("whoami")); ?&gt;</code><br/><br />
Thanks <a href="http://wp-wizardry.com/" title="WP Wizardry: Magical Stuff for WordPress">Suzanne</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>217</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>Chris Abernethy</dc:creator>
				<category><![CDATA[Stream]]></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&#8217;m not sure I&#8217;d be able to get much done without them, and I think that you&#8217;ll feel the same way once you give them a try (if you don&#8217;t already have them installed, that is!)</p>
<p><span id="more-117"></span></p>
<div class="grid_4 first">
<h2>Firebug</h2>
<p>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.</p>
<p><a title="Download Firebug" href="https://addons.mozilla.org/en-US/firefox/addon/1843" target="_blank">Download Firebug</a></p>
</div>
<div class="grid_4 last">
<h2>MeasureIt</h2>
<p>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.</p>
<p><a title="Download MeasureIt" href="https://addons.mozilla.org/en-US/firefox/addon/539" target="_blank">Download MeasureIt</a></p>
</div>
<p><br style="clear: both;" /></p>
<div class="grid_4 first">
<h2>Web Developer</h2>
<p>Another great add-on for web developers&#8230; 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.</p>
<p><a title="Download Web Developer" href="https://addons.mozilla.org/en-US/firefox/addon/60" target="_blank">Download Web Developer</a></p>
</div>
<div class="grid_4 last">
<h2>SEO for Firefox</h2>
<p>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.</p>
<p><a title="Download SEO for Firefox" href="http://tools.seobook.com/firefox/seo-for-firefox.html" target="_blank">Download SEO for Firefox</a></p>
</div>
<p><br style="clear: both;" /></p>
<div class="grid_4 first">
<h2>Delicious</h2>
<p>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.</p>
<p><a title="Download Delicious" href="http://delicious.com/help/installff" target="_blank">Download Delicious</a></p>
</div>
<div class="grid_4 last">
<h2>TwitterBar</h2>
<p>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.</p>
<p><a title="Download TwitterBar" href="https://addons.mozilla.org/en-US/firefox/addon/4664" target="_blank">Download TwitterBar</a></p>
</div>
<p><br style="clear: both;" /><br />
Do you have any Firefox add-ons that you can&#8217;t live without? Leave a comment and tell us about them!</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>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%2F6-essential-firefox-add-ons%2F&amp;seed_title=6+Essential+Firefox+Add-ons</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>Chris Abernethy</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&#8217;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&#8217;t really understand how it works. Until today, that was the case for me with WordPress static front pages.</p>
<p><span id="more-69"></span></p>
<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>
<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" /></p>
<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&#8217;t have to use this option).</dd>
</dl>
<h2>What&#8217;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>
<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>
	</channel>
</rss>
