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

<channel>
	<title>Sivel.net &#187; Technology</title>
	<atom:link href="http://sivel.net/category/technology/feed/" rel="self" type="application/rss+xml" />
	<link>http://sivel.net</link>
	<description>Throwing Hot Coals</description>
	<lastBuildDate>Tue, 17 Jan 2012 22:32:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4-alpha-19719</generator>
		<item>
		<title>WordPress Caching Comparisons Part 2</title>
		<link>http://sivel.net/2011/12/wordpress-caching-comparisons-part-2/</link>
		<comments>http://sivel.net/2011/12/wordpress-caching-comparisons-part-2/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 16:12:04 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[CoolStuff]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://sivel.net/?p=1078</guid>
		<description><![CDATA[This post has been on my mind for quite some time now, ever since I wrote Part 1 over 1 year ago. Part 1 only really addressed opcode and Object caching and didn&#8217;t really touch page caching. In this post &#8230; <a href="http://sivel.net/2011/12/wordpress-caching-comparisons-part-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This post has been on my mind for quite some time now, ever since I wrote Part 1 over 1 year ago.</p>
<p>Part 1 only really addressed opcode <a class="simple-footnote" title="opcode: A technique of optimizing the PHP code and caching the bytecode compiled version of the code, to reduce the compilation time incurred during PHP code execution" id="return-note-1078-1" href="#note-1078-1"><sup>1</sup></a> and Object caching <a class="simple-footnote" title="Object Caching: An in memory key-value storage for arbitrary data, to reduce processing, and storage of external calls to speed up retrieval and display of information" id="return-note-1078-2" href="#note-1078-2"><sup>2</sup></a> and didn&#8217;t really touch page caching <a class="simple-footnote" title="Page Caching: Full caching of HTML output for web pages" id="return-note-1078-3" href="#note-1078-3"><sup>3</sup></a>. In this post I have revisited all tests and added in comparisons of using both the <a href="http://wordpress.org/extend/plugins/apc/">APC Object Cache</a> + <a href="http://wordpress.org/extend/plugins/batcache/">Batcache</a> plugins as well as using the <a href="http://wordpress.org/extend/plugins/w3-total-cache/">W3 Total Cache</a> plugin.</p>
<h3>Tests</h3>
<ul>
<li>No opcode, no caching</li>
<li>APC opcode, no caching</li>
<li>APC opcode, APC object caching plugin</li>
<li>APC opcode, W3 Total Cache APC object caching</li>
<li>APC opcode, APC object caching plugin, Batcache page caching</li>
<li>APC opcode, W3 Total Cache APC object and page caching</li>
</ul>
<h3>Comparison Stats</h3>
<ul>
<li>PHP generation time <a class="simple-footnote" title="PHP generation time: The amount of time taken to compile and execute the PHP code into the resulting HTML" id="return-note-1078-4" href="#note-1078-4"><sup>4</sup></a></li>
<li>Number of include/include_once/require/require_once calls <a class="simple-footnote" title="Include/Require Count: The number of calls to the PHP include, include_once, require and require_once functions, which are used to load a separate file" id="return-note-1078-5" href="#note-1078-5"><sup>5</sup></a></li>
<li>Number of stat() calls per dtruss/strace <a class="simple-footnote" title="stat() call count: The number of unix system calls that return information about files, directories and other filesystem related objects." id="return-note-1078-6" href="#note-1078-6"><sup>6</sup></a></li>
<li>cURL time to start transfer <a class="simple-footnote" title="Start Transfer Time: The amount of time between the request from the client to the server, and when the server begins returning data to the client" id="return-note-1078-7" href="#note-1078-7"><sup>7</sup></a></li>
<li>Apache Bench (ab) tests for concurrency <a class="simple-footnote" title="Concurrency: The number of concurrent client requests to the server" id="return-note-1078-8" href="#note-1078-8"><sup>8</sup></a> and requests per second</li>
</ul>
<p>For the above stats gathering, with PHP generation time and cURL time to start transfer, 102 sets were collected, the first 2 were dropped due to cache priming, the remaining 100 were used, and averaged. With the Apache Bench tests, 12 sets were used, dropping the highest and lowest value, and averaging across the remaining 10. Include and stat() counts were gathered over 5 sets not requiring averaging as they were the same between runs.</p>
<p>To find the optimal concurrency and req/s for Apache Bench, I performed manual testing, visually inspecting the results until I reached what I classified as a &#8220;sweet spot&#8221;. Using the &#8220;sweet spot&#8221; stats, I performed additional sets to gather the averages for requests per second.</p>
<h3>The Setup</h3>
<ul>
<li>256MB Rackspace Cloud Server</li>
<li>Ubuntu 11.04 amd64</li>
<li>Apache 2.2.17 &#8211; Default Ubuntu Install, no modifications, default document root located at /var/www</li>
<li>PHP 5.3.5 (mod_php) &#8211; Default Ubuntu Install, no modifications</li>
<li>PHP APC 3.1.3p1 &#8211; Default Ubuntu Install, no modifications</li>
<li>MySQL 5.1.54 &#8211; Default Ubuntu Install, no modifications</li>
<li>WordPress 3.3-beta4-r19470 &#8211; Default Install, requests made to the &#8220;home&#8221; page</li>
<li>APC Object Cache trunk version</li>
<li>Batcache trunk version</li>
<li>W3 Total Cache 0.9.2.4</li>
</ul>
<p>I have not compared static file caching yet and hope to compare W3 Total Cache and WP Super Cache in the future.  In this comparison I am mainly focusing on opcode, object caching and page caching.</p>
<p>I am going to try to keep this comparison about the stats only, and not make this a critique or review of the plugin, although in some cases this will not be possible.</p>
<h3>Test Data</h3>
<p><strong>No opcode and no caching:</strong><br />
PHP Generation Time: 0.13787 seconds<br />
Number of includes: 80<br />
Number of stat calls: 266<br />
cURL time to start transfer: 0.15463 seconds<br />
Apache Bench Concurrency: 15<br />
Apache Bench Requests Per Second: 19.1483 req/s</p>
<p><strong>APC opcode and no caching:</strong><br />
PHP Generation Time: 0.05088 seconds<br />
Number of includes: 80<br />
Number of stat calls: 148<br />
cURL time to start transfer: 0.05673 seconds<br />
Apache Bench Concurrency: 60<br />
Apache Bench Requests Per Second: 68.2636 req/s</p>
<p><strong>APC opcode and APC Object caching:</strong><br />
PHP Generation Time: 0.03407 seconds<br />
Number of includes: 81<br />
Number of stat calls: 148<br />
cURL time to start transfer: 0.03975 seconds<br />
Apache Bench Concurrency: 260<br />
Apache Bench Requests Per Second: 77.7214 req/s</p>
<p><strong>APC opcode and W3TC APC Object caching:</strong><br />
PHP Generation Time: 0.03993 seconds<br />
Number of includes: 102<br />
Number of stat calls: 285<br />
cURL time to start transfer: 0.04591 seconds<br />
Apache Bench Concurrency: 200<br />
Apache Bench Requests Per Second: 67.581 req/s</p>
<p><strong>APC opcode and APC Object and Page caching with Batcache:</strong><br />
PHP Generation Time: N/A<br />
Number of includes: Unable to collect<br />
Number of stat calls: 41<br />
cURL time to start transfer: 0.00316 seconds<br />
Apache Bench Concurrency: 600<br />
Apache Bench Requests Per Second: 147.2156 req/s</p>
<p><strong>APC opcode and W3TC APC Object and Page caching:</strong><br />
PHP Generation Time: N/A<br />
Number of includes: Unable to collect<br />
Number of stat calls: 87<br />
cURL time to start transfer: 0.00625 seconds<br />
Apache Bench Concurrency: 500<br />
Apache Bench Requests Per Second: 147.8425 req/s</p>
<h3>Conclusions</h3>
<p>I can state the following about just enabling APC in PHP, if you do nothing else, you should at least do this:</p>
<ol>
<li>170% PHP generation time improvement by enabling APC opcode caching</li>
<li>172% Time to start transfer improvement by enabling APC opcode caching</li>
<li>300% concurrency improvement by enabling APC opcode caching</li>
<li>256% requests per second improvement by enabling APC opcode caching</li>
</ol>
<p>I see performance improvements using both APC+Batcache and W3 Total Cache. However, in all tests, APC+Batcache seems to outperform W3 Total Cache, in PHP generation time, number of includes, number of filesystem stat() calls, time to start transfer, number of concurrent requests and requests per second with relation to concurrency.</p>
<p>I was able to push APC+Batcache to 700 concurrent requests, but req/s dropped. W3TC capped out at 500 concurrent requests, and would go no further, however 500 requests per second provided the highest req/s for W3TC.</p>
<p>W3TC does provide a lot of additional functionality to help reduce load on the server, such as tweaking client side caching, and using a CDN, where APC+Batcache does not, although there are small unitasking plugins that can add the missing functionality for you such as:</p>
<ul>
<li><a href="http://wordpress.org/extend/plugins/wp-minify/">WP Minify</a></li>
<li><a href="http://wordpress.org/extend/plugins/cdn-tools/">CDN Tools</a></li>
<li><a href="http://wordpress.org/extend/plugins/use-google-libraries/">Use Google Libraries</a></li>
</ul>
<p>APC+Batcache consists of adding 3 new files, and no new directories. The W3TC download consists of 60 new directories and 351 files. The directory listing level for W3TC being as deep as it is, 5 levels deep past the directory for the plugin itself, causes a significant increase in filesystem stat() commands.</p>
<p>Most shared hosting providers as well as many multiserver environments will often host their web roots on NFS, and the more filesystem stat() calls, the worse performance you will see, especially under higher load.</p>
<p>Something else to note, is a lot can be done on the server to also improve performance. You can also use caching applications that logically sit in front of the webserver to cache, instead of using caching plugins, which will also improve performance. There are probably eleventy billion ways to improve performance, so if in doubt, consult an expert to help.</p>
<div class="simple-footnotes"><p class="notes">Notes:</p><ol><li id="note-1078-1">opcode: A technique of optimizing the PHP code and caching the bytecode compiled version of the code, to reduce the compilation time incurred during PHP code execution <a href="#return-note-1078-1">&#8617;</a></li><li id="note-1078-2">Object Caching: An in memory key-value storage for arbitrary data, to reduce processing, and storage of external calls to speed up retrieval and display of information <a href="#return-note-1078-2">&#8617;</a></li><li id="note-1078-3">Page Caching: Full caching of HTML output for web pages <a href="#return-note-1078-3">&#8617;</a></li><li id="note-1078-4">PHP generation time: The amount of time taken to compile and execute the PHP code into the resulting HTML <a href="#return-note-1078-4">&#8617;</a></li><li id="note-1078-5">Include/Require Count: The number of calls to the PHP include, include_once, require and require_once functions, which are used to load a separate file <a href="#return-note-1078-5">&#8617;</a></li><li id="note-1078-6">stat() call count: The number of unix system calls that return information about files, directories and other filesystem related objects. <a href="#return-note-1078-6">&#8617;</a></li><li id="note-1078-7">Start Transfer Time: The amount of time between the request from the client to the server, and when the server begins returning data to the client <a href="#return-note-1078-7">&#8617;</a></li><li id="note-1078-8">Concurrency: The number of concurrent client requests to the server <a href="#return-note-1078-8">&#8617;</a></li></ol></div>]]></content:encoded>
			<wfw:commentRss>http://sivel.net/2011/12/wordpress-caching-comparisons-part-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WordPress Caching Comparisons Part 1</title>
		<link>http://sivel.net/2010/11/wordpress-caching-comparisons-part-1/</link>
		<comments>http://sivel.net/2010/11/wordpress-caching-comparisons-part-1/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 16:06:56 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[CoolStuff]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://sivel.net/?p=1008</guid>
		<description><![CDATA[For some time now I have been wanting to write an up to date XCache object cache plugin for WordPress. Around 4 years ago I did an opcode caching comparison between APC, XCache and eAccelerator. My results had shown that &#8230; <a href="http://sivel.net/2010/11/wordpress-caching-comparisons-part-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For some time now I have been wanting to write an up to date XCache object cache plugin for WordPress.  Around 4 years ago I did an opcode caching comparison between APC, XCache and eAccelerator.  My results had shown that at the time that XCache was the fastest of the 3.  Unfortunately I didn&#8217;t think to keep that data around.  As a result of these tests I had standardized the environment I was working on with XCache, and have never thought twice about it.  Since I use XCache for opcode caching everywhere, it seemed like writing such an object cache plugin would be beneficial.  After writing the plugin I figured it best to test performance, comparing it to the Memcached object cache and the APC Object cache.  I tweeted a lot during my initial testing, and got an overwhelming response to write up a post, and here we are&#8230;</p>
<p>I&#8217;ll try to make this comparison comprehensive, but it can be a little difficult to always cover everything.</p>
<p>The test environment:</p>
<ul>
<li>Toshiba T135-S1310</li>
<li>Intel SU4100 64bit Dual-Core 1.3GHz</li>
<li>4GB DDR3 Memory</li>
<li>Ubuntu 10.10 64bit</li>
<li>Apache 2.2.16</li>
<li>PHP 5.3.3</li>
<li>PHP XCache 1.3.0</li>
<li>PHP APC 3.1.3p1</li>
<li>Memcached 1.4.5</li>
<li>Pecl Memcached 3.0.4</li>
<li>MySQL 5.1.49 No caching configured</li>
<li>cURL 7.21.0</li>
<li>WordPress 3.1-alpha (r16527) Default install with Twenty Ten and no plugins other than the one I mention below</li>
</ul>
<p>The times are based off of the standard timer_stop() code often found in the footer.php of themes, in this case added using the wp_footer filter through a mu (must use) plugin:</p>
<pre>
<code>&lt;?php
add_action(&#039;wp_footer&#039;, &#039;print_queries&#039;, 1000);
function print_queries() {
?&gt;
&lt;!-- &lt;?php echo get_num_queries(); ?&gt; queries. &lt;?php timer_stop(1); ?&gt; seconds. --&gt;
&lt;?php
}</code>
</pre>
<p>cURL was used to make the HTTP requests and grab the value from the comment created by the above code:</p>
<pre>
<code>for (( c=1; c&lt;=101; c++ )); do curl -s http://wordpress.trunk/ | grep &#039;&lt;/body&gt;&#039; -B 1 | head -1 | awk -F&quot;queries. &quot; &#039;{print $2}&#039; | awk -F&quot; seconds&quot; &#039;{print $1}&#039;; done;</code>
</pre>
<p>In each data set I gather 101 results and omit result 1 so that we only have results after the initial cache is generated.  The tests are only performed on the home page.</p>
<p>The tests:</p>
<ol>
<li>No Object or Opcode Cache</li>
<li>Memcached Object Cache with no Opcode Cache</li>
<li>Memcached Object Cache with APC Opcode Cache</li>
<li>Memcached Object Cache with XCache Opcode Cache</li>
<li>APC Object and Opcode Cache</li>
<li>APC Opcode Cache with no Object Cache</li>
<li>XCache Object and Opcode Cache</li>
<li>XCache Opcode Cache with no Object Cache</li>
</ol>
<p>I didn&#8217;t evaluate eAccelerator due to the fact that it isn&#8217;t available in the Ubuntu repositories and I did not feel likely compiling&#8230;</p>
<p>The results (in seconds):</p>
<p><iframe width='100%' height='157' frameborder='0' src='https://spreadsheets.google.com/pub?key=0AlRMJ5h6yNYAdGV5UHFmdjNKLTBEOE9IMVktVXcxU1E&#038;hl=en&#038;output=html&#038;widget=true'></iframe></p>
<p>For a larger view of the spreadsheet above or if you cannot see it, take a look <a href="https://spreadsheets.google.com/pub?key=0AlRMJ5h6yNYAdGV5UHFmdjNKLTBEOE9IMVktVXcxU1E&#038;hl=en&#038;output=html">here</a>.</p>
<p>These results are quite interesting and actually shocked me a little bit.  The first thing that I found when developing an up to date XCache Object Cache plugin was that it can&#8217;t handle objects!  So the plugin has to serialize all data when setting, and unserialize when retrieving.  This of course is going to add overhead to every operation.</p>
<p>When I first tested the Memcached Object Cache I was surprised at how little it improved speed.  It took me about an hour to realize that the comparison of just using Memcached was unfair as it didn&#8217;t include any Opcode caching, adding an Opcode cache brings it more in line with what I would expect.</p>
<p>Using an opcode cache improves performance by over 200% on a stock WordPress install without using any object caching.  While APC and XCache provided similar results, my tests still show XCache to be ever so slightly faster as an opcode cache.</p>
<p>Where we see the biggest difference between the 3 of these caches when using APC for both opcode and object caching.</p>
<p>Assuming we are using both Opcode and Object caching here are the results from best to worst:</p>
<ol>
<li>APC</li>
<li>Memcached (With either APC or XCache)</li>
<li>XCache</li>
</ol>
<p>At this point the single largest failure of XCache is it&#8217;s inability to store objects, so I am pretty much planning on dropping XCache on my servers in favor of APC, which will be included with PHP as of PHP 6.  I would likely still see marginal speed improvements using XCache on sites that I am not using XCache for an object cache, but on those that I am I&#8217;ll get much improved performance off of APC or Memcached.</p>
<p>Now why would I want to use APC over Memcached or vice versa?  Well, the one thing that Memcached provides that APC doesn&#8217;t is the ability to share the cache between servers.  In a load balanced multi web server environment, using APC you would be duplicating the cache on all of the servers as APC provides no way to share this data or allow for remote connections.  Memcached however, being a PHP independent daemon can be used for pooling resources and allowing remote connections.  You also can get more bang for your buck with Memcached in a load balanced multi server environment because of it&#8217;s pooling capability.  The pooling capability allows you to dedicate say 128MB of RAM to each memcached instance and when pooled together will give you 128MB x N where N is the number of servers in the pool.  Anyway, I digress&#8230;</p>
<p>In the end, if you have WordPress hosted on a single web server, APC is the way to go.  If you are in a multi web server environment, Memcached is the way to go, but remember to install an Opcode cache as well.  If you are crazy and just want to use more CPU cycles, XCache is the way to go.</p>
<p>Some of you may be thinking &#8220;why would I need an object cache in addition opcode caching, if the results are similar?&#8221;  Well, under higher load an object cache will respond better than MySQL, even with MySQL caching.  In addition, other factors with MySQL can come into play, such as connectivity to the MySQL server.  It may be on another server, with not enough memory, slow disks, with an overloaded network, which decreases performance.  Any time that an update query is run, MySQL will flush the whole cache.  Another benefit, is we are rarely, if ever, going to use the data exactly as it is given to us from the MySQL query.  In the end we are going to process the data before displaying, an object cache allows you to store the processed data, rather than the raw data from the query saving CPU cycles required for the processing.  Individually these items may not consume much time, but added together and in a more efficient delivery system, this can make a huge difference.</p>
<p>Now for any of you who go run out and install Memcached, if you install version 1.4.x make sure you get at least pecl memcached 2.2.6 or 3.0.4.  Memcached made a change that breaks deletes with earlier pecl memcached versions, which adversely affects WordPress.</p>
<p>A few additional things that I have been asked to talk about are using caching with a WordPress Network, output caching with Batcache and query counts.  I promise to get to those, but I just wanted to get this out sooner rather than later.</p>
<p>Yo Dawg! We heard you like caching so we put a cache in your cache, so you can optimize while you optimize&#8230;Sorry couldn&#8217;t resist.</p>
]]></content:encoded>
			<wfw:commentRss>http://sivel.net/2010/11/wordpress-caching-comparisons-part-1/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Happy π Day</title>
		<link>http://sivel.net/2010/03/happy-pi-day/</link>
		<comments>http://sivel.net/2010/03/happy-pi-day/#comments</comments>
		<pubDate>Sun, 14 Mar 2010 13:36:31 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Astronomy]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Holidays]]></category>
		<category><![CDATA[Movies]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[π]]></category>

		<guid isPermaLink="false">http://sivel.net/?p=936</guid>
		<description><![CDATA[I&#8217;ve gotten into this bad habit of not writing about anything except WordPress on this site. It&#8217;s quite sad in a way that I have this great publishing platform and I only write about WordPress, and I do so very &#8230; <a href="http://sivel.net/2010/03/happy-pi-day/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve gotten into this bad habit of not writing about anything except WordPress on this site.  It&#8217;s quite sad in a way that I have this great publishing platform and I only write about WordPress, and I do so very little.</p>
<p>Many years ago, I don&#8217;t remember how many exactly, I was challenged by my High School math teacher, that if I could memorize all the digits of π that were on the poster (86) above the white board, that I would get an &#8216;A&#8217; on the final without having to take it.  I spent a week or two, I even wrote a program for the <a href="http://en.wikipedia.org/wiki/TI-83_series">TI-83</a> to help me learn it.  In the end I learned somewhere around 280 digits of π and got that &#8216;A&#8217;.</p>
<p>From then until now, I have always held a special place in my heart for this number of numbers.  I own the movie <a href="http://en.wikipedia.org/wiki/Pi_%28film%29">π</a>, I own the book <a href="http://books.google.com/books?id=TB6jzz3ZDTEC&#038;lpg=PP1&#038;ots=3V9sqsTh4Q&#038;dq=a%20history%20of%20pi&#038;pg=PP1#v=onepage&#038;q=&#038;f=false">a history of π</a> and I have spent the last eleven to twelve years incredibly interested in this number.  Back in 1998 or so I actually ran a site dedicated to π on geocities that is now long gone and forgotten.</p>
<p>So in keeping with the color scheme of that old site I used to run, which I now realize was very Matrix-esque, have a happy <a href="http://en.wikipedia.org/wiki/Pi_Day">π day</a>!</p>
<div id="attachment_937" class="wp-caption alignnone" style="width: 510px"><img src="http://cache.sivel.net/blog/wp-content/uploads/2010/03/pi.png" alt="π" title="π" width="500" height="480" class="size-full wp-image-937" /><p class="wp-caption-text">Happy π day!</p></div>
<p>PS: From my days as an astrophysics major, I was taught that really only the first 42 digits of π are useful for computational purposes.  But what fun is that!?  Keep learning and cranking out those digits of π!</p>
]]></content:encoded>
			<wfw:commentRss>http://sivel.net/2010/03/happy-pi-day/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Write Good Plug-ins and Get Involved in WordPress Development</title>
		<link>http://sivel.net/2009/11/write-good-plug-ins-and-get-involved-in-wordpress-development/</link>
		<comments>http://sivel.net/2009/11/write-good-plug-ins-and-get-involved-in-wordpress-development/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 13:52:30 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Plugins]]></category>
		<category><![CDATA[Talks]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[WordCamp]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://sivel.net/?p=855</guid>
		<description><![CDATA[This is cross posted from the WordCamp NYC site. This post will show up there at some point today. Howdy, I&#8217;m Matt Martz. The majority of you probably know me as &#8216;sivel&#8217; and I will be doing two separate talks &#8230; <a href="http://sivel.net/2009/11/write-good-plug-ins-and-get-involved-in-wordpress-development/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This is cross posted from the <a href="http://2009.newyork.wordcamp.org/">WordCamp NYC</a> site.  This post will show up there at some point today.</p>
<p>Howdy, I&#8217;m Matt Martz.  The majority of you probably know me as &#8216;sivel&#8217; and I will be doing two separate talks at WordCamp NYC on Saturday, one in the Advanced Plug-in Dev Track and one in Beginners Plug-in Dev Track.  The two topics I will be covering are Intermediate Plug-in Development Techniques and Writing Your First Core Patch.  I will also be spending as much time as I can in the &#8216;Hacker Room&#8217; helping people test and write patches for the upcoming WordPress 2.9.  If time permits I&#8217;ll try do spend some time at the Genius Bar as well.</p>
<h3>Giveaways</h3>
<p>In both of my sessions I will be doing Twitter based giveaways.  I will be giving away 5 items to randomly picked people who attend my sessions.  If you want to find out what I am giving away you will have to come my sessions.  Winners will be picked automatically at the end of each session using a WordPress plug-in I wrote specially for the occasion.</p>
<h3>Intermediate Plug-in Development Techniques</h3>
<p>We all strive to write good plug-ins.  Plug-ins that not only function well, but plug-ins that have sexy code and use the WordPress APIs whenever possible for tight integration into core.  I&#8217;ll go over some of the techniques which I believe will help take your plug-ins to that next level.  Techniques will include:</p>
<ul>
<li>Splitting Plug-ins into Multiple Files</li>
<li>Tips on When to Load</li>
<li>Using Classes</li>
<li>Localization</li>
<li>Ajax</li>
<li>If time permits I will try to touch base on a few other items</li>
</ul>
<h3>Writing Your First Core Patch</h3>
<p>There are a lot of people out there that I see every day saying they found a bug or want a feature, but in the end never do anything about it.  I&#8217;ll go over testing to verify the bug, getting assistance from the community, using the WordPress provided resources, explaining Trac and ticket fields and if time permits giving a few demos for actually creating that patch.</p>
]]></content:encoded>
			<wfw:commentRss>http://sivel.net/2009/11/write-good-plug-ins-and-get-involved-in-wordpress-development/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Server Troubles</title>
		<link>http://sivel.net/2009/03/server-troubles/</link>
		<comments>http://sivel.net/2009/03/server-troubles/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 13:00:14 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Asides]]></category>
		<category><![CDATA[BullShit]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://sivel.net/?p=548</guid>
		<description><![CDATA[Around 10PM EST last night (March 11, 2009) the server that hosts all of the sivel.net domains and FreeMyFeed went off line due to reasons unknown at this time. As of 8:40AM EST today (March 12, 2009) all sites and &#8230; <a href="http://sivel.net/2009/03/server-troubles/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Around 10PM EST last night (March 11, 2009) the server that hosts all of the sivel.net domains and <a href="http://freemyfeed.com/">FreeMyFeed</a> went off line due to reasons unknown at this time.  As of 8:40AM EST today (March 12, 2009) all sites and services are back up and running.  Apologies for the down time.</p>
]]></content:encoded>
			<wfw:commentRss>http://sivel.net/2009/03/server-troubles/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fast WordPress Function and Template Tag Lookups</title>
		<link>http://sivel.net/2009/03/fast-wordpress-function-and-template-tag-lookups/</link>
		<comments>http://sivel.net/2009/03/fast-wordpress-function-and-template-tag-lookups/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 12:04:18 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[CoolStuff]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://sivel.net/?p=512</guid>
		<description><![CDATA[If you are like me, then you are often referring to the function and template tag documentation on the WordPress Codex. My friend, Andy Stratton, got tired of having to open google, typing in the function name and then clicking &#8230; <a href="http://sivel.net/2009/03/fast-wordpress-function-and-template-tag-lookups/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you are like me, then you are often referring to the function and template tag documentation on the <a href="http://codex.wordpress.org/">WordPress Codex</a>.  My friend, <a href="http://theandystratton.com">Andy Stratton</a>, got tired of having to open google, typing in the function name and then clicking on the link to the codex returned in the search results.  To make his life easier he wrote <a href="http://wplookup.com">WPLookup</a>.  WPLookup gives you a simple search box that will redirect you to the documentation for the function or if it doesn&#8217;t exist, redirect you to the <a href="http://wordpress.org/search">WordPress.org search</a> where you can see documents containing the function or text you are looking for. </p>
<p>To make the service even better you can integrate it into your web browsers search bar for even faster lookups.</p>
<p>I have taken his service one step further and written an IRC bot that is currelty sitting in the <a href="irc://irc.freenode.net/wordpress">WordPress IRC Channel</a>.  To use this bot type something in the form of <code>.codex get_pages</code> and it will query WPLookup and return the resulting URL back to the channel.</p>
<p>See the following links for his release announcements about this new service:</p>
<ol>
<li><a href="http://theandystratton.com/2009/find-wordpress-function-and-template-tag-documentation-fast/">Find WordPress Function and Template Tag Documentation &#8211; Fast</a></li>
<li><a href="http://theandystratton.com/2009/new-wplookup-features-set-browser-search/">New WPLookup Features &#8211; Set WPLookup as a browser search engine</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://sivel.net/2009/03/fast-wordpress-function-and-template-tag-lookups/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 2.7 Released</title>
		<link>http://sivel.net/2008/12/wordpress-27-released/</link>
		<comments>http://sivel.net/2008/12/wordpress-27-released/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 02:25:54 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Asides]]></category>
		<category><![CDATA[CoolStuff]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://sivel.net/?p=370</guid>
		<description><![CDATA[WordPress 2.7 has been released! No blog post yet from Automattic on the WordPress blog yet, but should be soon.]]></description>
			<content:encoded><![CDATA[<p><a href="http://wordpress.org">WordPress</a> 2.7 has been released!  No blog post yet from <a href="http://automattic.com">Automattic</a> on the WordPress <a href="http://en.blog.wordpress.com/">blog</a> yet, but should be soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://sivel.net/2008/12/wordpress-27-released/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Themes Added to Gmail</title>
		<link>http://sivel.net/2008/11/themes-added-to-gmail/</link>
		<comments>http://sivel.net/2008/11/themes-added-to-gmail/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 22:02:52 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Asides]]></category>
		<category><![CDATA[CoolStuff]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://sivel.net/?p=366</guid>
		<description><![CDATA[I just logged into Gmail for the eight thousandth time today and just got a notice that Google had added themes to the Gmail settings. The Gmail Blog has some more information about this as well as screenshots of the &#8230; <a href="http://sivel.net/2008/11/themes-added-to-gmail/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I just logged into Gmail for the eight thousandth time today and just got a notice that Google had added themes to the Gmail settings.  The <a href="http://gmailblog.blogspot.com/2008/11/spice-up-your-inbox-with-colors-and.html">Gmail Blog</a> has some more information about this as well as screenshots of the various themes.</p>
]]></content:encoded>
			<wfw:commentRss>http://sivel.net/2008/11/themes-added-to-gmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache to nginx in 90 seconds</title>
		<link>http://sivel.net/2008/09/apache-to-nginx/</link>
		<comments>http://sivel.net/2008/09/apache-to-nginx/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 14:25:24 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[CoolStuff]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://sivel.net/?p=224</guid>
		<description><![CDATA[I spent about 30 minutes last night and switched all of my personal sites over to nginx, including the one you are on now and FreeMyFeed. Okay, so I know 30 minutes does not equal 90 seconds, but the title &#8230; <a href="http://sivel.net/2008/09/apache-to-nginx/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I spent about 30 minutes last night and switched all of my personal sites over to nginx, including the one you are on now and <a href="http://freemyfeed.com/">FreeMyFeed</a>.  Okay, so I know 30 minutes does not equal 90 seconds, but the title sounded more catching.  The configuration for a secured, working nginx instance is quite small.  On top of that, configuring virtual hosts is really easy.</p>
<p>The largest amount of time it took to get this finished was recreating the rewrite rules for <a href="http://www.zenphoto.org/">Zenphoto</a>.  The rewrite rules can be found <a href="http://cdn.sivel.net/z/e/zenphoto_nginx_rewrites.txt">here</a>.  I haven&#8217;t tested all of the rewrite rules yet, but from quickly browsing through my <a href="http://gallery.sivel.net/">gallery</a> everything appears to be working well.  Keep in mind that these rewrite rules were designed for a site where Zenphoto lives in the root.  If it lives in a subfolder the rewrite rules will need to be modified accordingly.  I can probably help if you ask nicely.</p>
<p>I have also moved over numerous WordPress sites to nginx.  I won&#8217;t post their rewrite configurations here because you can find them easily using Google.</p>
<p>You can find the nginx rpms for EL4/EL5 in the Fedora Project&#8217;s <a href="http://fedoraproject.org/wiki/EPEL">EPEL</a> repo.</p>
<p>If you have any nginx related configuration questions feel free to ask, I&#8217;m getting pretty familiar with the app.</p>
]]></content:encoded>
			<wfw:commentRss>http://sivel.net/2008/09/apache-to-nginx/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>XCache Admin Cannot Login When Using Apache and mod_fcgid</title>
		<link>http://sivel.net/2008/08/xcache-admin-mod_fcgid/</link>
		<comments>http://sivel.net/2008/08/xcache-admin-mod_fcgid/#comments</comments>
		<pubDate>Fri, 22 Aug 2008 19:22:53 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://sivel.net/?p=143</guid>
		<description><![CDATA[I have been helping a friend setup a dedicated server to host his clients sites on and wanted to make things as streamlined and as easy as possible. To do so I installed Apache 2.2, PHP5, XCache and mod_fcgid. I &#8230; <a href="http://sivel.net/2008/08/xcache-admin-mod_fcgid/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I have been helping a friend setup a dedicated server to host his clients sites on and wanted to make things as streamlined and as easy as possible.  To do so I installed Apache 2.2, PHP5, XCache and mod_fcgid.  I am using suexec with Apache to run the scripts as the users who own the scripts.</p>
<p>I wanted to verify that XCache was working, so I copied the XCache admin directory into one of the document roots and tried to login.  To my surprise I was not able to login even though I was using a known good md5 password hash in the XCache configuration.</p>
<p>It took me about a month of searching to find out that the server variables PHP_AUTH_USER and PHP_AUTH_PW don&#8217;t seem to work with mod_fcgid.  <a href="http://forum.lighttpd.net/topic/4817">This</a> Lighttpd forum entry led me to the XCache admin config.php.</p>
<p>Here is what is required:</p>
<ol>
<li>Create a file in your XCache admin directory called config.php</li>
<li>In this file add the following, using the information you provided in the XCache configuration:
<pre>
<code>&lt;?php
$_SERVER[&#039;PHP_AUTH_USER&#039;] = &#039;admin_username&#039;;
$_SERVER[&#039;PHP_AUTH_PW&#039;] = &#039;admin_password&#039;;
?&gt;</code>
</pre>
</li>
<li>Configure some other means of authentication such as htpasswd or htdigest</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://sivel.net/2008/08/xcache-admin-mod_fcgid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
