<?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>Albert Fama</title>
	<atom:link href="http://albertfama.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://albertfama.com</link>
	<description>Freelance Web Programmer - specializing in PHP &#38; MySQL</description>
	<lastBuildDate>Fri, 20 Nov 2009 16:06:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Display Errors</title>
		<link>http://albertfama.com/php/display-errors/</link>
		<comments>http://albertfama.com/php/display-errors/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 16:06:31 +0000</pubDate>
		<dc:creator>Albert Fama</dc:creator>
				<category><![CDATA[Content]]></category>
		<category><![CDATA[Error Handling]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://albertfama.com/?p=975</guid>
		<description><![CDATA[The display_errors directive in the PHP ini file &#8216;tells&#8217; PHP if errors should be added to the output stream (normally printed to the screen) or if they should not be displayed in the browser. &#160; &#60;IMPORTANT&#62; It should be noted that this setting DOES NOT suppress the error. Even if the directive is set to [...]]]></description>
			<content:encoded><![CDATA[<p>The display_errors directive in the PHP ini file &#8216;tells&#8217; PHP if errors should be added to the output stream (normally printed to the screen) or if they should not be displayed in the browser.<br />
<br />&nbsp;<br />
<strong>&lt;IMPORTANT&gt;</strong></p>
<p>It should be noted that this setting <strong>DOES NOT</strong> suppress the error. Even if the directive is set to &#8216;Off&#8217; (do not display errors) errors which occur in a script are still triggered and will be processed by the error handler.</p>
<p><strong>&lt;/IMPORTANT&gt;</strong><br />
<br />&nbsp;<br />
PHP does not offer a special display_errors function, but by using the <a href="http://us.php.net/manual/en/function.ini-set.php"  title="PHP Manual: ini_set()">ini_set()</a> function we can control the setting of this directive within our script. The function signature looks like this:</p>
<p>string ini_set  ( string $varname  , string $newvalue  )</p>
<p>blah, blah</p>

                            <div id="aspdf">
                                <a href="http://albertfama.com/wp-content/plugins/as-pdf/generate.php?post=975">
                                    <span>&nbsp;</span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://albertfama.com/php/display-errors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Error Reporting</title>
		<link>http://albertfama.com/php/error-reporting/</link>
		<comments>http://albertfama.com/php/error-reporting/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 20:30:44 +0000</pubDate>
		<dc:creator>Albert Fama</dc:creator>
				<category><![CDATA[Content]]></category>
		<category><![CDATA[Error Handling]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://albertfama.com/?p=924</guid>
		<description><![CDATA[PHP provides numerous error configuration options in the php.ini file. Since many people do not have the option of editing their ini file I would like to concentrate this series of posts on the ones which can be set within scripts (at run-time), more specifically ones you should consider using when creating a strategy for [...]]]></description>
			<content:encoded><![CDATA[<p>PHP provides numerous error configuration options in the php.ini file. Since many people do not have the option of editing their ini file I would like to concentrate this series of posts on the ones which can be set within scripts (at run-time), more specifically ones you should consider using when creating a strategy for handling errors. If you would like a complete list of the configuration options within PHP, the manual provides a very nice <a href="http://www.php.net/manual/en/errorfunc.configuration.php" title="PHP Manual: Errors and Logging Configuration Options" >chart</a>.</p>
<p>The configuration option I would like to address in this article is, of course, error_reporting.</p>
<p>Let&#8217;s start digging.</p>
<h4>error_reporting</h4>
<p>The error_reporting directive (within the PHP ini file) allows you to set the level of errors reported by PHP. By default this is set to &#8216;E_ALL &amp; ~E_NOTICE&#8217;. This <em>&#8216;tells&#8217;</em> PHP to report all errors, <em><strong>except</strong></em> Notices.</p>
<p>PHP provides a built-in function for getting and setting the error_reporting level: <a href="http://www.php.net/manual/en/function.error-reporting.php" title="PHP Manual: error_reporting()" >error_reporting()</a>. The function signature looks like this:</p>
<p><code>int error_reporting  ([ int $level  ] )</code></p>
<p>The function accepts one optional argument, a new error reporting level, and returns the old error reporting level. Although the signiture shows that the function accepts an integer, the new level sent can be represented by a <a href="http://www.php.net/manual/en/errorfunc.constants.php"  title="PHP Manual: Predefined Constants">predefined constant</a>. In fact it is recommended that you use the predefined constants to ensure future compatibility.</p>
<p>The available constants can be used in combination to build up a <a rel="nofollow" href="http://en.wikipedia.org/wiki/Bitmask"  title="Wikipedia: Bitmask">bitmask</a>; the bitmask <em>tells</em> PHP which errors to report and which to suppress. Since these constants are actually bitmasks, you will need to use <a href="http://www.php.net/manual/en/language.operators.bitwise.php"  title="PHP Manual: Bitwise Operators">bitwise operators</a> when combining them.</p>
<p>An example of the error reporting setting I use in development is:</p>
<pre name="code" class="php">
$old_setting = error_reporting(E_ALL | E_STRICT);
</pre>
<p>From the predefined constants chart the setting E_ALL equates to the integer 30719 and means:</p>
<blockquote><p>All errors and warnings, as supported, except of level E_STRICT in PHP < 6. </p></blockquote>
<p>From the predefined constants chart the setting E_STRICT equates to the integer 2048 and means:</p>
<blockquote><p>Enable to have PHP suggest changes to your code which will ensure the best interoperability and forward compatibility of your code. </p></blockquote>
<p>So basically, this tell PHP to report all errors, notices, and messages generated at the E_STRICT level.</p>
<p>Back to the code&#8230;</p>
<p>The variable $old_setting will now be set to: 6135, the default setting for error reporting (using the predefined constants again that would be: E_ALL &amp; ~E_NOTICE). </p>
<p>A small code example:</p>
<pre name="code" class="php">
&lt;?php
//get the current error reporting setting
$current_setting = error_reporting();

//check if error reporting is set to E_ALL | E_STRICT
if (8191 != $current_setting) {
    //not set to E_ALL | E_STRICT make it so
    error_reporting(E_ALL | E_STRICT);
}

//display new error reporting setting

echo error_reporting(); //displays 8191
?>
</pre>
<p>A more useful example would be to change the error_reporting setting based on the environment the script is being run in. </p>
<p>Let&#8217;s say you have a configuration file which defines the constant &#8216;ENV&#8217;, this can be set to &#8216;production&#8217; (live site) or &#8216;development&#8217;. If the script is run in production then we want to use &#8216;E_ALL &amp; ~E_NOTICE&#8217; (default), but when running in development we want to use E_ALL | E_STRICT.</p>
<p>config.php:</p>
<pre name="code" class="php">
&lt;?php

//define enviroment
define('ENV', 'development');
</pre>
<p>Script File:</p>
<pre name="code" class="php">
&lt;?php

//load configuration file
require_once('config.php');

//check ENV constant to see if running in development
if ('development' == ENV) {
    //running in development so change default setting
    error_reporting(E_ALL | E_STRICT);
    //now all errors, notices, and suggestions will be reported
}
</pre>
<p>That&#8217;s it! I&#8217;m sure you can see how useful this function can be.</p>
<blockquote><p><strong>Side Note:</strong> If you are unsure what a bitmask is or are unfamiliar with bitwise operators, you may want to checkout this <a href="http://www.joestump.net/2004/06/a-quick-bitmask-howto-for-programmers.html"  title="joestump.net: A Quick Bitmask HOWTO for Programmers">post</a> from <a href="http://www.joestump.net/"  title="joestump.net">joestump.net</a>.</p></blockquote>
</blockquote>

                            <div id="aspdf">
                                <a href="http://albertfama.com/wp-content/plugins/as-pdf/generate.php?post=924">
                                    <span>&nbsp;</span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://albertfama.com/php/error-reporting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A New Start: Error Reporting</title>
		<link>http://albertfama.com/php/new-start-error-reporting/</link>
		<comments>http://albertfama.com/php/new-start-error-reporting/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 17:35:12 +0000</pubDate>
		<dc:creator>Albert Fama</dc:creator>
				<category><![CDATA[Error Handling]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://obnexus.net/?p=34</guid>
		<description><![CDATA[A few years back I had written a post about deciphering error messages, which still remains popular today. Because of the continued interest I have decided to update the original post and create a series on error reporting and handling in PHP. When I first started learning about errors and error handling I found numerous [...]]]></description>
			<content:encoded><![CDATA[<p>A few years back I had written a post about deciphering error messages, which still remains popular today. Because of the continued interest I have decided to update the original post and create a series on error reporting and handling in PHP.</p>
<p>When I first started learning about errors and error handling I found numerous tutorials on the topic, but none that provided a complete resource on the subject. This is understandable; since the topic is so broad one tutorial would not only be extremely long, it might also seem overwhelming to someone who just started learning about the topic. This is also the reason it would make a great topic to cover on a blog, where a series of posts can be created, each building on the information presented in the previous post ending with a comprehensive  resource. (OK, comprehensive maybe a little strong but hopefully it will be close.)</p>
<p>The intended outline for the series is:</p>
<h5>Resource Information</h5>
<ul>
<li><a title="Errors and Error Messages Deciphered " href="/php/errors-and-error-messages-deciphered/">Error Messages Deciphered (Revised)</a></li>
<li><a title="Error Reporting" href="/php/error-reporting/">Error Reporting</a></li>
<li>Displaying Errors</li>
<li>Error Logging</li>
<li>Backtrace Functions</li>
<li>Triggering Errors
  </li>
<li>Understanding Exceptions</li>
</ul>
<h5>Implementation</h5>
<ul>
<li>Creating A Custom Error Handler</li>
<li>Utilizing Exceptions</li>
<li>Creating an Exception Hierarchy</li>
</ul>
<h5>Putting it all together</h5>
<ul>
<li>Error Handling Strategies</li>
</ul>

                            <div id="aspdf">
                                <a href="http://albertfama.com/wp-content/plugins/as-pdf/generate.php?post=34">
                                    <span>&nbsp;</span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://albertfama.com/php/new-start-error-reporting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter API Fun</title>
		<link>http://albertfama.com/php/twitter-api-fun/</link>
		<comments>http://albertfama.com/php/twitter-api-fun/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 16:27:49 +0000</pubDate>
		<dc:creator>Albert Fama</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorials]]></category>

		<guid isPermaLink="false">http://albertfama.com/?p=787</guid>
		<description><![CDATA[The other day I was looking through the twitter API docs trying to get inspiration for a side project. I was thinking about creating my own twitter library for PHP, but I wanted to do something quick and dirty, just to get my feet wet, and to see how others have implemented the API in [...]]]></description>
			<content:encoded><![CDATA[<p>The other day I was looking through the <a href="http://apiwiki.twitter.com/"  title="twitter API documentation">twitter API docs</a> trying to get inspiration for a side project. I was thinking about creating my own twitter library for PHP, but I wanted to do something <a rel="nofollow" href="http://idioms.thefreedictionary.com/quick+and+dirty"  title="Idiom: quick and dirty">quick and dirty</a>, just to <a rel="nofollow" href="http://idioms.thefreedictionary.com/get+feet+wet"  title="Idiom: get ones feet wet">get my feet wet</a>, and to see how others have implemented the API in PHP.</p>
<p>If your using <a href="http://twitter.com/"  title="Twitter">twitter</a> and are reading this blog I&#8217;m sure you are aware of <a href="http://twitter.com/hashphp"  title="PHP feed on twitter">hashphp</a>. If not, it is a twitter account which grabs most of the <a rel="nofollow" href="http://webtrends.about.com/od/glossary/g/what-is-a-tweet.htm"  title="about.com: What is a tweet">tweets</a> with the <a href="http://www.searchenginejournal.com/twitter-hashtags/9419/"  title="searchenginejournal.com:Ultimate Guide to Twitter Hashtags">hashtag</a> &#8216;#php&#8217;  and <a rel="nofollow" href="http://www.squidoo.com/retweeting"  title="squidoo: Retweeting explained">re-tweets</a> the messages. Since this seemed like a fairly simple thing to do I decided to create my own twitter feeder. Again, I was just hacking together a script, so if you use the code presented you will want to make some enhancements before letting it into the wild. (Please see <a href="#enhancements">end</a> of post.)</p>
<p>First, I decided to pick a hastag which was used in the range of 3 &#8211; 5 times every 15 minutes; &#8216;#mysql&#8217; seemed to fit the bill. </p>
<p>Now I needed a twitter account to re-tweet the messages, and a bit.ly account to create short URLs to link back to the original account that posted the message. I created a &#8216;poundmysql&#8217; account (The number sign &#8216;#&#8217; is sometimes referred to as the &#8216;pound&#8217; sign in the US), then I went to bit.ly and signed up for an account.</p>
<p>Continuing to gather the pieces of the puzzle, I looked through the published <a href="http://apiwiki.twitter.com/Libraries#PHP"  title="twitter API documentation: pre-written PHP libraries">PHP libraries</a> on twitter and found one which did exactly what I needed. There were other more robust scripts, but I only needed to update an account status so grabbed the package <a href="http://www.phpclasses.org/browse/package/4216.html"  title="phpclasses.org: Twitter">Twitter</a> by <a href="http://www.phpclasses.org/browse/author/385729.html"  title="phpclasses.org: Felix Oghina profile page">Felix Oghina</a>. The next piece came in the way of the <a rel="nofollow" href="http://code.google.com/p/bitly/" >Bitly</a> class, written by <a href="http://ruslanas.com"  title="Ruslanas Balciunas personal site">Ruslanas Balciunas</a>. (I apologize to Ruslanas Balciunas but my current character set in MySQL will not allow for a proper spelling of the last name.)</p>
<p>Next, I needed to be able to retrieve all the tweets which contained the string #mysql. Twitter offers a <a href="http://apiwiki.twitter.com/Twitter-API-Documentation"  title="twitter.com: API documentation">Search API</a> which would do the job, but for my purposes <a href="http://search.twitter.com/"  title="search twitter">search.twitter</a> was the faster option. They offer an XML  feed to any search so I only needed to search #mysql and grab the URL of the feed, which is:</p>
<p>http://search.twitter.com/search.atom?q=%23mysql</p>
<p>As you can see the search term is contained in the query string of the URL (URL encoded), which is useful since I could then setup the script to accept any search term.</p>
<p>OK, now with all the pieces of the puzzle at hand I only needed to write the code to fit the pieces together creating my own twitter feeder.</p>
<p>First I grabbed a function which I used in a long ago project [probably also swiped from the internet:)]. The function sends a HTTP request to a server and returns the response.</p>
<pre name="code" class="php">
function url_get($domain, $uri, $referer='')
{
    $header = array();
    $header[] = 'GET '.$uri.' HTTP/1.1';
    $header[] = 'Host: '.$domain;
    $header[] = 'User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US;rv:1.8) Gecko/20051111 Firefox/1.5';
    $header[] = 'Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5';
    $header[] = 'Accept-Language: en-us,en;q=0.5';
    $header[] = 'Accept-Encoding: gzip,deflate';
    $header[] = 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7';

    $header[] = 'Keep-Alive: 300';
    $header[] = 'Connection: keep-alive';

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $domain.$uri);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_ENCODING, "");
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_REFERER, $referer);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

    $result['exec'] = curl_exec ($ch);
    $result['info'] = curl_getinfo($ch);

    curl_close ($ch);

    return $result['exec'];
}
</pre>
<p>As you can see the function accepts three parameters, the domain to connect to ($domain), the path to the requested page ($uri) and the referrer ($referer). This function uses the cURL extension, if your PHP configuration has allow_url_fopen turned on you don&#8217;t even need this function (more on that in a minute).</p>
<p>Next I setup the $domain, $uri and $search_term variables, and made the call to the function to get the XML from search.twitter.</p>
<pre name="code" class="php">

//ideally you would put this in a configuration file
$search_term = '#mysql';

//create variables to be sent to the function
$domain = 'search.twitter.com';
$uri    = '/search.atom?q='.urlencode($search_term);

//retrieve the xml response string from search.twitter
$feed = url_get($domain, $uri);
&nbsp;
</pre>
<p>Now that the script has the information needed from twitter as an xml string, I can then create a <a href="http://www.php.net/manual/en/book.simplexml.php"  title="PHP Manual: SimpleXML extension">SimpleXML</a> object using the following:</p>
<pre name="code" class="php">

$xml = new SimpleXMLElement($feed);
</pre>
<p>If allow_url_fopen is set to &#8216;on&#8217; you could skip directly to creating the SimpleXML object by using the URL as the first parameter and setting the third parameter to TRUE:</p>
<pre name="code" class="php">

$feed = 'http://search.twitter.com/search.atom?q='.urlencode($search_term);

$xml = new SimpleXMLElement($feed, NULL, TRUE);
</pre>
<p>The tweets in the feed are ordered by the time they were originally posted using the UTC timezone, since this is the case I needed PHP to use UTC when calling date time functions. To do this I used the <a href="http://us3.php.net/manual/en/function.date-default-timezone-set.php"  title="date_default_timezone_set">date_default_timezone_set</a> function.</p>
<pre name="code" class="php">

date_default_timezone_set('UTC');
</pre>
<p>Next I included the Twitter class and the Bitly class into the script and created new instances of each:</p>
<pre name="code" class="php">

//require the two files which define the classes used
require_once('Twitter.class.php');
require_once('bitly.class.php');

//setup log in information for twitter and bit.ly
//again these should really be kept in a separate config file
//outside the document root
$twit_uname = 'twitter_username';
$twit_pword = 'twitter_password';

$bit_uname = 'bit.ly_username';
$bit_api   = 'bit.ly_api_key';

//instantiate new objects
$twitter = new Twitter($twit_uname, $twit_pword);
$bitly   = new Bitly($bit_uname, $bit_api);
</pre>
<p>The idea is to loop through the messages received from the search and update the twitter account with any message that was posted within the last 15 minutes. I setup the last run time of the script outside the loop so that it only needs to be calculated once.</p>
<pre name="code" class="php">
//define the number of minutes between each script run
//again this is a setting which should be in the config file
$time_interval = 15;

//get the number of seconds since the UNIX epoch
//and the last script run
$last_run_time = mktime()-($time_interval*60);
</pre>
<p>The messages can be found in $xml->entry. Within the loop the first check I needed to make was to determine if the twitter feeder account (poundmysql) had posted the message and if so, skip that message.</p>
<pre name="code" class="php">

//setup messages loop
foreach ($xml->entry as $update) {
    //skip any messages set by poundmysql
    if ('poundmysql' == $update->author->name) {
        continue;
    }
...
</pre>
<p>Next I checked for the time the message was posted and if that time occurs later than 15 minutes ago, I could end the loop and the script itself, since any entries after this would also occur after the 15 minute cutoff point.</p>
<pre name="code" class="php">
...
    //time format in xml string: 2009-07-25T20:32:13Z
    //split time from date
    list($pub_date, $pub_time) = explode('T', $update->published);
    //remove the ending 'Z' from time
    $pub_time = substr($pub_time, 0, -1);

    //get time segments for mktime() call
    list($hour, $minute, $second) = explode(':', $pub_time);
    list($year, $month, $day)     = explode('-', $pub_date);

    //get the number of seconds since the UNIX epoch
    //and the time the message was posted
    $publish_time  = mktime($hour,  $minute, $second,
                            $month, $day,    $year);

    //check if message was later than last run time,
    //if so end loop
    if ($publish_time < $last_run_time) {
        break;
    }
</pre>
<p>If the message passes these two checks, I know that it will be used in the feeder. </p>
<p>I then create a bit.ly link for the original message ($update->link[0]['href']), and store the character length of the link. Then I grab the content of the message ($update->title) and store that character length.
</pre>
<pre name="code" class="php">
    //grab url of the original message, create short link, store length
    $link       = (string)$update->link[0]['href'];
    $short_link = ' ..'.$bitly->shortenSingle($link);
    $short_len  = strlen($short_link);

    //grab tweet content store length
    $content     = (string)$update->title;
    $content_len = strlen($content);
</pre>
<p>Since Twitter has a max character length of 140, I then needed to check what the character length of the new message was with the bit.ly link added, if it was longer than 140, I then needed to cutoff a section of the original message to accommodate the 140 maximum length.</p>
<pre name="code" class="php">

    //total message length
    $len_total = $short_len+$content_len;

    if (140 < $len_total) {
        //determine how many characters over 140
        $over = $len_total-140;

        //remove that many characters from the original message
        $content = substr($content, 0, -$over);
    }
</pre>
<p>The only thing left to do was to actually update the twitter status.</p>
</pre>
<pre name="code" class="php">

    $new_status = $content.$short_link;
    //update twitter status
    $twitter->update($new_status);
}
//end loop
</pre>
<p>That ends the PHP code for my twitter feeder, now I setup a cron job to run every fifteen minutes and I have my own twitter feeder feeding the MySQL community.</p>
<div style="background-color: #EEEEEE; padding: 7px;">
*/15 * * * * GET /path/to/script
</div>
<p>Since I didn&#8217;t want to actually monitor this feed, I let it run for awhile and once I verified everything was working correctly I deleted the twitter account and stopped the script from running.</p>
<p>A copy of the code used in this post can be found <a href="#" onclick="window.open('/scripts/twitter-feeder.txt', 'code', 'height=500,width=600,scrollbars=1'); return false;" title="code used for twitter feeder">here</a>.<br />
<a name="enhancements"></a></p>
<h5>Enhancements</h5>
<p>Some updates you will probably want to make before actually using this script for a real twitter account:</p>
<ul>
<li>Remove all the configuration options to their own file and store outside the document root.</li>
<li>Error checking for unavailable third-party services</li>
<li>Reverse tweets before running the loop. ATM: the script re-tweets in the reverse order the original messages were posted.</li>
<li>Implement a filtering system so no unwanted messages are inserted into your stream.</li>
<li>Update the script to use the twitter search API to guarantee that all tweets with your hashtag are captured.</li>
</ul>

                            <div id="aspdf">
                                <a href="http://albertfama.com/wp-content/plugins/as-pdf/generate.php?post=787">
                                    <span>&nbsp;</span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://albertfama.com/php/twitter-api-fun/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP 5 Zend Cert Exam: My Experience</title>
		<link>http://albertfama.com/content/php-5-zend-cert-exam-my-experience/</link>
		<comments>http://albertfama.com/content/php-5-zend-cert-exam-my-experience/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 23:12:10 +0000</pubDate>
		<dc:creator>Albert Fama</dc:creator>
				<category><![CDATA[Content]]></category>

		<guid isPermaLink="false">http://albertfama.com/?p=694</guid>
		<description><![CDATA[On Monday afternoon, I figured I was as ready as I was going to be and finally scheduled my PHP 5 Zend Certification Exam for Tuesday Morning. Since my original post about preparing for the exam seemed fairly popular, I figured a follow up was in order. As I&#8217;m sure you&#8217;re aware Pearsonvue administers the [...]]]></description>
			<content:encoded><![CDATA[<p>On Monday afternoon, I figured I was as ready as I was going to be and finally scheduled my PHP 5 Zend Certification Exam for Tuesday Morning. Since my <a href="/content/preparing-for-zend-exam/" title="Preparing for Zend PHP 5 Certification Exam ">original post</a> about preparing for the exam seemed fairly popular, I figured a follow up was in order.</p>
<p>As I&#8217;m sure you&#8217;re aware <a href="http://pearsonvue.com/zend/"  title="pearsonvue.com: zend section">Pearsonvue</a> administers the exam. The testing centers are usually apart of other organizations (colleges, tech centers, etc.)</p>
<p>First, I was asked to arrive 15 minutes early so that I could complete the registration process and start my exam &#8216;on time&#8217;. Registration basically consisted of showing two forms of ID and locking away all personal items; including wallets, bags, hats (if I had known this I would&#8217;ve combed my hair), and so on. I was then given a laminated piece of paper, a black dry erase marker, and an eraser which I was allowed to use during the exam. The exam &#8216;proctor&#8217; then lead me to a computer, started the exam application, and wished me luck.</p>
<p>The exam was setup very similar to the practice tests. The screen displays the amount of time left, the current question number and the total number of questions. If you don&#8217;t already know, there are 70 questions to be completed in 90 minutes.</p>
<p>For each question you can check a box to mark for review, submit a comment to the test writers, and of course a place to answer the question. Answers range from: true/false, multiple choice, or fill in. Multiple choice can ask for more than one answer or &#8216;None of the above&#8217; / &#8216;All of the above&#8217;, I hate that.</p>
<p>Since I cannot give you examples of actual questions, or any real detailed information about the questions asked, let just say you definitely need a good basis in the topics listed on the Zend Certification <a href="http://www.zend.com/en/services/certification/php-5-certification/"  title="zend.com: PHP 5 Certififcation information">page</a> (scroll to the bottom). You, of course, don&#8217;t need to know everything contained in the topics listed, but have the knowledge to make an educated guesses, when you run up against a question you don&#8217;t know.</p>
<p>After completing all the questions, a review screen is displayed which tells you the questions marked for review, and whether you answered the question. I get very apprehensive when taking exams, and have a tendency second guess all my answers, consequently my review screen showed that I had marked all but a few questions for review.</p>
<p>You then have options to &#8216;end the exam&#8217;, &#8216;review the questions marked&#8217;, or &#8216;review all questions&#8217;. Since I had about half the exam time left, I chose to review all questions.</p>
<p>On my second pass at the questions, I only left about 5 which I wanted to go over once more if I had the time, which I did.</p>
<p>Upon clicking &#8216;end exam&#8217;, it calculates your score, in about 5 (very long seconds), then displays whether you&#8217;ve passed or failed. Since I&#8217;m writing this post you should know that I passed, else I would have just never mentioned the exam again <img src='http://albertfama.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>BTW &#8211; If you don&#8217;t already know, learn how to convert hexadecimal and octal, you may only have one question which asks, but it is one question you are guaranteed to get right, if you know how.</p>

                            <div id="aspdf">
                                <a href="http://albertfama.com/wp-content/plugins/as-pdf/generate.php?post=694">
                                    <span>&nbsp;</span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://albertfama.com/content/php-5-zend-cert-exam-my-experience/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Preparing for Zend PHP 5 Certification Exam</title>
		<link>http://albertfama.com/content/preparing-for-zend-exam/</link>
		<comments>http://albertfama.com/content/preparing-for-zend-exam/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 20:45:07 +0000</pubDate>
		<dc:creator>Albert Fama</dc:creator>
				<category><![CDATA[Content]]></category>

		<guid isPermaLink="false">http://albertfama.com/?p=675</guid>
		<description><![CDATA[As some of you know I am preparing to take the Zend PHP 5 certification exam in the near future (exact date not set), and have opted to actually study the material instead of just winging it, probably a good idea. I thought I might be able to provide some tips for anyone considering taking [...]]]></description>
			<content:encoded><![CDATA[<p>As some of you know I am preparing to take the Zend PHP 5 certification exam in the near future (exact date not set), and have opted to actually study the material instead of just winging it, probably a good idea. I thought I might be able to provide some tips for anyone considering taking the exam in the future.</p>
<p>My first advice it to purchase the <a href="http://www.zend.com/en/store/php-certification/online-practice-testing"  title="Zend.com: practice tests">Practice tests</a>, which are offered by <a href="http://www.zend.com/"  title="Zend.com">Zend</a>, and given by <a href="http://www.phparch.com/"  title="php|architect">php|architect</a>. I was originally just going to study for the exam from the multitude of books I currently own, but 10 tests for $22 USD, I figured WTF. </p>
<p>So far I have taken ( and passed:) ) 4 practice tests. What is most impressive is at the end of the exam, you get a break down of how you did on each section and what your final score would be if this were the real exam. Such as:</p>
<p><center><img src="/images/exam_result.png" title="Exam Results" alt="Exam Results" /></center></p>
<p>For each section (and the final grade) it is possible to receive: fail, pass, or excellent. I believe &#8216;fail&#8217; and &#8216;excellent&#8217; are fairly self explanatory. Pass means that you are within a narrow margin of the passing score and may want to refresh your knowledge of the material. As you can see, I need to do some studying on &#8216;streams and network programming&#8217;. Which is why you may have seen my request for a good tutorial about sockets, on <a href="http://twitter.com/albertfama"  title="twitter.com: albertfama">twitter</a>.</p>
<p>Another nice thing about the practice test is that you gives you a feel for the type of questions the exam will ask. I don&#8217;t want to say they are trick questions, but you really need to read the question and carefully review the code provided, because it is not always as simple as it seems. Let&#8217;s just say, if you saw the code in your everyday project you would be scratching your head wondering why the coder made the function so complicated, when it could be written so much more simply.</p>
<p>There is also a study guide published by <a href="http://www.phparch.com/books/isbn/0973862149"  title="php|architect: Zend Certification Study Guide">php|architect</a>. The study guide provides a nice overview of all the topics, divided into chapters corresponding to the sections of the exam. It should not be seen as a comprehensive resource of all the material on the exam, but is intended to provide a synopsis of the material and is sold as such.</p>
<p>You can purchase the study guide, practice tests, and an exam voucher in one <a href="http://www.zend.com/en/store/php-certification/zend-php5-certification-bundle"  zend.com: Zend PHP 5 Certification Bundle>bundle</a> on zend.com, if you decide the study guide would be a benefit to you.</p>
<p>If you have already taken the exam, please comment and let everyone what the <strong>real</strong> exam is like.</p>

                            <div id="aspdf">
                                <a href="http://albertfama.com/wp-content/plugins/as-pdf/generate.php?post=675">
                                    <span>&nbsp;</span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://albertfama.com/content/preparing-for-zend-exam/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Tutorial: Integrating FUDforum</title>
		<link>http://albertfama.com/php/new-tutorial-integrating-fudforum/</link>
		<comments>http://albertfama.com/php/new-tutorial-integrating-fudforum/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 00:35:34 +0000</pubDate>
		<dc:creator>Albert Fama</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Fudforum]]></category>
		<category><![CDATA[integration]]></category>
		<category><![CDATA[learning]]></category>

		<guid isPermaLink="false">http://albertfama.com/?p=367</guid>
		<description><![CDATA[I have recently published the first part in a new series of tutorials which will look at integrating FUDforum into an existing site. Part 1 looks at how to create FUD accounts for existing users, and how to &#8216;notify&#8217; FUD about things happening on your site. Basically introducing your site to FUD. Back Story It [...]]]></description>
			<content:encoded><![CDATA[<p>I have recently published the first part in a new series of tutorials which will look at integrating <a href="http://fudforum.org/forum/"  title="FUDforum">FUDforum</a> into an existing site. Part 1 looks at how to create FUD accounts for existing users, and how to &#8216;notify&#8217; FUD about things happening on your site. Basically introducing your site to FUD.</p>
<h3>Back Story</h3>
<p>It seems forums have sort of lost their luster for many; I remember when having a website meant having a forum. At that time it seemed every contract I landed, some portion of the job consisted of integrating a forum  into a site. I always hated this job, because at the time PHPBB was the forum of choice and it seemed that there was no &#8216;right&#8217; way to do it, I had simply developed a bunch of hacks which needed to be scattered around the PHPBB code base and even when complete it was still just a bunch of hacks.</p>
<p>As time moved on, the demand for forums became less and less and I had not done a forum integration in many years. That was until I went to my <a href="http://www.azphp.org/"  title="Arizona PHP User's Group">local</a> <a href="http://www.phpusergroups.org/"  title="phpusergroups.org">PHP users group</a> and ended up with a contract to do a forum integration. I really was not looking forward to the project, but it was a part of a larger job and I&#8217;m not one to turn down work.</p>
<p>Luckily the other members of the group convinced the client to use <a href="http://fudforum.org/forum/"  title="FUDforum">FUDforum</a> developed by <a href="http://ilia.ws/"  title="Ilia Alshanetsky: Personal Site/Blog">Ilia Alshanetsky</a>. I had looked into FUDforum before, had used it as a member of different sites, and assumed the code to be a higher quality simply because of who wrote it, but had never written any code to interact with it.</p>
<p>On Wednesday, the night before I was to do the forum integration I began reading the <a href="http://cvs.prohost.org/index.php/Main_Page"  title="FUDforum documentation">documentation</a> and planning how I was going to accomplish this task as easily and painlessly as possible. Looking at the sidebar navigation on the documentation wiki, I was surprised to see the heading &#8216;<a href="http://cvs.prohost.org/index.php/Category:Integration"  title="FUDforum: Integration Documentation">Integration</a>&#8216; two clicks later, a quick scan of two different pages, and I knew exactly what needed to be done. </p>
<p>After a few hours of work Thursday morning I had written a script which created accounts in the forums for existing members, I also altered the sign up, login, and logout code of the main site. With these changes the forums were basically integrated into the site, which brings me to the new tutorial series I will be posting over the next week.</p>
<h3>Integrating FUDforum</h3>
<p><strong><a href="/tutorial-integrating-fudforum-part1" title="FUDforum integration - part 1">Part 1: Introducing your site to FUD</a></strong></p>

                            <div id="aspdf">
                                <a href="http://albertfama.com/wp-content/plugins/as-pdf/generate.php?post=367">
                                    <span>&nbsp;</span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://albertfama.com/php/new-tutorial-integrating-fudforum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Whatever happened to: PHPBuilder.com</title>
		<link>http://albertfama.com/content/whatever-happened-to-phpbuilder-com/</link>
		<comments>http://albertfama.com/content/whatever-happened-to-phpbuilder-com/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 05:12:18 +0000</pubDate>
		<dc:creator>Albert Fama</dc:creator>
				<category><![CDATA[Content]]></category>
		<category><![CDATA[Site Reviews]]></category>
		<category><![CDATA[reviews]]></category>
		<category><![CDATA[site revies]]></category>

		<guid isPermaLink="false">http://albertfama.com/?p=343</guid>
		<description><![CDATA[PHPBuilder.com used to be one of my first stops when looking for information about PHP. Their articles and tutorials were well written and covered the topic at hand completely. The forums section consisted of a smaller community of programmers than some of the other major sites. When I was first learning PHP I liked that [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://phpbuilder.com/"  title="PHPBuilder">PHPBuilder.com</a> used to be one of my first stops when looking for information about PHP. Their articles and tutorials were well written and covered the topic at hand completely. The forums section consisted of a smaller community of programmers than some of the other major sites. When I was first learning PHP I liked that fact and felt I had a chance to participate more than I had in a larger community. </p>
<p>As time moved on and I became more familiar with PHP I began to stop frequenting <a href="http://phpbuilder.com/"  title="PHPBuilder">PHPBuilder</a> and similar sites, preferring instead to go directly to the PHP documentation and figure out what needed to be done from there. This is both good and bad. I&#8217;m sure everyone has seen the comment &#8216;<a rel="nofollow" href="http://en.wikipedia.org/wiki/RTFM"  title="Wikipedia: Read The Fucking Manual">RTFM</a>&#8216;, but sometimes this is not the best option. The manual will tell you almost all you need to know about the technical specifications, but it will not tell you how different functionality relates and the best practices for using that functionality. This is why tutorials are sometimes a much better resource than the manual itself.</p>
<p>Back to the topic of <a href="http://phpbuilder.com/"  title="PHPBuilder">PHPBuilder</a>. At some point the site fell off my radar, and eventually lost its spot in my bookmarks. I had not visited  in numerous years, but it recently appeared in some search results which brought it back to mind, so I decided to take a look around and see what happened to the site.</p>
<p>I am happy to report that the site has remained publishing complete and informative articles on many aspects of programming with PHP and has stayed true to being a resource for PHP developers. </p>
<p>A quick glance at the homepage gives the user a nice snap shot of what is going on in the PHP community as well as new additions to the articles section and the community forums.</p>
<p>There are a number of articles which were written as a series such as <a rel="nofollow" href="http://cid-4515677bdf99b35f.spaces.live.com/default.aspx"  title="Peter Shaw: homepage">Peter Shaw</a>&#8216;s (<a href="http://www.phpbuilder.com/people/viewprofile.php?user_id=174305"  title="PHPBuilder: Peter Shaw Profile">1</a>) &#8220;<a href="http://phpbuilder.com/columns/peter_shaw20090226.php3"  title="PHPBuilder: The ABC's of PHP">The ABC&#8217;s of PHP</a>&#8221; which was written in ten different parts. If your new to PHP and looking for a good primer then I recommend this series. Of course many other topics are covered in the <a href="http://www.phpbuilder.com/columns/"  title="PHPBuilder: Articles">articles section</a> which is broken down into different categories.</p>
<p>I casually browsed the community forums which are alive and well, and seem to have retained the friendly atmosphere I remember. Almost every post has at least one reply, which is always nice to see. One section of the boards that caught my eye was the <a href="http://phpbuilder.com/board/forumdisplay.php?f=24"  title="PHPBuilder: Code Critique Forum">Code Critique Forum</a>. This is an extremely valuable resource for coders of all levels. I strongly believe this is one of (if not the) best way to become a better coder.</p>
<p>Another section which I do not recall <a href="http://phpbuilder.com/"  title="PHPBuilder">PHPBuilder</a> having is the <a href="http://www.phpbuilder.com/snippet/"  title="PHPBuilder: Code Library">Code Library</a>. Here you can find code snippets (again broken down into categories) for many of the routine tasks which occur in projects. Even if you are not a fan of using code someone else wrote, reviewing code that others have written is a great way to learn.</p>
<p>Well that is about it, I encourage everyone to go to <a href="http://phpbuilder.com/"  title="PHPBuilder">PHPBuilder</a> and have a look around, I&#8217;m sure you will find something you&#8217;ve been looking for.</p>
<blockquote><p>
<strong>Just an FYI</strong>: </p>
<p>I have not and will never accept money for a review of any kind. All the opinions expressed here are mine.
</p></blockquote>

                            <div id="aspdf">
                                <a href="http://albertfama.com/wp-content/plugins/as-pdf/generate.php?post=343">
                                    <span>&nbsp;</span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://albertfama.com/content/whatever-happened-to-phpbuilder-com/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Getting started with Dojo (part 1)</title>
		<link>http://albertfama.com/php/getting-started-with-dojo-part-1/</link>
		<comments>http://albertfama.com/php/getting-started-with-dojo-part-1/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 02:52:41 +0000</pubDate>
		<dc:creator>Albert Fama</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Content]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[project]]></category>

		<guid isPermaLink="false">http://albertfama.com/?p=304</guid>
		<description><![CDATA[During this past weekend I was contacted by a client asking if I could implement a few new functionality requests on their site. Basically they wanted to slowly enter the world of Web 2.0, by implementing small tweaks to existing functionality. I have been working with this client of a few years now and have [...]]]></description>
			<content:encoded><![CDATA[<p>During this past weekend I was contacted by a client asking if I could implement a few new functionality requests on their site. Basically they wanted to slowly enter the world of Web 2.0, by implementing small tweaks to existing functionality. </p>
<p>I have been working with this client of a few years now and have a great rapport with them. For this most recent project they have no requirements about which JavaScript library to use just as long as it has the functionality which is required by the project. This left me in a little bit of a dilemma, which JavaScript library should I use?</p>
<p>I have tried many libraries in the past and had used the <a rel="nofollow" href="http://developer.yahoo.com/yui/"  title="Yahoo! User Interface Library">Yahoo! User Interface Library (YUI)</a> extensively for a previous project. Although it&#8217;s a good library I have had the urge to try out <a href="http://dojotoolkit.com"  title="Dojo: the JavaScript toolkit">Dojo</a>. I first learned about the library when it came coupled with the <a href="http://zendframework.com/"  title="Zend Framework">Zend Framework</a>. After a few small personal projects I never really used either again.</p>
<p>Doing a little research on <a href="http://dojotoolkit.com"  title="Dojo: the JavaScript toolkit">Dojo</a>&#8216;s current capabilities and verifying that it has the functionality required for my project, I have decided to use Dojo and document my experience here. I&#8217;m hoping that even if you currently use a different JavaScript library that this set of posts will inspire you to try something new for a change.</p>
<p>My first task will be to build something similar to the &#8216;Suggest&#8217; functionality on Google. This afternoon I attempted to find a good tutorial explaining how this is accomplished in Dojo, but could not locate exactly what I wanted. The problem seems to be that all the combo box / auto complete tutorials for dojo create a select menu rather than a simple text box and since this is going to be implemented for a search engine the select menu option is not actually an option. (Get it &#8216;select menu&#8217;, &#8216;option&#8217;&#8230;programming humor my wife loves it.)</p>
<p>Over the next few days I will be working on this project and will have one or two more posts detailing how I implement the functionality. If anyone has not heard of Dojo or has never used it here are a few links to get you started.</p>
<h4>Dojo Links</h4>
<ul>
<li><a href="http://dojotoolkit.com"  title="Dojo: the JavaScript toolkit">Homepage</a></li>
<li><a href="http://dojotoolkit.org/downloads"  title="Dojo: Download">Download</a></li>
<li><a href="http://dojotoolkit.org/docs"  title="Dojo: Documentation">Documentation</a></li>
<li><a href="http://dojotoolkit.org/book/dojo-book-0-9/hello-world-tutorial"  title="Dojo: Hello World Tutorial">Hello World Tutorial</a></li>
</ul>
<p>My next post will assume you already have Dojo <em>installed</em> and have worked through the &#8216;Hello World&#8217; tutorial. Here are some brief notes about installing Dojo.</p>
<h5>Dojo Installation</h5>
<p>When installing Dojo you have three options</p>
<ul>
<li>Load the toolkit directly from <a rel="nofollow" href="http://dev.aol.com/dojo"  title="AOL CDN: Dojo Toolkit">AOL&#8217;s Content Distribution Network </a>(CDN) or from the <a rel="nofollow" href="http://code.google.com/apis/ajaxlibs/documentation/index.html#dojo"  title="Google CDN: Dojo Toolkit">CDN of Google</a>.</li>
<li>Download and store the toolkit on your server</li>
<li>Checkout a copy from the SVN repository (maybe not the greatest idea if your implementing on a live site)</li>
</ul>
<p>I believe the first two options are completely viable for a live website and each have their pros and cons. I choose to download the toolkit and keep it on my server. The upside is that since I have the files locally I can open them up and browse through the code whenever I would like (you can learn a lot this way).</p>
<p>&nbsp;</p>
<blockquote><p><strong>In my opinion&#8230;</strong></p>
<p>When attempting to update an existing site with the newest gadgets available, it is best to take slowly. Implement a few updates at a time, without forcing the users to change the way they use the site. The response received from the users will tell you what is worth it and when you&#8217;ve gone too far.</p></blockquote>

                            <div id="aspdf">
                                <a href="http://albertfama.com/wp-content/plugins/as-pdf/generate.php?post=304">
                                    <span>&nbsp;</span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://albertfama.com/php/getting-started-with-dojo-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Does anyone read email anymore?</title>
		<link>http://albertfama.com/humor/does-anyone-read-email-anymore/</link>
		<comments>http://albertfama.com/humor/does-anyone-read-email-anymore/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 07:37:01 +0000</pubDate>
		<dc:creator>Albert Fama</dc:creator>
				<category><![CDATA[Humor]]></category>
		<category><![CDATA[email]]></category>

		<guid isPermaLink="false">http://albertfama.com/?p=280</guid>
		<description><![CDATA[With the proliferation of email, some people receiving over 100 a day, has it almost become useless? Can you dedicate the time it takes to seriously read and understand the emails which hit your inbox? I&#8217;m not talking about scanning the emails for the important information, but actually reading it to understand what is being [...]]]></description>
			<content:encoded><![CDATA[<p>With the proliferation of email, some people receiving over 100 a day, has it almost become useless? Can you dedicate the time it takes to seriously read and understand the emails which hit your inbox? I&#8217;m not talking about scanning the emails for the important information, but actually reading it to understand what is being said.</p>
<p>One of my pet peeves is receiving email asking questions which were previously answered. Not only have I answered them before, but half the time the answer is contained in the email which the person decided to reply to.</p>
<p>Surprisingly this does not occur in personal emails between friends and family, it mostly occurs in business, where you would think the emails are actually be read. Not only is it annoying to have to answer questions which have already been answered, but it also takes time away from the current work to read the incoming email and reply, causing a delay (albeit slight) in getting the final product to the client.</p>
<p>My proposed solution is to create a standard reply, stolen from watching too many court shows. Reply:</p>
<p>OBJECTION! Asked and Answered.</p>
<p>Feel free to use this whenever the need should arise or let me know if you&#8217;ve come up with a better way to deal with this issue.</p>

                            <div id="aspdf">
                                <a href="http://albertfama.com/wp-content/plugins/as-pdf/generate.php?post=280">
                                    <span>&nbsp;</span>
                                </a>
                            </div>
                        ]]></content:encoded>
			<wfw:commentRss>http://albertfama.com/humor/does-anyone-read-email-anymore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

