<?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>Confessions of a Guru &#187; php</title>
	<atom:link href="http://www.guru.net.nz/blog/category/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.guru.net.nz/blog</link>
	<description>Random stuff from a Dunedin (NZ) based web developer, beer drinker and dad</description>
	<lastBuildDate>Wed, 14 Dec 2011 09:18:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>PHP&#8217;s DateTime built-in class vs. Zend_Date</title>
		<link>http://www.guru.net.nz/blog/2011/10/phps-datetime-built-in-class-vs-zend_date.html</link>
		<comments>http://www.guru.net.nz/blog/2011/10/phps-datetime-built-in-class-vs-zend_date.html#comments</comments>
		<pubDate>Sun, 30 Oct 2011 21:59:43 +0000</pubDate>
		<dc:creator>GuruBob</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.guru.net.nz/blog/?p=423</guid>
		<description><![CDATA[If you ever wanted a reason not to use PHP&#8217;s built-in DateTime class or to lie awake wondering about your code that uses it, here&#8217;s a good one. I&#8217;ve not looked into why this happens but 31st October minus one month gives 1st October. It should give 30th September. Zend_Date works in this respect: Here&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>If you ever wanted a reason not to use PHP&#8217;s built-in DateTime class or to lie awake wondering about your code that uses it, here&#8217;s a good one. I&#8217;ve not looked into why this happens but 31st October minus one month gives 1st October. It should give 30th September. Zend_Date works in this respect:</p>
<p>Here&#8217;s a session showing this in action:</p>
<p><tt>bob@desktop:~$ php -a<br />
Interactive shell</p>
<p>php &gt; $m = new DateTime();<br />
php &gt; echo $m-&gt;format( 'r' );<br />
<strong>Mon, 31 Oct 2011</strong> 09:39:12 +1300<br />
php &gt; echo $m-&gt;modify('-1 month')-&gt;format( 'r' );<br />
<strong>Sat, 01 Oct 2011</strong> 09:39:12 +1300</tt></p>
<p>*cries*</p>
<p><tt>bob@desktop:~$ php -a<br />
Interactive shell</p>
<p>php &gt; $m = new Zend_Date();<br />
php &gt; echo $m;<br />
<strong>Oct 31, 2011</strong> 9:47:50 AM<br />
php &gt; echo $m-&gt;sub( 1, Zend_Date::MONTH );<br />
<strong>Sep 30, 2011</strong> 9:48:25 AM</tt></p>
<p>*correct*</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guru.net.nz/blog/2011/10/phps-datetime-built-in-class-vs-zend_date.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Benchmarking PHP &#8211; a hands on solution</title>
		<link>http://www.guru.net.nz/blog/2011/07/benchmarking-php-a-hands-on-solution.html</link>
		<comments>http://www.guru.net.nz/blog/2011/07/benchmarking-php-a-hands-on-solution.html#comments</comments>
		<pubDate>Tue, 05 Jul 2011 11:45:46 +0000</pubDate>
		<dc:creator>GuruBob</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.guru.net.nz/blog/?p=393</guid>
		<description><![CDATA[Sometime you will be in a situation where benchmarking is to solve a particular performance problem. You can imagine how it goes &#8211; the system performs well on an unloaded development server with a few hundred records, but once in the wild on a production server with tens of thousands of records all of a [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.guru.net.nz/blog/images/Benchmarking-PHP.jpg" alt="Screenshot of some PHP code" title="Benchmarking PHP" width="324" height="321" style="margin: 10px;" class="alignright size-full wp-image-396" />Sometime you will be in a situation where benchmarking is to solve a particular performance problem. You can imagine how it goes &#8211; the system performs well on an unloaded development server with a few hundred records, but once in the wild on a production server with tens of thousands of records all of a sudden you&#8217;ve got an issue.</p>
<p>Finding bottlenecks in code isn&#8217;t always an easy task and it&#8217;s helpful to have some way of measuring the time it takes to run a process accurately. Sure, there&#8217;s the stopwatch method but this only scales so far. Accurately benchmarking is also great for measuring performance of code where the speed isn&#8217;t currently an issue. You can benchmark a known operation, then repeat this benchmark process in the future to ensure that no unintentional degradation of performance has occurred as a result of development.</p>
<p>Here&#8217;s an example piece of code to help you quickly benchmark code. It supports loading multiple tests into it and simply does a var_dump of the results. Using these results in creative ways is an exercise for the reader.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">class</span> Benchmark
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$results</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// Our benchmarking may take some time - disable the time limit</span>
            <span style="color: #990000;">set_time_limit</span><span style="color: #009900;">&#40;</span> <span style="color: #cc66cc;">0</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> benchmark<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$test</span><span style="color: #339933;">,</span> <span style="color: #000088;">$callback</span> <span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$start</span> <span style="color: #339933;">=</span> <span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$callback</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">results</span><span style="color: #009900;">&#91;</span> <span style="color: #000088;">$test</span> <span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$start</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> runTests<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// -- Test #1 ---------------------------------------</span>
&nbsp;
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">benchmark</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Fetch all contacts'</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
                TwSCM<span style="color: #339933;">::</span><span style="color: #004000;">model</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'broadcast/contact'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchAll</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// -- Test #2 ---------------------------------------</span>
&nbsp;
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">benchmark</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Fetch objects for tag 4'</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
                TwSCM<span style="color: #339933;">::</span><span style="color: #004000;">model</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'tag'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getObjectsForTag</span><span style="color: #009900;">&#40;</span> <span style="color: #cc66cc;">4</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// -- Test #3 ---------------------------------------</span>
&nbsp;
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">benchmark</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Count to one million'</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
                <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$a</span> <span style="color: #339933;">&lt;=</span> <span style="color: #cc66cc;">1000000</span><span style="color: #339933;">;</span> <span style="color: #000088;">$a</span><span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span>
                <span style="color: #009900;">&#123;</span>
                    <span style="color: #666666; font-style: italic;">// Do nothing ...</span>
                <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// -- Output the results ----------------------------</span>
&nbsp;
            <span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">results</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>    
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000088;">$benchmark</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Benchmark<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$benchmark</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">runTests</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>The above code requires at least PHP 5.3 (it uses closures to run the tests and time/store the results) and currently some tests that I&#8217;ve been running to profile <a href="http://www.turboweb.co.nz/pages/13-15/Simple-Web-Manager">Turboweb&#8217;s Simple Web Manager</a> application. The benchmark() method takes two parameters &#8211; the first is the name of the test (this is displayed when $this->results is var_dump()ed) and the second is an anonymous function containing the test to be run.</p>
<p>By modifying the contents of the anonymous function and running this script multiple times you will be able to test and tweak your functions to as quickly as they can.</p>
<p>Good hunting!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guru.net.nz/blog/2011/07/benchmarking-php-a-hands-on-solution.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FogBugz &#8220;Active Project&#8221; notification tool</title>
		<link>http://www.guru.net.nz/blog/2009/12/fogbugz-active-project-notification-tool.html</link>
		<comments>http://www.guru.net.nz/blog/2009/12/fogbugz-active-project-notification-tool.html#comments</comments>
		<pubDate>Wed, 09 Dec 2009 10:50:36 +0000</pubDate>
		<dc:creator>GuruBob</dc:creator>
				<category><![CDATA[fogbugz]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.guru.net.nz/blog/?p=309</guid>
		<description><![CDATA[At Turboweb we&#8217;ve recently subscribed to a 5-user on-demand license for an awesome case tracking system called FogBugz.  For us it means that we have controlled workflow of cases (bugs, features, enquiries etc.) along with awesome estimation reporting and time tracking.  FogBugz was built with development teams in mind and it&#8217;s a very nice tool. [...]]]></description>
			<content:encoded><![CDATA[<p>At <a href="http://www.turboweb.co.nz">Turboweb</a> we&#8217;ve recently subscribed to a 5-user on-demand license for an awesome case tracking system called <a href="http://www.fogbugz.com">FogBugz</a>.  For us it means that we have controlled workflow of cases (bugs, features, enquiries etc.) along with awesome estimation reporting and time tracking.  FogBugz was built with development teams in mind and it&#8217;s a very nice tool.</p>
<p>Anyway, one of the things it has is a nice API which you can use to interrogate the product (read and write) and this got me thinking about how I could use the API to remind me what I should currently be working on.  Thus was created the &#8220;FogBugz Notification Tool&#8221;.</p>
<p>This script does the following:</p>
<ol>
<li>Connects to your FogBugz installation</li>
<li>Runs a query to see what things have been worked on today</li>
<li>If there are any items that don&#8217;t have an end date, then it&#8217;s the case that&#8217;s currently being worked on</li>
<li>Get the details of the case</li>
<li>Use notify-send to pop up a notification bubble showing case number, title, estimated time and time remaining.</li>
</ol>
<p style="padding-left: 30px;"><img class="alignnone size-full wp-image-310" title="FogBugz Active Case Notification" src="http://www.guru.net.nz/blog/wp-content/uploads/2009/12/fb-activecase.png" alt="FogBugz Active Case Notification" width="381" height="267" /></p>
<p>I have found this most effective if I put it in my crontab to run every 5 minutes.</p>
<p>Requirements:</p>
<ul>
<li>Ubuntu Linux (or any version of Linux that supports the &#8220;notify-send&#8221; command)</li>
<li>PHP5 CLI (simply because this script is written with PHP)</li>
<li>The &#8220;libnotify-bin&#8221; package (this provides the &#8220;notify-send&#8221; command, try &#8220;sudo apt-get install libnotify-bin&#8221;)</li>
</ul>
<p>The script requires a little configuration for your circumstances, but this is easily done by editing the defined constants in the script:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">	<span style="color: #666666; font-style: italic;">// Adjust these defines to suit your installation</span>
	<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'FBBASEURL'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'https://mywebsite.fogbugz.com/'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'FBUSERNAME'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'my@email.address.com'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'FBPASSWORD'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mypassword'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>And to add it to your crontab, simply add this line (note the */5 means every time the current number of minutes in the hour is evenly divisible by 5)</p>
<pre>*/5 * * * * DISPLAY=:0.0 /usr/bin/php /home/bob/fogbugz-notify.php</pre>
<p>Of course, adjust the path appropriately.</p>
<ul>
<li><a href="http://www.guru.net.nz/blog/fogbugz-notify.tar.gz">Download the script here</a> (9.1kB)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.guru.net.nz/blog/2009/12/fogbugz-active-project-notification-tool.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CodeIgniter &#8211; Form Validation and Optional Fields</title>
		<link>http://www.guru.net.nz/blog/2009/09/codeigniter-form-validation-and-optional-fields.html</link>
		<comments>http://www.guru.net.nz/blog/2009/09/codeigniter-form-validation-and-optional-fields.html#comments</comments>
		<pubDate>Tue, 22 Sep 2009 12:18:41 +0000</pubDate>
		<dc:creator>GuruBob</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.guru.net.nz/blog/?p=290</guid>
		<description><![CDATA[I&#8217;ve been doing a bit of work lately with CodeIgniter.  It&#8217;s been OK but the framework seems quite wrong in most places.  My main gripe is that the &#8220;helpers&#8221; define themselves as functions in the global namespace (rather than as objects that hook into the CodeIgniter object) which results in some stupidity like a function [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been doing a bit of work lately with CodeIgniter.  It&#8217;s been OK but the framework seems quite wrong in most places.  My main gripe is that the &#8220;helpers&#8221; define themselves as functions in the global namespace (rather than as objects that hook into the CodeIgniter object) which results in some stupidity like a function called &#8220;set_value&#8221; which just happens to retrieve the value as validated by the form validation &#8220;helper&#8221;.  Anyway, that&#8217;s a lesson learnt.</p>
<p>I&#8217;ve been trying to get the form validation to allow me to use set_value for fields that aren&#8217;t required, but unless your rules specify the field and a validation rule for it the value won&#8217;t be available when set_value is called.  The trick here is to use &#8220;echo&#8221; as the rule which means that the validation passes and you get back what you put in.  This is not documented in the CodeIgniter manual (it&#8217;s implied by the fact that you can use any PHP function as a &#8220;rule&#8221;).</p>
<p>Example:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$rules</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
  <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'field'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'name'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'label'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Name'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'rules'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'required'</span>
  <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
  <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'field'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'nickname'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'label'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Nickname'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'rules'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'echo'</span>
  <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">form_validation</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_rules</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$rules</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>In this case any calls to set_value(&#8216;nickname&#8217;) will return the correct value, rather than an empty string.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guru.net.nz/blog/2009/09/codeigniter-form-validation-and-optional-fields.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP tutorial &#8211; introduction to classes</title>
		<link>http://www.guru.net.nz/blog/2008/10/php-tutorial-introduction-to-classes.html</link>
		<comments>http://www.guru.net.nz/blog/2008/10/php-tutorial-introduction-to-classes.html#comments</comments>
		<pubDate>Mon, 13 Oct 2008 09:05:14 +0000</pubDate>
		<dc:creator>GuruBob</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.guru.net.nz/blog/?p=233</guid>
		<description><![CDATA[You might have noticed that I&#8217;ve migrated this blog to WordPress &#8211; the main reason for doing so was to give me the ability to easily add pages to the blog so that I could keep my web dev tutorials in one place. I&#8217;ve also just added the introduction to classes tutorial so go and [...]]]></description>
			<content:encoded><![CDATA[<p>You might have noticed that I&#8217;ve migrated this blog to WordPress &#8211; the main reason for doing so was to give me the ability to easily add pages to the blog so that I could keep my web dev tutorials in one place.</p>
<p>I&#8217;ve also just added the <a href="tutorials/intro-to-classes">introduction to classes</a> tutorial so go and check it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guru.net.nz/blog/2008/10/php-tutorial-introduction-to-classes.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

