<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Turbocharged</title>
	<atom:link href="http://turbochargedcms.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://turbochargedcms.com</link>
	<description>Tools and services for bloggers and Internet entrepreneurs</description>
	<pubDate>Thu, 07 Feb 2008 23:45:42 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Combating banner blindness with WordPress</title>
		<link>http://turbochargedcms.com/2007/10/combating-banner-blindness-with-wordpress/</link>
		<comments>http://turbochargedcms.com/2007/10/combating-banner-blindness-with-wordpress/#comments</comments>
		<pubDate>Wed, 17 Oct 2007 18:34:53 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[WordPress news]]></category>

		<guid isPermaLink="false">http://turbochargedcms.com/2007/10/combating-banner-blindness-with-wordpress/</guid>
		<description><![CDATA[I just posted a tutorial on combating banner blindness using the newest plugin I wrote, on Rudd-O.com.  Don’t miss it!
]]></description>
			<content:encoded><![CDATA[<p>I just posted a tutorial on <a href="http://rudd-o.com/archives/2007/10/17/combating-banner-blindness-with-wordpress/">combating banner blindness</a> using the newest plugin I wrote, on Rudd-O.com.  Don’t miss it!</p>
]]></content:encoded>
			<wfw:commentRss>http://turbochargedcms.com/2007/10/combating-banner-blindness-with-wordpress/feed/</wfw:commentRss>
		</item>
		<item>
		<title>New WordPress plugin: Intelligent content ad insertion</title>
		<link>http://turbochargedcms.com/2007/10/new-wordpress-plugin-intelligent-content-ad-insertion/</link>
		<comments>http://turbochargedcms.com/2007/10/new-wordpress-plugin-intelligent-content-ad-insertion/#comments</comments>
		<pubDate>Wed, 17 Oct 2007 10:50:07 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[WordPress news]]></category>

		<guid isPermaLink="false">http://turbochargedcms.com/2007/10/new-wordpress-plugin-intelligent-content-ad-insertion/</guid>
		<description><![CDATA[I just released a new plugin that allows people to insert AdSense ads without any fuss (read: manual work) on existing posts and pages of their WordPress blogs.  It’s on Rudd-O.com but at some point it will move here.
]]></description>
			<content:encoded><![CDATA[<p>I just released a new plugin that allows people to <a href="http://rudd-o.com/projects/wordpress-intelligent-content-ad-insert/">insert AdSense ads without any fuss (read: manual work) on existing posts and pages of their WordPress blogs</a>.  It’s on Rudd-O.com but at some point it will move here.</p>
]]></content:encoded>
			<wfw:commentRss>http://turbochargedcms.com/2007/10/new-wordpress-plugin-intelligent-content-ad-insertion/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Turbocharged 2.4.0 is out, with WordPress 2.2</title>
		<link>http://turbochargedcms.com/2007/06/turbocharged-240-is-out-with-wordpress-22/</link>
		<comments>http://turbochargedcms.com/2007/06/turbocharged-240-is-out-with-wordpress-22/#comments</comments>
		<pubDate>Wed, 13 Jun 2007 07:08:10 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Turbocharged releases]]></category>

		<guid isPermaLink="false">http://turbochargedcms.com/2007/06/turbocharged-240-is-out-with-wordpress-22/</guid>
		<description><![CDATA[Here’s the official announcement:




Updated bundled WordPress to 2.2, for the bundled packages
Updated the free plugins bundle to 2.0.2, as a result:


Added a Don’t throttle comments plugin, for proxy-accelerated hosts
Removed Widgets plugin (now in core)
Removed widgetized themes (builtin themes already widgetized)
Updated CC configurator to 1.0
Fixed a bug in the Digg this plugin
Fixed an error in table [...]]]></description>
			<content:encoded><![CDATA[<p>Here’s the official announcement:</p>

<p><span id="more-85"/></p>

<ul>
<li>Updated bundled WordPress to 2.2, for the bundled packages</li>
<li>Updated the free plugins bundle to 2.0.2, as a result:

<ul>
<li>Added a Don’t throttle comments plugin, for proxy-accelerated hosts</li>
<li>Removed Widgets plugin (now in core)</li>
<li>Removed widgetized themes (builtin themes already widgetized)</li>
<li>Updated CC configurator to 1.0</li>
<li>Fixed a bug in the Digg this plugin</li>
<li>Fixed an error in table creation on the bsuite plugin</li>
<li>Added the StripTease plugin</li>
<li>Added the Reddit button plugin</li>
<li>Fixed Rich Boakes’ Google Analytics plugin adding double <code>onclicks</code></li>
<li>Added Gengo 0.9 multilingual plugin</li>
<li>Fixed several stock plugins to work with Gengo</li>
</ul></li>
</ul>

<p><a href="http://turbochargedcms.com/purchase/">Get it now!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://turbochargedcms.com/2007/06/turbocharged-240-is-out-with-wordpress-22/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Stand out in search engines and improve the usability of your content with WordPress and Turbocharged</title>
		<link>http://turbochargedcms.com/2007/06/increase-your-contents-search-engine-rankings-and-usability-with-wordpress-and-turbocharged/</link>
		<comments>http://turbochargedcms.com/2007/06/increase-your-contents-search-engine-rankings-and-usability-with-wordpress-and-turbocharged/#comments</comments>
		<pubDate>Thu, 07 Jun 2007 23:05:34 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Turbocharged and WordPress tutorials]]></category>

		<guid isPermaLink="false">http://turbochargedcms.com/2007/06/increase-your-contents-search-engine-rankings-and-usability-with-wordpress-and-turbocharged/</guid>
		<description><![CDATA[The search engine game is not just about getting top result spots.  It’s also about what the user sees once your content hits the first result page.  Here’s an example:





See it?  This search result shows an excerpt from the page.

While this particular search result might be somewhat relevant to its content, it’s [...]]]></description>
			<content:encoded><![CDATA[<p>The search engine game is not just about getting top result spots.  It’s also about what the user sees once your content hits the first result page.  Here’s an example:</p>

<p><span id="more-78"/></p>

<div style="padding: 1em; border: 1px solid #514C83; text-align: center; overflow:auto;"><img src="http://turbochargedcms.com/wp-content/uploads/2007/06/tb6.jpg" alt="Bad search result excerpt"/></div>

<p>See it?  This search result shows an excerpt from the page.</p>

<p>While this particular search result might be somewhat relevant to its content, it’s important to note that <em>this excerpt could be about anything unrelated to the content of your page</em>: navigation elements, comments, …  Evidently, you could be squandering the value of your search engine ranking.</p>

<p>Now check this one out:</p>

<div style="padding: 1em; border: 1px solid #514C83; text-align: center; overflow:auto;"><img src="http://turbochargedcms.com/wp-content/uploads/2007/06/tb1.jpg" alt="Summary search result"/></div>

<p>This one doesn’t show an excerpt from the page, although it may look like one.  Instead, <em>it shows a nice, controlled summary</em>.  A <em>controlled summary is superior to a simple excerpt</em>, because it’s controlled, and thus has the potential to convey much more focused information to your potential search engine visitors.</p>

<h2>Getting the summaries under control</h2>

<p>So, how do you get these summaries?</p>

<p>The answer is easy: by including a META tag with the description.  Yes, you must type it, but it pays off: proficient and informed search engine users will instantly and unconsciously focus on the summary, instead of focusing in the competition.</p>

<p>And that’s exactly what you want.</p>

<p>Fortunately, with Turbocharged (and, somewhat more involved, with WordPress) there’s an easy way to add a summary to each article or page.</p>

<h2>A simple plugin lets you write these summaries</h2>

<p>To activate this option in Turbocharged, you need to do these simple steps:</p>

<ul>
<li>Go to the Plugins tab in the WordPress management console.</li>
<li>Activate the plugin named <em>Another Wordpress Meta Plugin</em>.</li>
</ul>

<p>That’s it.</p>

<p>Those of you who are using regular WordPress can, in theory, look the plugin up on the Web, install it and then activate it, but <a href="http://turbochargedcms.com/">we’ve put together Turbocharged to avoid exactly that hassle</a>.</p>

<h2>Writing posts with search engine summaries</h2>

<p>Now, when you write a post, the following will appear below the post writing area:</p>

<div style="padding: 1em; border: 1px solid #514C83; text-align: center; overflow:auto;"><img src="http://turbochargedcms.com/wp-content/uploads/2007/06/tb5.jpg" alt="Another Wordpress Meta Plugin in action"/></div>

<p>Fill the <em>Description</em> field, and off you go.  The next time your favorite search engine crawls your article, it’ll pick the description up and use it as the summary.  Not hard at all, is it?</p>

<p>Remember to be responsible; we wouldn’t want you to use that summary for dishonest purposes, and search engines could delist you for that.</p>

<h2>Getting your blog’s tagline as the summary of your front page</h2>

<p>If you want to use some text (usually, your blog’s tagline) as the summary on your front page, you’ve got two choices.</p>

<h2>The manual way</h2>

<p>Edit your theme’s <code>header.php</code> file.  Right before the closing &lt;/head&gt; tag, you could conceivably add this:</p>

<p><pre>&lt;?php if (is_home()) { ?&gt;
&lt;meta name="description" content="&lt;?php echo get_bloginfo("description"); ?&gt;" /&gt;
&lt;?php } ?&gt;</pre></p>

<p>This would cause the description tag to appear only on your home page.</p>

<h3>The automatic, Meta Plugin assisted way</h3>

<p>But there’s a better way.  If you’ve successfully enabled the <em>Another Wordpress Meta Plugin</em>, you can:</p>

<ul>
<li>open your WordPress management console,</li>
<li>hit the <em>Options</em> tab, then</li>
<li>hit the <em>Another Wordpress Meta Plugin</em> sub-tab</li>
</ul>

<p>Now, on the field <em>Home Description</em>, type what you’d like to appear as your blog’s front page description:</p>

<div style="padding: 1em; border: 1px solid #514C83; text-align: center; overflow:auto;"><a href="http://turbochargedcms.com/wp-content/uploads/2007/06/awmp.jpg" title="Another Wordpress Meta Plugin options" rel="lightbox"><img src="http://turbochargedcms.com/wp-content/uploads/2007/06/awmp.thumbnail.jpg" alt="Another Wordpress Meta Plugin options"/></a><br />
<em>The Another Wordpress Meta Plugin options panel</em>
</div>

<h2>Do it well — the art of microcontent</h2>

<p>Of course, this entire article begs the question: what is a good description to write in?</p>

<p>This is all related to <em>microcontent</em>.  Microcontent is content that’s short and sweet (or at least it should be, in theory).  Headings, hyperlink texts and titles, image descriptions and META tags are excellent examples of microcontent.  Your microcontent writing proficiency can make or break your site.</p>

<p>To answer my own question: a good summary is <em>whatever best conveys what the article is about, in one sentence</em>.  For that, you’ll need a little bit of copywriting and a little bit of empathy — put yourself in the shoes of your potential readers.  And you absolutely need to keep it under two sentences, otherwise the summary will be chopped off in the search results.</p>

<p>You don’t necessarily need to give away the “selling point” of your article — you could use the summary as a teaser.  There are thousands of possible uses for the summary, but you need to keep this in mind: <em>it’s about results, and it’s about honesty</em>.</p>

<p>I’m confident you can muster the empathy to write good descriptions.  As for copywriting, I’ll give you one example of what <em>not</em> do to:</p>

<div style="padding: 1em; border: 1px solid #514C83; text-align: center; overflow:auto;"><img src="http://turbochargedcms.com/wp-content/uploads/2007/06/tb3.jpg" alt="Terrible summary"/></div>

<p>So what’s wrong with it?</p>

<ol>
<li>It’s too long.  Therefore, it obviously gets chopped.</li>
<li>It tries to mix too many messages.</li>
<li>It repeats the page title.  A waste of space, especially since the title is right above it.</li>
<li>It says <em>Main page</em>.  Which prospective readers care about that?</li>
</ol>

<p>Want to learn more about the subject?  I’ll just refer you to <a href="http://www.copyblogger.com/">Copyblogger</a> — they have much more experience than me.</p>

<h2>Do it today!</h2>

<p>Keep this in mind: search engines don’t crawl each year — they’re perpetually fetching new versions of your site — and your competitors’ as well.  The sooner you do it, the sooner you’ll see results.</p>

<p>In the meantime, I sincerely wish you a great day.  <a href="http://turbochargedcms.com/">Get Turbocharged today</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://turbochargedcms.com/2007/06/increase-your-contents-search-engine-rankings-and-usability-with-wordpress-and-turbocharged/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A fairly complete top WordPress plugins list</title>
		<link>http://turbochargedcms.com/2007/04/a-fairly-complete-top-wordpress-plugins-list/</link>
		<comments>http://turbochargedcms.com/2007/04/a-fairly-complete-top-wordpress-plugins-list/#comments</comments>
		<pubDate>Mon, 30 Apr 2007 17:16:35 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Cool findings]]></category>

		<guid isPermaLink="false">http://turbochargedcms.com/2007/04/a-fairly-complete-top-wordpress-plugins-list/</guid>
		<description><![CDATA[Michael sent me a list of top WordPress plugins.  I have to agree with his list, since I’m using most of them and Turbocharged also includes them.
]]></description>
			<content:encoded><![CDATA[<p>Michael sent me a <a href="http://www.flashboutique.de/seo/2007/04/21/die-besten-wordpress-plugins-admin/">list of top WordPress plugins</a>.  I have to agree with his list, since I’m using most of them and Turbocharged also includes them.</p>
]]></content:encoded>
			<wfw:commentRss>http://turbochargedcms.com/2007/04/a-fairly-complete-top-wordpress-plugins-list/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Weathering heavy traffic with WordPress and Turbocharged</title>
		<link>http://turbochargedcms.com/2007/04/weathering-heavy-traffic-with-wordpress-and-turbocharged/</link>
		<comments>http://turbochargedcms.com/2007/04/weathering-heavy-traffic-with-wordpress-and-turbocharged/#comments</comments>
		<pubDate>Sat, 28 Apr 2007 23:07:35 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Turbocharged and WordPress tutorials]]></category>

		<guid isPermaLink="false">http://turbochargedcms.com/2007/04/weathering-heavy-traffic-with-wordpress-and-turbocharged/</guid>
		<description><![CDATA[Everyone’s been there at least once.  One of your blog pages gets dugg or slashdotted.  What to do?



WordPress is often maligned as a resource-hungry blog platform — one that requires a lot of resources to run in high-traffic settings.  But believe it or not, it’s possible to survive traffic spikes, while still [...]]]></description>
			<content:encoded><![CDATA[<p>Everyone&#8217;s been there at least once.  One of your blog pages gets dugg or slashdotted.  What to do?</p>

<p><span id="more-72"></span></p>

<p>WordPress is often maligned as a resource-hungry blog platform &#8212; one that requires a lot of resources to run in high-traffic settings.  But believe it or not, it&#8217;s possible to survive traffic spikes, while still serving  pages to your audience swiftly.  And you won&#8217;t need big iron to do it.</p>

<p>How do I know it?  Because this very page was subject to the Digg effect, while (simultaneously) another domain hosted in this very server was subject to simultaneous Digg/Slashdot/Reddit/The Pirate Bay/del.icio.us traffic storms.  And (after the measures outlined here) it stood its ground.</p>

<p>Throughout this guide, I&#8217;ll make a few assumptions on your part:</p>

<ol>
<li>You&#8217;re using Apache to serve your pages, and you can change your Apache configuration.</li>
<li>You&#8217;re storing the contents of your blog in a MySQL database, the configuration of which you can change.</li>
<li>You&#8217;re running <a href="http://turbochargedcms.com/">Turbocharged</a>, or you have access to install WordPress plugins.</li>
</ol>

<p>If these don&#8217;t apply to you, don&#8217;t worry &#8212; we&#8217;ll explore (sadly, less effective) alternative approaches so you can still fend off traffic storms.</p>

<h2>Why WordPress blogs die weathering traffic storms</h2>

<p>Before going deep into defending your blog from high traffic, let&#8217;s discuss a bit how WordPress works.</p>

<h3>How pages are served when WordPress serves them</h3>

<p>Here&#8217;s the life cycle of a page served by WordPress:</p>

<div style="float: right; padding-left: 2em"><a href="http://turbochargedcms.com/wp-content/uploads/2007/04/wordpress-page-generation.png" title="The life of a WordPress dynamic page"><img src="http://turbochargedcms.com/wp-content/uploads/2007/04/wordpress-page-generation.png" alt="The life of a WordPress dynamic page"/></a></div>

<ol>
<li>A reader visits your blog.  Thus, his web browser requests a Web page from your server.</li>
<li>Your Apache Web server receives the request.  Through the URL, Apache determines that the request needs to be fed to WordPress.</li>
<li>WordPress loads and receives the request.  It processes the request, and identifies which page to show.</li>
<li>Then, WordPress generates the HTML code that will get sent to your reader&#8217;s Web browser.  This generation is accomplished by assembling the results of several MySQL queries into your WordPress theme.</li>
<li>Apache is fed, in real time, the response of the request, which gets sent (in chunks) to your reader&#8217;s browser.</li>
<li>Your reader&#8217;s browser receives the HTML and processes it.  The browser makes further requests for the required resources (links to images, style sheets and JavaScript scripts), and immediately submits those requests back to your Apache Web server.</li>
<li>Go to step 1 for each one of the resources that your page required.  If any of these new requests require WordPress to generate a page, then call WordPress again.</li>
</ol>

<p>In general, this is the process that takes place when a page in your site is requested.</p>

<h3>But sometimes, WordPress can&#8217;t keep up&#8230;</h3>

<p>Steps 3 and 4 take the most time.  That is to say, WordPress is CPU- and database-bound.  For example, in this blog, average page generation times dwell around 0.7 seconds.  Contrast that to the time it takes to process a request for a static image, page or stylesheet &#8212; which is about 0.005 seconds &#8212; and you&#8217;ll understand why it&#8217;s monumentally huge.</p>

<p>This page calls fifteen other static elements, so (in theory) a full page view could be served in 0.8 seconds of processing time.  Even so, under most circumstances this wouldn&#8217;t be a problem.  I hardly serve one page per second constantly, and even if I did, the server would weather it just fine.  If I have a second to serve all elements, and I serve all of them in 0.8 seconds, then no problem, right?</p>

<p>That&#8217;s the theory.  In practice:</p>

<ul>
<li>Traffic storms aren&#8217;t &#8220;average&#8221;.  When your site experiences a traffic storm, you can be sure it&#8217;s going to be ten times (or perhaps even a hundred times) larger than the average traffic.</li>
<li>There&#8217;s a limited amount of simultaneous Web requests you can serve per second.  With Apache, this limit is bound to the <code>MaxClients</code> setting.  When all Apache processes are busy serving pages, further requests get backlogged in the queue.  Evidently, not even static elements like images and stylesheets get their chance to be served.</li>
</ul>

<p>In summary: under a traffic surge, your Web server might be receiving ten WordPress (dynamic) requests per second, but it will be dispatching only one in that time &#8212; and the rest of the requests will be backlogged in a queue.  The queue will grow and grow.  Visitors will wait, and wait, only to never see the page they expected.  Then they&#8217;ll head somewhere else.</p>

<p>I know this because it happened here.  During the aforementioned traffic storm, all Apache processes in this server (<code>MaxClients = 13</code>, explained below) were bogged down.</p>

<p>On Linux, you can be certain this is the problem if, when you launch <code>top</code>, you see high average CPU usage times (the state named <code>N.NN%us</code> on the first screen lines).</p>

<h3>&#8230;keepalives don&#8217;t help</h3>

<p>Keepalives minimize response times for a Web page, by simply not closing the HTTP connection and accepting a second or third one in the same channel.  Problem is, while the connection is idle, &#8220;the slot is taken&#8221; and it cannot be used by anyone else until the Web browser is done sending and receiving all requests.</p>

<p>Slow clients tend to hog Apache processes for themselves &#8212; in the default configuration, for up to 30 seconds.  If each client generously serves himself out of three or four Apache processes (hint: they all do), a wave of slow clients can render your site completely unresponsive for minutes at a time, even if you have plenty of capacity to serve.</p>

<h3>&#8230;and sometimes, it&#8217;s the machine that dies</h3>

<p><q>But why don&#8217;t you up the maximum number of clients?</q> I hear you say.  Here&#8217;s why:</p>

<p>Let&#8217;s take Apache as an example, again.  Apache is normally configured to serve up to 256 requests simultaneously.  Most hosting servers don&#8217;t have enough memory to serve so many requests.  Hence, Apache will continue to start additional processes to serve up the requested pages.  At some point, physical memory will exhaust &#8212; and then you&#8217;re fried: the machine dies out of memory starvation.</p>

<p>In this scenario, it&#8217;s not just the fact that requests come faster than they&#8217;re served; now the machine is deadlocked while Apache continues to pile up incoming requests in the queue.  Too many Apache processes, and your blog becomes memory-bound.</p>

<p>This is not a problem when serving static content &#8212; in this scenario, you&#8217;d be hard-pressed to max out your memory with the default setting.  The problem, of course, is WordPress again.  Each Apache process serving WordPress will balloon to 20 to 30 MB of memory.  WordPress makes filling up server memory real easy.</p>

<p>How to tell if this is the case?  Well, use <code>top</code> &#8212; but good luck trying to launch it, because it&#8217;ll take ages due to disk swapping.  Once it&#8217;s launched and running, you&#8217;ll see very high (almost 100%) usage in the waiting for I/O state (<code>NN.N%wa</code>).  This is almost always a symptom that the CPU is idling, waiting for data to come in and out of swap.</p>

<p>Fixing this problem when it happens is incredibly hard, because the machine gets so slow that remotely logging in to shut down Apache (and free memory up) can take minutes.  Often, you&#8217;ll just call your hosting provider and ask them to reboot your server &#8212; only to discover that, when it&#8217;s backed up, the traffic storm hasn&#8217;t stopped and your server is deadlocked again.</p>

<h2>First line: avoiding out of memory deaths &#8212; and rationing keepalives</h2>

<p>Remember the traffic storm I was talking about? A slashdotting scenario from last year taught me the following tricks, so when the traffic storm came, I was prepared because I already had carried the following steps out. More than a performance trick, this is baseline tuning you must absolutely perform if you don&#8217;t want your server to die.</p>

<p>The first item in our checklist is configuring Apache properly, so your blog doesn&#8217;t ever become memory-bound, or Apache process-bound.  You need to mind three different configuration variables:</p>

<ol>
<li>The number of Apache processes your machine can handle (<code>MaxClients</code>).  This is directly proportional to the amount of memory each Apache process takes up, and limited by the physical memory of your machine.  If your machine starts dipping into swap to serve pages, you&#8217;re screwed because page generation time will multiply itself by a factor of ten or twenty.</li>
<li>The backlog queue depth (<code>ListenBacklog</code>).  It doesn&#8217;t make sense to keep visitors waiting if your machine won&#8217;t be able to handle them.  Better to refuse them straight than to keep them (and your machine) tied up waiting.</li>
<li>Keepalives.  You need to kill them.  Sure, this may add a few milliseconds to each page load &#8212; that&#8217;s the preferred outcome vs. locking tons of clients out in the backlog queue.</li>
</ol>

<p>How to do it?  I wrote a <a href="http://rudd-o.com/archives/2006/03/01/tuning-an-apache-server-in-5-minutes/">separate guide that deals with the problem</a>.  In the same vein, <a href="http://rudd-o.com/archives/2006/03/02/tuning-a-mysql-server-in-5-minutes/">MySQL needs to be kept in check, so check this other guide</a>.</p>

<p>In general, the principle is simple: if your hosting machine starts swapping, you need to scale back the number of Apache processes immediately, and keep scaling back until swapping stops completely.  On this server, with 512 MB of RAM, I had to scale down to 15 Apache processes to avoid swapping.  In practice, this means I can serve up to 4 Web browsers fully in parallel, which is still fairly high.</p>

<p>The alternative is to purchase more memory for your server, but we know how expensive that can be, right?</p>

<h2>Second line: MySQL query caching</h2>

<p>The second item in our checklist is speeding actual page generation.  Did you know that most of the queries that WordPress makes are the same, over and over?  Most of the time WordPress spends, it does so while waiting for query results in the database.  Why spend extra time processing repeat queries?</p>

<p>It doesn&#8217;t make sense to have MySQL generate the same data sets millions of times, so you should turn MySQL query caching on.  The query cache is smart, and will regenerate itself intelligently if any content changes, so no worries about malfunctions.  And it&#8217;s just one switch in the configuration file, <code>/etc/my.cnf</code>:</p>

<p><pre>[mysqld]
query-cache-type = 1
query-cache-size = 10M</pre></p>

<p>WordPress doesn&#8217;t need a huge query cache size, so I have mine at 10M.  Once you&#8217;ve configured these settings in the MySQL configuration file, restart your MySQL server so it picks up the configuration changes.</p>

<p>This switch, alone, dipped WordPress page generation times to half; it&#8217;s a fairly big win to be able to serve twice the amount of articles with a single, harmless configuration change.</p>

<h2>Third line: advanced WordPress caching</h2>

<p><a href="http://turbochargedcms.com/">Turbocharged</a> includes a fantastic caching plugin for WordPress, named WP-Cache.</p>

<div style="text-align: center; width: 200px; margin-left: 2em; float: right; ">

<h3>Here&#8217;s how you do this in Turbocharged</h3>

<p><a href="http://turbochargedcms.com/wp-content/uploads/2007/04/wp-cache-1.png" title="How to enable WP-Cache in Turbocharged: step 1"><img src="http://turbochargedcms.com/wp-content/uploads/2007/04/wp-cache-1.thumbnail.png" alt="How to enable WP-Cache in Turbocharged: step 1"/></a></p>

<p><a href="http://turbochargedcms.com/wp-content/uploads/2007/04/wp-cache-2.png" title="How to enable WP-Cache in Turbocharged: step 2"><img src="http://turbochargedcms.com/wp-content/uploads/2007/04/wp-cache-2.thumbnail.png" alt="How to enable WP-Cache in Turbocharged: step 2"/></a></p>

<p><a href="http://turbochargedcms.com/wp-content/uploads/2007/04/wp-cache-3.png" title="How to enable WP-Cache in Turbocharged: step 3"><img src="http://turbochargedcms.com/wp-content/uploads/2007/04/wp-cache-3.thumbnail.png" alt="How to enable WP-Cache in Turbocharged: step 3"/></a></p>

</div>

<p>What it does is amazingly straightforward and effective: the first time a page is requested, the generated HTML is saved to a cache file with a timestamp.  When the same page is requested again, WP-Cache checks if it&#8217;s been cached, and if it is fresh (below a configurable amount of time, defaults to 1 hour) it instantaneously feeds the cached page to the client, and completely bypasses all WordPress engine calls.</p>

<p>It&#8217;s dramatically effective because, while the first generation of a page could take 1 second, subsequent requests to the same page take about 50 milliseconds.  In practice, this means you can multiply the amount of clients served by 20.</p>

<p>And WP-Cache is fairly smart as well.  If someone makes a comment on an article, the cache for the article is automatically regenerated &#8212; your visitors always see fresh content.  At this point, your blog becomes only network- and CPU-bound, and the only thing you can do to make your blog serve more pages is to buy a more expensive machine and more bandwidth.</p>

<p>But WP-Cache also makes a compromise.  Suppose you have a plugin that shows the most recent comments on your blog&#8217;s front page.  WP-Cache can&#8217;t detect that, so in practice the recent comments list will be stale anywhere from 1 minute to 1 hour (depending on the expiration time setting).  It can&#8217;t detect statistics plugins that depend on WordPress hooks to increment counters or save page visits, so you may see skewed statistics from those plugins.</p>

<p>So it&#8217;s a compromise.    All in all, you lose some dynamism, but you win performance.</p>

<h3>A compromise?  Why don&#8217;t we try on-demand caching for a change?</h3>

<p>Fortunately, UNIX and Linux are very scriptable and flexible, so it&#8217;s possible to have WP-Cache enable itself automatically when load times go unacceptably slow.  Here&#8217;s a set of scripts that will do the job.</p>

<p>The first one enables or disables WP-Cache by modifying the WordPress configuration file in real-time.  In this example script, we modify the configuration of a Web site stored in <code>/var/www/html</code>.</p>

<p>The script isn&#8217;t rocket science: it just looks for <code>define('WP_CACHE',true)</code> in the WordPress configuration file, and then it modifies it accordingly.  This means you must already have set it in the <code>wp-config.php</code> file.</p>

<p><pre>#!/bin/bash</pre></p>

<p>if [ "$1" == "on" -o "$1" == "off" ] ; then</p>

<pre><code>            [ "$1" == "on" ] &amp;amp;&amp;amp; sed "s/\/\/.*WP_CACHE.*/define ('WP_CACHE', true);/g" /var/www/html/wp-config.php &amp;gt; ~/tmp/bibibi
            [ "$1" == "off" ] &amp;amp;&amp;amp; sed "s/.*WP_CACHE.*/\/\/ define ('WP_CACHE', true);/g" /var/www/html/wp-config.php &amp;gt; ~/tmp/bibibi
            if [ ! -f ~/tmp/bibibi ] ; then
                    echo error: could not create temporary file
                    exit 2
            fi
            chgrp apache ~/tmp/bibibi &amp;amp;&amp;amp; \
            chmod 640 ~/tmp/bibibi &amp;amp;&amp;amp; \
            mv ~/tmp/bibibi ~/$a/html/wp-config.php || exit $?
</code></pre>

<p>else
                echo usage: wpcache &#8216;&lt;on|off&gt;&#8217;
                echo status on $a:
                grep WP_CACHE /var/www/html/wp-config.php
        exit 1
fi</p>

<p>The second script uses <code>wget</code> and Python to time how long the front page takes to load.  If load time goes over 10 second, this script runs <code>wpcache on</code>, turns itself into a service, waits 3600 seconds (one hour) and then runs <code>wpcache off</code>.  I run it as a <code>cron</code> job, every minute:</p>

<p><pre>* * * * * /full/path/to/autowpcache</pre></p>

<p>That way, whenever the site becomes bogged down, the server automatically turns caching on, but only temporarily &#8212; after one hour, caching is disabled so your pages become fully dynamic again.  If load times go up again, the script will re-enable caching after a few moments.</p>

<p>Obviously, fetching your front page may affect your Web statistics slightly &#8212; if this is a concern, place a 1&#215;1 image in your <code>wp-content/uploads</code> folder and fetch that instead.</p>

<p><pre>#!/usr/bin/env python</pre></p>

<p>import sys
import commands
import time
import os</p>

<p>start = time.time()
execution = commands.getoutput("wget -q http://rudd-o.com/ -O /dev/null")
end = time.time() - start</p>

<p>if end &gt; 10.0:
        commands.getoutput("/full/path/to/wpcache on")
        print "Load time for Apache status page went overboard"
        print "Detected load time:",end,"seconds"
        print "WP-Cache has automatically turned itself on"
        print "It will turn itself off in an hour"</p>

<pre><code>    sys.stdout.flush()
    sys.stderr.flush()

    try:
            pid = os.fork()
            if pid &amp;gt; 0: sys.exit(0) # exit first parent
    except OSError, e:
            commands.getoutput("logger -p user.err Failed to fork 1 in autowpcache")
            #print &amp;gt;&amp;gt;sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)
            sys.exit(1)

    # decouple from parent environment
    os.chdir("/")
    os.setsid()
    os.umask(0)

    out_log = file('/dev/null', 'a+')
    err_log = file('/dev/null', 'a+', 0)
    dev_null = file('/dev/null', 'r')

    os.dup2(out_log.fileno(), sys.stdout.fileno())
    os.dup2(err_log.fileno(), sys.stderr.fileno())
    os.dup2(dev_null.fileno(), sys.stdin.fileno())

    # do second fork
    try:
            pid = os.fork()
            if pid &amp;gt; 0: sys.exit(0) # exit from second parent

    except OSError, e:
            commands.getoutput("logger -p user.err Failed to fork 2 in autowpcache")
            #print &amp;gt;&amp;gt;sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
            sys.exit(1)

    # we're the child now, so we guard the wpcache for an hour
    time.sleep(3600)
    commands.getoutput("/full/path/to/wpcache off")
    commands.getoutput("logger -p user.notice WP-Cache has been turned off")&lt;/pre&gt;
</code></pre>

<h2>Fourth line: rationalize resources</h2>

<p>Nobody wants to do it, but sometimes you just have to.  Some plugins can add unacceptably long times to page generation.  Be it because of inefficient queries, of complex ones, or increased memory requirements, you may want to take a look at the plugins you have enabled and see how they affect your blog.</p>

<p>Themes can also be problematic.  Particularly when displaying pages with long lists of comments.  If you experience such a problem, you may want to switch (even if it&#8217;s just temporarily) to a theme that displays paged comments instead of all comments in a single page.  <a href="http://turbochargedcms.com/features/themes/#primer">Turbocharged includes Binary Blue</a>, which has that feature.</p>

<h2>Fifth line of defense: opcode caches</h2>

<p>An <em>opcode cache</em> (also known as a PHP accelerator) can be a valuable acquisition for your site.  For example, eAccelerator can offer a two or threefold increase in processing speed when serving dynamic WordPress pages.</p>

<p>It&#8217;s sort of involved to install one if you have to compile it (one of the staffers at my hosting company helped me through it, because there wasn&#8217;t a ready-to-install download for 64-bit servers), but it offers quite the performance gain.</p>

<h2>Sixth line: proxy using Squid or Varnish</h2>

<p>Is your blog still slow, even after executing all steps up to here?  Then you must consider an accelerating proxy.  In the end, I had to resort to one too.  When that nasty traffic storm hit us, it was only a Digg/Reddit/del.icio.us trifecta, and all measures so far had finally brought the server back up.</p>

<p>Little did I know I&#8217;d be linked from Slashdot and The Pirate Bay a scant 30 minutes afterwards.  Before that, I&#8217;d be serving 13 to 15 requests simultaneously, and the server was accessible.  But once I got linked by the two big ones, 15 parallel Web server processes didn&#8217;t cut it anymore.</p>

<p>Then I started to think: <q>Apache is serving both dynamic and static requests.  What if I divided the responsibility between dynamic and static requests?  The &#8220;static Apaches&#8221; wouldn&#8217;t balloon to 30 MB each, and as a result I could serve a much higher <code>MaxClients</code> setting &#8212; more simultaneous clients!</q></p>

<p>In effect, each Apache process was consuming an inordinate amount of RAM, because WordPress needs it, but at the same time, the same processes were serving static content such as images and stylesheets (wasting memory that could be put to use in more Apache processes).  Upping <code>MaxClients</code> was the recipe to kill the machine.  Keeping it down wasn&#8217;t allowing the server to serve more visitors.</p>

<p>I figured it would be best to shield Apache from repeated, <em>cacheable</em> requests (style sheets, icons, images, and other static files).  Thus, I fronted Apache with Squid. That way, all static content would be served straight without touching Apache.</p>

<h3>Squid: the traditional choice</h3>

<p>And you can do too.  To the effect, all you need to do is move your Web server to port 81, install Squid, make it run on port 80, and tell it to cache everything.  Here are example stanzas from the Squid configuration file, <code>squid.conf</code>:</p>

<p><pre>http_port 80
httpd_accel_host localhost
httpd_accel_port 81
httpd_accel_uses_host_header on
cache_access_log /var/log/squid/access.log
emulate_httpd_log on
http_access allow manager localhost
http_access deny manager
http_access allow localhost
http_access allow all</pre></p>

<p>The net effect is that:</p>

<ul>
<li>Pages served by WordPress are dynamically served through Apache (because they&#8217;re dynamic and Squid won&#8217;t cache them).  WP-Cache also cooperates with Squid, and your visitors get content as fresh as is possible with caching.</li>
<li>Static objects such as style sheets and images hit Apache once, then subsequently bypass Apache.  Thus, you have more Apache processes available to serve more (dynamic) WordPress pages.</li>
</ul>

<p>15 minutes after the second traffic wave hit this site, Squid had solved the problem.  In this site, activating Squid relieved Apache of about 90% of the requests it was getting before.  And this step provides the most dramatic difference: before, this server was serving 7 requests per second before; after Squid it served in excess of 70, with no impact to freshness.  Obviously, general server load went down too.</p>

<h3>Varnish: the fast and flexible alternative</h3>

<p>Right after I published this article, I started receiving suggestions (see the comments) to use <a href="http://varnish.projects.linpro.no/">Varnish</a> instead of Squid.  Truth be told, I only used Squid because it was the easy install, and I was familiar with it.  From install to startup, it took me 15 minutes &#8212; if you&#8217;re a fast typist (I am) and you know what you&#8217;re doing (I think I do), you can quickly solve a traffic surge this way.</p>

<p>But, later, I changed to Varnish.  It has three big advantages compared to Squid: it&#8217;s more lightweight, the caching engine is faster, and it doesn&#8217;t die when it runs out of disk space.  Of course, there are two disadvantages: it&#8217;s not as mature (I personally suspect the caching logic is overzealous) and I had to download a package from a Web site, instead of using my distribution&#8217;s package manager.</p>

<p>For the record, here&#8217;s my Varnish configuration file. (<code>/etc/varnish/default.vcl</code>).  Note that I&#8217;ve moved Apache to port 81 and put Varnish in its place on port 80:</p>

<p><pre>backend default {
        set backend.host = "127.0.0.1";
        set backend.port = "81";
}</pre></p>

<p>sub vcl_recv {
                # these apply to my hosts</p>

<pre><code>            if ( req.url ~ "amyru.h18" ) { # kick a cracker out
                    error 403 "Go away cracker";
            }
            if ( req.url ~ "wp-content/uploads/(images|200.)" ) {
            # if images, prevent hotlinking for some, permit for some
            # (read this branch to understand the logic)
                    if (
                        !(req.url ~ "wp-content/uploads/images/gravatar-picture.png$") &amp;&amp;
                        !(req.url ~ "wp-content/uploads/images/logos")
                       ) {
                            if ( req.http.referer ~ "^http(|s)://" ) {
                                    if ( !(req.http.referer ~ "^http(|s)://(([a-z-]+\.|)rudd-o\.com|([a-z]+\.|)turbochargedcms\.com|faviconsfor\.us|images\.google(.+)|search\.live\.com|([a-z-]+\.|)hi5\.com|([a-z]+\.|)ubuntu\.ec|([a-z-]+\.|)planetalinux\.([a-z-]+))" )) {
                                            error 403 "Hotlinking is forbidden";
                                    }
                            }
                    }
            }
            # Big files do not get cached, no point in caching a 300 MB file
            if (req.url ~ "\.(mp3|ogg|avi|mpg|flac)$") { pipe; }
            if (req.request != "GET" &amp;&amp; req.request != "HEAD") { pipe; }
            if (req.http.Expect) { pipe; }
            # If the user is logged on WP, do not cache, shunt directly to Apache
            if (req.http.Cookie ~ "wordpresspass" || req.http.Cookie ~ "wp-postpass") { pipe; }
            if (req.http.Authenticate) { pipe; }
            if (req.http.Pragma ~ "no-cache") { pipe; }

            lookup;
</code></pre>

<p>}</p>

<p>As you can clearly see, you can even front several Web servers running on different ports.  Perfect when you have customers that need complete control of their Apache configuration &#8212; now you can run an Apache server under each user account &#8212; much more secure than letting multiple users access the same Apache instance.</p>

<p>Anyway, this is clear proof that an accelerating proxy can really help you max out your network link!</p>

<h2>Conclusion</h2>

<p>Through a combination of proper configuration, resource rationalization, and advanced caching, you can make your WordPress/Turbocharged blog survive heavy traffic.  Now go and apply this war chest to your blog!</p>

<p><em>Tip: why don&#8217;t you <a href="http://turbochargedcms.com/">try Turbocharged today</a>?  This and other common blogging tasks become much easier with it!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://turbochargedcms.com/2007/04/weathering-heavy-traffic-with-wordpress-and-turbocharged/feed/</wfw:commentRss>
		</item>
		<item>
		<title>An interactive WordPress theme generator</title>
		<link>http://turbochargedcms.com/2007/04/an-interactive-wordpress-theme-generator/</link>
		<comments>http://turbochargedcms.com/2007/04/an-interactive-wordpress-theme-generator/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 22:17:54 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Cool findings]]></category>

		<guid isPermaLink="false">http://turbochargedcms.com/2007/04/an-interactive-wordpress-theme-generator/</guid>
		<description><![CDATA[A fantastic resource for Turbocharged users and those of you who are in the WordPress world but short on time: the WordPress interactive theme generator.  Recommended!
]]></description>
			<content:encoded><![CDATA[<p>A fantastic resource for Turbocharged users and those of you who are in the WordPress world but short on time: <a href="http://www.yvoschaap.com/wpthemegen/">the WordPress interactive theme generator</a>.  Recommended!</p>
]]></content:encoded>
			<wfw:commentRss>http://turbochargedcms.com/2007/04/an-interactive-wordpress-theme-generator/feed/</wfw:commentRss>
		</item>
		<item>
		<title>WordPress and Twitter: a match made in heaven</title>
		<link>http://turbochargedcms.com/2007/04/wordpress-and-twitter-a-marriage-made-in-heaven/</link>
		<comments>http://turbochargedcms.com/2007/04/wordpress-and-twitter-a-marriage-made-in-heaven/#comments</comments>
		<pubDate>Thu, 19 Apr 2007 21:24:32 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Turbocharged and WordPress tutorials]]></category>

		<guid isPermaLink="false">http://turbochargedcms.com/2007/04/wordpress-and-twitter-a-marriage-made-in-heaven/</guid>
		<description><![CDATA[In this tutorial, we’ll learn how to seamlessly integrate WordPress/Turbocharged with Twitter.



There are two things you might want to do with your WordPress blog and Twitter:


You may want to display what you’ve been up to in the sidebar
You may want to inform your readership of new blog posts


Twitter enables both of them, through the Twitter [...]]]></description>
			<content:encoded><![CDATA[<p>In this tutorial, we’ll learn how to seamlessly integrate WordPress/Turbocharged with Twitter.</p>

<p><span id="more-69"/></p>

<p>There are two things you might want to do with your WordPress blog and Twitter:</p>

<ol>
<li>You may want to display what you’ve been up to in the sidebar</li>
<li>You may want to inform your readership of new blog posts</li>
</ol>

<p>Twitter enables both of them, through the <a href="http://turbochargedcms.com/wordpress-plugins/twitter-better/">Twitter Better</a> WordPress plugin.</p>

<p>Sure, you could already do this using other technologies such as e-mail and RSS.  But using Twitter for the job can be dramatically superior to alternatives like RSS feeds and mailing lists, because you get the advantage of push technology to mobile phones and instant messaging clients. And it’s instantaneus.</p>

<h2>Getting the plugin</h2>

<p>Before you use it, you need to <a href="http://turbochargedcms.com/wordpress-plugins/twitter-better/">download</a>, <a href="http://turbochargedcms.com/2007/04/how-to-install-a-wordpress-plugin/" title="How to install a WordPress plugin">install and activate</a> it.</p>

<p>If you’re using the latest version of <a href="http://turbochargedcms.com/">Turbocharged</a>, you’re in luck because you can skip this step: Turbocharged already integrates Twitter Better for your twitting pleasure :-).  In fact, we recommend you get Twitter Better this way — most Turbocharged editions let you have support and warranty.</p>

<h2>Maintaining your readership informed of events in your blog</h2>

<p>Twitter Better can update your (or your blog’s) status information every time you:</p>

<ul>
<li>start drafting a new article</li>
<li>publish said article</li>
<li>modify an article on your blog</li>
</ul>

<p>To do so:</p>

<ul>
<li>open up your WordPress/Turbocharged management console</li>
<li>go to Options -&gt; Twitter Better</li>
<li>fill up the user authentication form</li>
<li>customize how Twitter Better will act</li>
</ul>

<p>I sincerely suggest you create a separate Twitter account for your blog, because (understandably) not all of your readers will want to know your personal whereabouts.</p>

<p>That’s it.  Once you’ve done this, Twitter Better will start posting information about your blog on Twitter.</p>

<h2>Encouraging Twitters to follow your blog</h2>

<p>Believe it or not, this is the easiest part, and a nice enhancement to sport on your sidebar.  Just:</p>

<ol>
<li>go to your (or your blog’s) Twitter profile</li>
<li>view the source of that page, and look for a line like this: <code>&lt;link rel="alternate" type="application/rss+xml" title="Your blog (RSS)" href="http://twitter.com/statuses/user_timeline/774269.rss" /&gt;</code>.  Note the number besides the <code>.rss</code> text — this is the account number.</li>
<li>add a new text widget to your sidebar.</li>
<li>in the text box for the widget, place something like: <code>&lt;a href="http://twitter.com/friendhips/create/774269"&gt;Follow the updates on this blog.&lt;/a&gt;</code>.  Change the number to your (or your blog’s) own account number.</li>
</ol>

<p>Save and see the results.  Now, when Twitters click on that link, they’ll automatically start following you (or your blog).</p>

<h2>Displaying what you (or your friends, or your blog) have been up to</h2>

<p>If your blog theme has sidebar widgets support, you can display a sidebar widget with your Twitter updates.  Try this:</p>

<ol>
<li>ensure your sidebar widgets plugin is enabled</li>
<li>open up your WordPress/Turbocharged management console</li>
<li>go to Presentation -&gt; Sidebar widgets</li>
<li>drag one of the Twitter Better widgets from the bottom widget palette into one of your sidebars</li>
<li>click the option button in the widget, and type your user name; then customize the other options to your taste</li>
</ol>

<p>For this to work, your Twitter user must be configured as publicly viewable on Twitter.</p>

<p>Be forewarned: Twitter’s service fails from time to time.  This means that your activity may not be displayed all the time.  We’re working on a caching solution so this won’t be a problem in the course of a few days from now.</p>

<h2>That’s it</h2>

<p>Twitter is a powerful service, and one surely to be sold to the big boys for big bucks.  Now, with WordPress, you can exploit the service to your and your readers’ advantage.</p>

<p><em>And with <a href="http://turbochargedcms.com/">Turbocharged</a>, you get this and <a href="http://turbochargedcms.com/features/plugins/" title="Advanced functionality">a hundred plugins more</a>, with support and warranty.  <a href="http://turbochargedcms.com/purchase/">Get your copy today</a>!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://turbochargedcms.com/2007/04/wordpress-and-twitter-a-marriage-made-in-heaven/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to install a WordPress plugin</title>
		<link>http://turbochargedcms.com/2007/04/how-to-install-a-wordpress-plugin/</link>
		<comments>http://turbochargedcms.com/2007/04/how-to-install-a-wordpress-plugin/#comments</comments>
		<pubDate>Thu, 19 Apr 2007 20:04:25 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[Turbocharged and WordPress tutorials]]></category>

		<guid isPermaLink="false">http://turbochargedcms.com/2007/04/how-to-install-a-wordpress-plugin/</guid>
		<description><![CDATA[This tutorial will explain how to install a WordPress plugin you’ve downloaded from the Internet.  Believe it or not, it’s rather simple.



Remember the first time you uploaded WordPress to your Web host?  You may not remember, or you may have installed WordPress with the many one-click install Web hosting services.  We’ll explain [...]]]></description>
			<content:encoded><![CDATA[<p>This tutorial will explain how to install a WordPress plugin you’ve downloaded from the Internet.  Believe it or not, it’s rather simple.</p>

<p><span id="more-62"/></p>

<p>Remember the first time you uploaded WordPress to your Web host?  You may not remember, or you may have installed WordPress with the many one-click install Web hosting services.  We’ll explain it from zero.</p>

<h2>Uncompress the package you’ve downloaded</h2>

<p>Once you’ve downloaded the package, uncompress it to a folder (or your desktop) in your computer, making sure your compression program preserves the folder structure.</p>

<p>The uncompression may yield one of two results:</p>

<ol>
<li>a single file or a set of files; usually a bunch of PHP files</li>
<li>a new folder, with a set of files</li>
</ol>

<p>Keep that in mind.</p>

<h2>It’s all about FTP</h2>

<p>First, get an FTP client.  FTP stands for <em>File Transfer Protocol</em>, and it’s the standard way of copying files on the Internet.  You’ll be using this FTP client to navigate the folders of your Web host and to copy the files into the WordPress folder dedicated to the plugins.</p>

<p>Heck, you could use Windows’ Web Folders feature if you’re so inclined.  The examples used here show Konqueror, a very powerful network file manager that works on Linux, so don’t freak out if your computer looks a little different.</p>

<h2>Log in to your site</h2>

<p>Open your FTP client, and log in to your site.  The instructions to do so vary quite a bit from FTP client to FTP client, but you’ll have to supply your user name, your password, and the Internet address of your Web hosting where your WordPress installation is located.</p>

<h2>Navigate to the WordPress folder</h2>

<p>Depending on how your Web hosting has arranged the files on the remote server, the WordPress folder could be named <code>wordpress</code>, <code>public_html</code>, or <code>www</code>.  Locate it.  You’ll know you’ve found it when you find a file named <code>wp-config.php</code>, which is the WordPress configuration file.</p>

<p style="text-align: center"><a href="http://turbochargedcms.com/wp-content/uploads/2007/04/the-wordpress-folder.png" title="The WordPress folder" rel="lightbox"><img src="http://turbochargedcms.com/wp-content/uploads/2007/04/the-wordpress-folder.thumbnail.png" alt="The WordPress folder"/></a></p>

<h2>Navigate to the plugins folder</h2>

<p>Now that you’re on the WordPress folder, enter the <code>wp-content</code> folder.  Inside that folder, there’s a <code>plugins</code> folder — enter it as well.</p>

<p style="text-align: center">
<a href="http://turbochargedcms.com/wp-content/uploads/2007/04/the-wordpress-folder1.png" title="The plugins folder" rel="lightbox"><img src="http://turbochargedcms.com/wp-content/uploads/2007/04/the-wordpress-folder1.thumbnail.png" alt="The plugins folder"/></a>
</p>

<h2>Copy the files from the plugin</h2>

<p>Now, remember we asked if you uncompressed a bunch of files, or a directory with files in it?</p>

<ul>
<li>If you got a directory with files: copy the entire directory with the files inside it, as it was uncompressed, into the plugins folder</li>
<li>If you got a PHP file, or several ones, copy it to the plugins folder</li>
</ul>

<p>The important part to remember is: preserve the structure which was used to distribute the plugin.</p>

<h2>Final touches: activate your new plugin</h2>

<div style="float: right"><a href="http://turbochargedcms.com/wp-content/uploads/2007/04/wordpress-admin-panel-plugins-screen.png" title="WordPress admin panel, plugins screen" rel="lightbox"><img src="http://turbochargedcms.com/wp-content/uploads/2007/04/wordpress-admin-panel-plugins-screen.thumbnail.png" alt="WordPress admin panel, plugins screen" style="border: none"/></a></div>

<p>Unless there was a problem with the process outlined above, now you should:</p>

<ul>
<li>Log in to your WordPress management console</li>
<li>Open the Plugins panel</li>
<li>Enable the plugin, which should now be listed there</li>
</ul>

<p>If you successfully completed the steps outlined here, you’re now enjoying your plugin.  Congratulations!</p>

<h2>Try Turbocharged — it bundles 100 plugins in a single installable package</h2>

<p>Although these installation instructions apply to WordPress, we recommend you get <a href="http://turbochargedcms.com/">Turbocharged</a> for the maximum WordPress experience.  Instead of installing plugins one by one, <em>you install it once, and you get 100 plugins </em>for your WordPress blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://turbochargedcms.com/2007/04/how-to-install-a-wordpress-plugin/feed/</wfw:commentRss>
		</item>
		<item>
		<title>What WordPress 2.1.4 (or 2.2) has in store for us</title>
		<link>http://turbochargedcms.com/2007/04/what-wordpress-214-or-22-has-in-store-for-us/</link>
		<comments>http://turbochargedcms.com/2007/04/what-wordpress-214-or-22-has-in-store-for-us/#comments</comments>
		<pubDate>Mon, 16 Apr 2007 14:57:59 +0000</pubDate>
		<dc:creator>Rudd-O</dc:creator>
		
		<category><![CDATA[WordPress news]]></category>

		<guid isPermaLink="false">http://turbochargedcms.com/2007/04/what-wordpress-214-or-22-has-in-store-for-us/</guid>
		<description><![CDATA[Curious about what’s going in the next version of WordPress?  You could wade their Trac online coordination system.  But I’ve attempted to summarize the highlights in the next version of WordPress before it gets released.



The WordPress team has been hard at work, squashing bugs and introducing new and optimized code in the as-yet-unreleased [...]]]></description>
			<content:encoded><![CDATA[<p>Curious about what’s going in the next version of WordPress?  You could <a href="http://trac.wordpress.org/timeline?from=04%2F16%2F07&amp;daysback=30&amp;changeset=on&amp;update=Update">wade their Trac online coordination system</a>.  But I’ve attempted to summarize the highlights in the next version of WordPress before it gets released.</p>

<p><span id="more-58"/></p>

<p>The WordPress team has been hard at work, squashing bugs and introducing new and optimized code in the as-yet-unreleased next version of WordPress.  Let’s discuss some of what’s going to be in the next version:</p>

<ol><li>Category listing speedups.  For an example, see <a href="http://trac.wordpress.org/ticket/3985">#3985</a></li>
<li>New hooks.  For example, <a href="http://trac.wordpress.org/changeset/5181">it’s possible for themes to add more XHTML namespaces now</a>.</li>
<li>Style optimizations.  See <a href="http://trac.wordpress.org/ticket/4068">#4068.</a></li>
<li>Right-to-left fixes all over the place.  Check  <a href="http://trac.wordpress.org/ticket/4068">#4068 out.</a></li>
<li>More AJAX to pretty up <a href="http://trac.wordpress.org/ticket/3922">the management panel.</a></li>
<li>Tags support!  Honestly, I use my categories for tagging, so I don’t see how I could take advantage of the tagging support.  Yet. <a href="http://trac.wordpress.org/changeset/5234">It will have Tag Cloud support</a>.  It’ll have Tag Clouds.  For those using the Ultimate Tag Warrior, there’s an <a href="http://trac.wordpress.org/changeset/5216"><span class="time">importer.</span></a></li>
<li>Better <a href="http://trac.wordpress.org/changeset/5204">Importing.</a> <a href="http://trac.wordpress.org/changeset/5208"><span class="time">And exporting</span>.</a></li>
<li>Post editing fixes.  Yes, the <code>wp_autop</code> function is getting improved.</li>
<li>More robustness.  If you activate a nasty plugin, <a href="http://trac.wordpress.org/changeset/5239"><span class="time">WordPress won’t die now.</span></a></li>
</ol>

<p>So far, so good.  There are a lot of minor changes and very small bugs that have been killed.  This next version of WordPress promises to be the best WordPress ever.</p>

<p>And, of course, once it’s released, <a href="http://turbochargedcms.com/">Turbocharged</a> will be upgraded very shortly afterwards.  if you’re a Turbocharged customer, you will be able to download the latest upgrade right away.</p>

<p>That’s it for today.  Have a great day!</p>
]]></content:encoded>
			<wfw:commentRss>http://turbochargedcms.com/2007/04/what-wordpress-214-or-22-has-in-store-for-us/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
