<?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>The Incurable Geek &#187; PHP</title>
	<atom:link href="http://nicolasrosental.com/category/development/php-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://nicolasrosental.com</link>
	<description>Web Development, Coworking and 42</description>
	<lastBuildDate>Fri, 03 Sep 2010 18:46:42 +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>5 Reasons To Love CodeIgniter</title>
		<link>http://nicolasrosental.com/2010/09/03/5-reasons-to-love-codeigniter/</link>
		<comments>http://nicolasrosental.com/2010/09/03/5-reasons-to-love-codeigniter/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 13:36:35 +0000</pubDate>
		<dc:creator>nic</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[atlantaphp]]></category>
		<category><![CDATA[codeingiter]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://nicolasrosental.com/?p=376</guid>
		<description><![CDATA[This is the presentation I gave at the AtlantaPHP September meet-up. It&#8217;s a showcase of five useful features included in CodeIgniter. You can download the slides or pdf. The slides have embedded videos in slides 11, 17, and 22 so if you get the PDF you&#8217;ll have blank pages instead. You can still watch the demos [...]]]></description>
			<content:encoded><![CDATA[<p>This is the presentation I gave at the AtlantaPHP September meet-up. It&#8217;s a showcase of five useful features included in CodeIgniter. You can download the <a href="http://nicolasrosental.com/wp-content/uploads/2010/09/atlantaphp.pptx">slides</a> or <a href="http://nicolasrosental.com/wp-content/uploads/2010/09/atlantaphp.pdf">pdf</a>. The slides have embedded videos in slides 11, 17, and 22 so if you get the PDF you&#8217;ll have blank pages instead. You can still watch the demos below.</p>
<p>Big thanks to <a title="Danny Mustafic" href="http://twitter.com/dmustafic">Danny Mustafic</a> for recording the presentation (which should be available here in a few days) and to <a href="http://twitter.com/cspruck">Chris Spruck</a> and Kevin Roberts for putting the event together.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="350" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://blip.tv/play/AYH6klwC" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="350" src="http://blip.tv/play/AYH6klwC" allowfullscreen="true"></embed></object></p>
<p><span id="more-376"></span></p>
<p>Form validation demo</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/3IQVQSlq_-w?hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/3IQVQSlq_-w?hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Pagination demo</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/xaileCcJE9w?hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/xaileCcJE9w?hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div id="__ss_5122075" style="width: 425px;">Image manipulation demo</div>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/AJa0U8iPCpk?hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/AJa0U8iPCpk?hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="width: 425px;"><strong><a title="5 Reasons To Love CodeIgniter" href="http://www.slideshare.net/nicdev/5-reasons-to-love-codeigniter-5122075">5 Reasons To Love CodeIgniter</a> </strong><object id="__sse5122075" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=atlantaphp-100903080352-phpapp02&amp;stripped_title=5-reasons-to-love-codeigniter-5122075" /><param name="name" value="__sse5122075" /><param name="allowfullscreen" value="true" /><embed id="__sse5122075" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=atlantaphp-100903080352-phpapp02&amp;stripped_title=5-reasons-to-love-codeigniter-5122075" name="__sse5122075" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d376').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d376" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fnicolasrosental.com%2F2010%2F09%2F03%2F5-reasons-to-love-codeigniter%2F&amp;submitHeadline=5+Reasons+To+Love+CodeIgniter&amp;submitSummary=" rel="nofollow" title="Add to&nbsp;Buzz"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&nbsp;Buzz" alt="Add to&nbsp;Buzz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F09%2F03%2F5-reasons-to-love-codeigniter%2F&amp;title=5+Reasons+To+Love+CodeIgniter" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F09%2F03%2F5-reasons-to-love-codeigniter%2F&amp;title=5+Reasons+To+Love+CodeIgniter" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fnicolasrosental.com%2F2010%2F09%2F03%2F5-reasons-to-love-codeigniter%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fnicolasrosental.com%2F2010%2F09%2F03%2F5-reasons-to-love-codeigniter%2F&amp;title=5+Reasons+To+Love+CodeIgniter" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F09%2F03%2F5-reasons-to-love-codeigniter%2F&amp;bm_description=5+Reasons+To+Love+CodeIgniter" rel="nofollow" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http%3A%2F%2Fnicolasrosental.com%2F2010%2F09%2F03%2F5-reasons-to-love-codeigniter%2F&amp;T=5+Reasons+To+Love+CodeIgniter" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F09%2F03%2F5-reasons-to-love-codeigniter%2F&amp;title=5+Reasons+To+Love+CodeIgniter" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F09%2F03%2F5-reasons-to-love-codeigniter%2F&amp;title=5+Reasons+To+Love+CodeIgniter" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fnicolasrosental.com%2F2010%2F09%2F03%2F5-reasons-to-love-codeigniter%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tipd.com/submit.php?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F09%2F03%2F5-reasons-to-love-codeigniter%2F" rel="nofollow" title="Add to&nbsp;Tip'd"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/tipd.png" title="Add to&nbsp;Tip'd" alt="Add to&nbsp;Tip'd" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+5+Reasons+To+Love+CodeIgniter+@+http%3A%2F%2Fnicolasrosental.com%2F2010%2F09%2F03%2F5-reasons-to-love-codeigniter%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fnicolasrosental.com%2F2010%2F09%2F03%2F5-reasons-to-love-codeigniter%2F&amp;t=5+Reasons+To+Love+CodeIgniter" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d376').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d376').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://nicolasrosental.com/2010/09/03/5-reasons-to-love-codeigniter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Some PHP Folks Hate WordPress</title>
		<link>http://nicolasrosental.com/2010/02/24/why-some-php-folks-hate-wordpress/</link>
		<comments>http://nicolasrosental.com/2010/02/24/why-some-php-folks-hate-wordpress/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 04:41:55 +0000</pubDate>
		<dc:creator>nic</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[wp]]></category>

		<guid isPermaLink="false">http://nicolasrosental.com/?p=236</guid>
		<description><![CDATA[I love WordPress. I said it, that wasn&#8217;t too hard, was it? Well, it wasn&#8217;t hard because I&#8217;m sitting all by myself, but the times I uttered those words in the company of PHP developers I ended up with a long drawn out discussion full of sentiment and little substance. I heard many arguments why [...]]]></description>
			<content:encoded><![CDATA[<p>I love WordPress. I said it, that wasn&#8217;t too hard, was it? Well, it wasn&#8217;t hard because I&#8217;m sitting all by myself, but the times I uttered those words in the company of PHP developers I ended up with a long drawn out discussion full of sentiment and little substance.</p>
<p>I heard many arguments why some PHP folks don&#8217;t like WordPress and I&#8217;ve heard counter-arguments to those reasons; but I never quite got the essence of why WordPress doesn&#8217;t get the respect it deserves from a large part of the PHP community.</p>
<p><span id="more-236"></span></p>
<p>Let&#8217;s go down the checklist to clarify things a bit</p>
<blockquote><p>Hater: WordPress security sucks!</p>
<p>Lover: The community does an awesome job at plugging holes quickly.</p>
<p>Hater: It&#8217;s PHP 4!</p>
<p>Lover: Yes, I concede on that one, but the more WP users and developers continue pushing for a full PHP 5 core the sooner we&#8217;ll get it (<a href="http://codex.wordpress.org/Switching_to_PHP5">maybe. some day.</a>)</p>
<p>Hater: It&#8217;s just for blogs!</p>
<p>Lover: That&#8217;s just dumb. How long has it been since you visited the intarwebs?</p>
<p>Hater: It&#8217;s a little toy for people that don&#8217;t know how to code.</p>
<p>Lover: It can be, but it can also help you create very powerful stuff. The tools are there for you to use, and they won&#8217;t get in the way if you don&#8217;t.</p></blockquote>
<p>So you get the picture. There are valid arguments, but the truth is some PHP developers hate WordPress because it isn&#8217;t coded like the applications they are used to working on. As easy as it is to get started coding for WordPress, for someone that is used to building sites from scratch, or even using a framework, being subjected to <a href="http://codex.wordpress.org/Plugin_API">&#8216;actions&#8217;, &#8216;filters&#8217;</a>, &#8216;<a href="http://codex.wordpress.org/The_Loop">The Loop</a>&#8216; and other WordPress idiosyncrasies causes some discomfort.</p>
<p>If you are the PHP developer I describe here, don&#8217;t get offended. Give WordPress a try. Don&#8217;t just install it, but actually get your hands dirty with a theme or plugin. It&#8217;s weird at first, but once you get past the initial annoyance you&#8217;ll find an extremely powerful platform that just might be the wrench you&#8217;re missing in your toolbox.</p>
<p>A great place to answer your questions is the <a href="http://codex.wordpress.org/Main_Page">Codex</a>, but there are a million and one resources out there. If you are in the mood for reading a book I recommend the <a href="http://technosailor.com/the-wordpress-bible/">WordPress Bible</a> by Aaron Brazell, truly an awesome resource (which you might just end up buying.)</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d236').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d236" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F24%2Fwhy-some-php-folks-hate-wordpress%2F&amp;submitHeadline=Why+Some+PHP+Folks+Hate+WordPress&amp;submitSummary=" rel="nofollow" title="Add to&nbsp;Buzz"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&nbsp;Buzz" alt="Add to&nbsp;Buzz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F24%2Fwhy-some-php-folks-hate-wordpress%2F&amp;title=Why+Some+PHP+Folks+Hate+WordPress" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F24%2Fwhy-some-php-folks-hate-wordpress%2F&amp;title=Why+Some+PHP+Folks+Hate+WordPress" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F24%2Fwhy-some-php-folks-hate-wordpress%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F24%2Fwhy-some-php-folks-hate-wordpress%2F&amp;title=Why+Some+PHP+Folks+Hate+WordPress" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F24%2Fwhy-some-php-folks-hate-wordpress%2F&amp;bm_description=Why+Some+PHP+Folks+Hate+WordPress" rel="nofollow" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F24%2Fwhy-some-php-folks-hate-wordpress%2F&amp;T=Why+Some+PHP+Folks+Hate+WordPress" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F24%2Fwhy-some-php-folks-hate-wordpress%2F&amp;title=Why+Some+PHP+Folks+Hate+WordPress" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F24%2Fwhy-some-php-folks-hate-wordpress%2F&amp;title=Why+Some+PHP+Folks+Hate+WordPress" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F24%2Fwhy-some-php-folks-hate-wordpress%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tipd.com/submit.php?url=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F24%2Fwhy-some-php-folks-hate-wordpress%2F" rel="nofollow" title="Add to&nbsp;Tip'd"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/tipd.png" title="Add to&nbsp;Tip'd" alt="Add to&nbsp;Tip'd" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Why+Some+PHP+Folks+Hate+WordPress+@+http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F24%2Fwhy-some-php-folks-hate-wordpress%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fnicolasrosental.com%2F2010%2F02%2F24%2Fwhy-some-php-folks-hate-wordpress%2F&amp;t=Why+Some+PHP+Folks+Hate+WordPress" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d236').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d236').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://nicolasrosental.com/2010/02/24/why-some-php-folks-hate-wordpress/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Twitter Response Codes Simplified</title>
		<link>http://nicolasrosental.com/2009/11/10/twitter-response-codes-simplified/</link>
		<comments>http://nicolasrosental.com/2009/11/10/twitter-response-codes-simplified/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 20:16:48 +0000</pubDate>
		<dc:creator>nic</dc:creator>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[responsecodes]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://nicolasrosental.com/?p=146</guid>
		<description><![CDATA[I recently attended an AtlantaPHP meet-up where Ben Ramsey talked about &#8220;The Hidden Gems in HTTP&#8221;. That gave me the idea to explain the response codes you might see when using the Twitter API, and give some practical examples too. We will be using PHP and cURL to access the API. If you aren&#8217;t too [...]]]></description>
			<content:encoded><![CDATA[<p>I recently attended an <a title="AtlantaPHP - PHP User Group" href="http://atlantaphp.org/">AtlantaPHP</a> meet-up where <a href="http://twitter.com/ramsey">Ben Ramsey</a> talked about &#8220;The Hidden Gems in HTTP&#8221;. That gave me the idea to explain the response <a href="http://apiwiki.twitter.com/HTTP-Response-Codes-and-Errors?SearchFor=http+code&amp;sp=1">codes</a> you might see when using the Twitter API, and give some practical examples too.</p>
<p>We will be using PHP and cURL to access the API. If you aren&#8217;t too familiar, please read <a href="http://nicolasrosental.com/?p=42">this post.</a></p>
<p>Each heading is exactly what you will find in the<a title="Response Codes and Errors" href="http://apiwiki.twitter.com/HTTP-Response-Codes-and-Errors"> Twitter API documentation</a>, along with my own explanation and some examples.</p>
<h3><strong>200 OK</strong>: Success!</h3>
<p>Let&#8217;s say I want to get a list of my followers, I can use the code example below, and if I get a <strong>200 OK </strong>return code I know that my request has been successful.</p>
<pre>//Create the connection handle</pre>
<pre>$curl_conn = curl_init();</pre>
<pre>//Set up the URL to query Twitter
$user_followers = "https://twitter.com/statuses/followers/nicdev.xml";</pre>
<pre>//Set cURL options</pre>
<pre>curl_setopt($curl_conn, CURLOPT_URL, $user_followers); //URL to connect to
curl_setopt($curl_conn, CURLOPT_GET, 1); //Use GET method
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Use basic authentication
curl_setopt($curl_conn, CURLOPT_USERPWD, 'username:password'); //Set u/p
curl_setopt($curl_conn,CURLOPT_HEADER,1); //Get the header. This is key to getting the response code!&lt;strong&gt;&lt;/strong&gt;</pre>
<pre>curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string.</pre>
<pre>// Result from querying URL. Will parse as xml
$output = curl_exec($curl_conn);</pre>
<pre>// close cURL resource. It's like shutting down the water when you're brushing your teeth.
curl_close($curl_conn);</pre>
<pre>echo $output;</pre>
<p>If you are following along you will now have a pretty messy screen full of information about your followers. The part of the response we are interested in, it&#8217;s in the first line.</p>
<pre>HTTP/1.1 200 OK Date: Tue, 10 Nov 2009
13:51:56 GMT Server: hi X-RateLimit-Limit:
20000 X-Transaction: 1257861116-80037-4182
Status: 200 OK</pre>
<p>The 200 OK code let&#8217;s us know it&#8217;s all good, and our request has been successfully processed.</p>
<h3><strong>304 Not Modified</strong>: There was no new data to return.</h3>
<p>This one is a bit trickier. In short, a 304 code means that there is no new data to a request. I attempted to send the request repeatedly through a &#8220;for loop&#8221; but I got a <strong>200 OK </strong>every time. I tried to search for bug reports so I could try to reproduce it, but no dice. Maybe they don&#8217;t really provide 304&#8242;s? If you know a way of getting it to reply 304, please comment.</p>
<h3><strong>400 Bad Request</strong>: The request was invalid.  An accompanying error message will explain why. This is the status code will be returned during <span style="color: #000000;">rate limiting.</span></h3>
<p>Well, Twitter imposes all sorts of limits on the amount of API calls you can make, and this is a good thing. The limits imposed are workable, and can be increased if you are a developer and <a href="http://twitter.com/help/request_whitelisting">ask nicely</a>. The default limit is 150/hour on any given account, so it was easy to reproduce.</p>
<p>Change the script as follows, and refresh the page.</p>
<pre>//Replace the line  $output = curl_exec($curl_conn); with the following block of code.</pre>
<pre>for($i = 0; $i &lt; 160; $i++)
{
    $output = curl_exec($curl_conn);
    $output = substr($output, 0, 200);
    echo $output."&lt;br /&gt;";
}</pre>
<p>You will probably get a lot of<strong> 200 </strong>codes followed by <strong>400&#8242;s.</strong></p>
<pre>HTTP/1.1 400 Bad Request Date: Tue, 10 Nov
2009 14:43:40 GMT Server: hi
X-RateLimit-Limit: 150 Status: 400 Bad
Request X-RateLimit-Remaining: 0
X-Runtime: 0.01104 Content-Type:
application/xml;</pre>
<h3><strong>401 Not Authorized</strong>: Authentication credentials were missing or incorrect.</h3>
<p>Does as it says, and there&#8217;s a great way of testing it out, the <strong>verify_credentials </strong>method. Simply pass it a bad username and password and you&#8217;ll have a <strong>401</strong> error to call your own.</p>
<pre>//Change this part in the original script.</pre>
<pre>//Set up the URL to query Twitter</pre>
<pre>$user_followers = "http://twitter.com/account/verify_credentials.xml";</pre>
<pre>//Don't forget to change the credentials to something invalid</pre>
<p>Here&#8217;s the result</p>
<pre>HTTP/1.1 401 Unauthorized Date: Tue, 10 Nov
2009 15:16:24 GMT Server: hi Status: 401
Unauthorized</pre>
<h3><strong>403 Forbidden</strong>: The request is understood, but it has been refused.  An accompanying error message will explain why. This code is used when requests are being denied due to update limits.</h3>
<p>You simply tweet too much! Again, you hit a rate limit that is pretty forgiving for most people. The following piece of code will actually post just one tweet to your account, which will most likely get a <strong>200 OK</strong> code; I&#8217;m posting in in case you were looking for a short script to post updates to Twitter. The second one will actually try to post more messages than it&#8217;s allowed in order to purposely get a <strong>403</strong> code.</p>
<p>Please note that because Twitter checks you aren&#8217;t sending the exact same message repeatedly, I&#8217;m changing the text in every post.</p>
<p>One tweet:</p>
<pre>//Create the connection handle</pre>
<pre>$curl_conn = curl_init();</pre>
<pre>//Set up the URL to query Twitter</pre>
<pre>$api_call = "http://twitter.com/statuses/update.xml";
$options = "status=This is a test status made with PHP"; //The actual message is a required parameter</pre>
<pre>//Set cURL options</pre>
<pre>curl_setopt($curl_conn, CURLOPT_URL, $api_call); //URL to connect to
curl_setopt($curl_conn, CURLOPT_POST, 1); //Use POST
curl_setopt($curl_conn, CURLOPT_POSTFIELDS, $options);
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Use basic authentication
curl_setopt($curl_conn, CURLOPT_USERPWD, 'username:password..'); //Set u/p
curl_setopt($curl_conn, CURLOPT_HEADER,1); //Get the header. This is key to getting the response code!</pre>
<pre>curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string.</pre>
<pre>// Result from querying URL. Will parse as xml</pre>
<pre>$output = curl_exec($curl_conn);</pre>
<pre>echo $output;</pre>
<pre>// close cURL resource. It's like shutting down the water when you're brushing your teeth.
curl_close($curl_conn);</pre>
<p>Many, many tweets.</p>
<pre>//Create the connection handle</pre>
<pre>$curl_conn = curl_init();</pre>
<pre>//Set up the URL to query Twitter</pre>
<pre>$api_call = "http://twitter.com/statuses/update.xml";</pre>
<pre>//Set cURL options</pre>
<pre>curl_setopt($curl_conn, CURLOPT_URL, $api_call); //URL to connect to
curl_setopt($curl_conn, CURLOPT_POST, 1); //Use POST
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Use basic authentication
curl_setopt($curl_conn, CURLOPT_USERPWD, 'username:password'); //Set u/p
curl_setopt($curl_conn, CURLOPT_HEADER,1); //Get the header. This is key to getting the response code!</pre>
<pre>curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string.</pre>
<pre>for($i=0;$i &lt; 160;$i++)
{
    $options = "status=This is a test status made with PHP to reach a 403".md5($i); //Change the message on each iteration
    curl_setopt($curl_conn, CURLOPT_POSTFIELDS, $options);
    $output = curl_exec($curl_conn);
    $output = substr($output,0,200);
    echo $output;
}</pre>
<pre>// close cURL resource. It's like shutting down the water when you're brushing your teeth.
curl_close($curl_conn);</pre>
<p><img class="size-full wp-image-158 alignnone" title="Twitter SPAM" src="http://nicolasrosental.com/wp-contents/uploads/2009/11/Screen-shot-2009-11-10-at-2.05.13-PM.png" alt="Twitter SPAM" width="191" height="164" /></p>
<pre>HTTP/1.1 403 Forbidden Date: Tue, 10 Nov
 2009 18:54:52 GMT Server: hi
X-Transaction: 1257879292-55915-20315
Status: 403 Forbidden
Last-Modified: Tue, 10..</pre>
<p>In case you haven&#8217;t noticed this is spamming, and it uses a lot of resources unnecessarily, so don&#8217;t do it, please.</p>
<h3><strong>404 Not Found</strong>: The URI requested is invalid or the resource requested, such as a user, does not exist.</h3>
<p>This one is very simple. You&#8217;re looking for something that&#8217;s just not there. To try it out, go to the original script and change the request to a user you know doesn&#8217;t exist. For example @nicdev1232342</p>
<pre>$user_followers = "https://twitter.com/statuses/followers/nicdev1232342.xml";</pre>
<pre>HTTP/1.1 404 Not Found Date: Tue, 10 Nov
 2009 19:16:49 GMT Server: hi
X-RateLimit-Limit: 150 X-Transaction:
 1257880609-95984-9773 Status:
404 Not Found</pre>
<p><strong>406 Not Acceptable</strong>: Returned by the Search API when an invalid format is specified in the request.</p>
<p>Either the dpcumentation is wrong, or I&#8217;m too slow to understand. I tried making a request for followers using an non-existing format of .noformat, and all I got was a lousy <strong>403</strong>. Again, if someone knows how to get this one to fire, please let me know and I&#8217;ll update the post.</p>
<pre>$user_followers = "https://twitter.com/statuses/followers/nicdev.noformat";</pre>
<p>I wanted a <strong>406</strong>!</p>
<pre>HTTP/1.1 403 Forbidden Date: Tue, 10
 Nov 2009 19:23:03 GMT Server: hi
 X-Transaction: 1257880983-50850-
1216 Status: 403 Forbidden</pre>
<p><strong>500 Internal Server Error</strong>: Something is broken.  Please post to the group so the Twitter team can investigate.</p>
<p>This one you can&#8217;t reproduce at will, but if you play with the Twitter API long enough you&#8217;re bound to run into it.</p>
<p><strong>502 Bad Gateway</strong>: Twitter is down or being upgraded.</p>
<p><img class="alignnone size-full wp-image-165" title="Fail Whale" src="http://nicolasrosental.com/wp-contents/uploads/2009/11/failwhale.png" alt="Fail Whale" width="330" height="225" /><br />
<strong>503 Service Unavailable</strong>: The Twitter servers are up, but overloaded with requests. Try again later. The search and trend methods use this to indicate when you are being rate limited.</p>
<p>The following script will run a search for the term &#8220;argentina&#8221; against the Twitter search API. Search limits are independent of other limits, and will return a <strong>503</strong> as opposed to a <strong>403</strong> when reaching the rate limit.</p>
<pre>$curl_conn = curl_init();</pre>
<pre>//Set up the URL to query Twitter</pre>
<pre>$api_call = "http://search.twitter.com/search.json?&amp;amp;amp;amp;amp;amp;amp;amp;amp;q=argentina";</pre>
<pre>//Set cURL options</pre>
<pre>curl_setopt($curl_conn, CURLOPT_URL, $api_call); //URL to connect to
curl_setopt($curl_conn, CURLOPT_GET, 1); //Use GET
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Use basic authentication
curl_setopt($curl_conn, CURLOPT_USERPWD, 'username:password'); //Set u/p
curl_setopt($curl_conn, CURLOPT_HEADER,1); //Get the header. This is key to getting the response code!</pre>
<pre>curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string.</pre>
<pre>for($i=0;$i &lt; 160;$i++)
{
    $output = curl_exec($curl_conn);
    $output = substr($output,0,200);
    echo $output."&lt;br /&gt;";
}</pre>
<pre>// close cURL resource. It's like shutting down the water when you're brushing your teeth.
curl_close($curl_conn);</pre>
<p>This one was a true surprise. While running the script that loops around 160 times I received many <strong>200&#8242;s</strong>, followed by a <strong>502 Bad Gateway</strong>, followed by a <strong>503 Service Unavailable</strong> (what I was expecting), and then again by a bunch of <strong>200&#8242;s</strong>. It seems to me that the rate limit on search is very forgiving.</p>
<pre>HTTP/1.1 200 OK Date: Tue, 10 Nov 2009 19:49:38
HTTP/1.1 502 Bad Gateway Date: Tue, 10 Nov 2009 19:49:42</pre>
<pre>HTTP/1.0 503 Service Unavailable</pre>
<pre>HTTP/1.1 200 OK Date: Tue, 10 Nov 2009 19:50:01</pre>
<p>I hope you enjoyed the post and that it&#8217;ll help you when writing applications for Twitter, or any other app that relies on response codes. To finish here are some great resources.</p>
<ul>
<li><a title="Twitter API doc" href="http://apiwiki.twitter.com/Twitter-API-Documentation">Twitter API Documentation</a> &#8211; Good docs and a great community built around it.</li>
<li><a title="Scripting Twitter with cURL" href="http://www.sakana.fr/blog/2007/03/18/scripting-twitter-with-curl/">Scripting Twitter With cURL &#8211; Tech@Sakana</a></li>
</ul>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d146').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d146" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;submitHeadline=Twitter+Response+Codes+Simplified&amp;submitSummary=" rel="nofollow" title="Add to&nbsp;Buzz"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&nbsp;Buzz" alt="Add to&nbsp;Buzz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;title=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;title=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;title=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;bm_description=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;T=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;title=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;title=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tipd.com/submit.php?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F" rel="nofollow" title="Add to&nbsp;Tip'd"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/tipd.png" title="Add to&nbsp;Tip'd" alt="Add to&nbsp;Tip'd" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Twitter+Response+Codes+Simplified+@+http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F11%2F10%2Ftwitter-response-codes-simplified%2F&amp;t=Twitter+Response+Codes+Simplified" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d146').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d146').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://nicolasrosental.com/2009/11/10/twitter-response-codes-simplified/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prevent Form Spam Without CAPTCHA</title>
		<link>http://nicolasrosental.com/2009/06/08/prevent-form-spam-without-captcha/</link>
		<comments>http://nicolasrosental.com/2009/06/08/prevent-form-spam-without-captcha/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 12:00:26 +0000</pubDate>
		<dc:creator>nic</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[forms]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://nicolasrosental.com/?p=136</guid>
		<description><![CDATA[If you use the Web, you most definitely run into CAPTCHA authentication at one point or another. I personally dislike it and try to avoid using it in my projects as much as possible. Unfortunately there aren&#8217;t many ways in which to avoid spammers running bots against your forms and submitting SPAM. If you also [...]]]></description>
			<content:encoded><![CDATA[<p>If you use the Web, you most definitely run into <a href="http://en.wikipedia.org/wiki/Captcha">CAPTCHA</a> authentication at one point or another. I personally dislike it and try to avoid using it in my projects as much as possible. Unfortunately there aren&#8217;t many ways in which to avoid spammers running bots against your forms and submitting SPAM.</p>
<p>If you also hate CAPTCHA but still want to avoid SPAM, here&#8217;s a trick that I learned from my buddy Reece. It&#8217;s extremely simple to implement, and works like a charm. All you have to do is create an input field that is invivisible to the user. When the form is submitted you can check for the value of that field, if it&#8217;s not empty, it&#8217;s more than likely a spambot.</p>
<p>Here&#8217;s a code sample to clarify.</p>
<p><strong>The Form</strong></p>
<pre>&lt;form action="process_form.php" method="post"&gt;
&lt;ul&gt;
	&lt;li&gt;Name:
&lt;input name="name" type="text"&gt; &lt;/li &gt;
	&lt;li&gt;Last name:
&lt;input name="last_name" type="text"&gt; &lt;/li&gt;
&lt;ul&gt;
&lt;div style="visibility: hidden;"&gt; &lt;input name="bot_catcher" type="text" /&gt; &lt;div&lt;
&lt;input type="submit" value="Submit" /&gt; &lt;form&gt;
</pre>
<p><strong>The PHP</strong></p>
<pre>//I'm only showing how to look for the invisible field, not how to process the entire form

if($_POST['bot_catcher'] != '')

{

echo "No bots allowed"; //This is for illustration purposes,you're better off not giving any response

exit(); //Stop processing

}
</pre>
<p>Loved it, hated it? Please leave a comment to let me know.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d136').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d136" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fnicolasrosental.com%2F2009%2F06%2F08%2Fprevent-form-spam-without-captcha%2F&amp;submitHeadline=Prevent+Form+Spam+Without+CAPTCHA&amp;submitSummary=" rel="nofollow" title="Add to&nbsp;Buzz"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&nbsp;Buzz" alt="Add to&nbsp;Buzz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F06%2F08%2Fprevent-form-spam-without-captcha%2F&amp;title=Prevent+Form+Spam+Without+CAPTCHA" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F06%2F08%2Fprevent-form-spam-without-captcha%2F&amp;title=Prevent+Form+Spam+Without+CAPTCHA" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F06%2F08%2Fprevent-form-spam-without-captcha%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fnicolasrosental.com%2F2009%2F06%2F08%2Fprevent-form-spam-without-captcha%2F&amp;title=Prevent+Form+Spam+Without+CAPTCHA" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F06%2F08%2Fprevent-form-spam-without-captcha%2F&amp;bm_description=Prevent+Form+Spam+Without+CAPTCHA" rel="nofollow" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http%3A%2F%2Fnicolasrosental.com%2F2009%2F06%2F08%2Fprevent-form-spam-without-captcha%2F&amp;T=Prevent+Form+Spam+Without+CAPTCHA" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F06%2F08%2Fprevent-form-spam-without-captcha%2F&amp;title=Prevent+Form+Spam+Without+CAPTCHA" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F06%2F08%2Fprevent-form-spam-without-captcha%2F&amp;title=Prevent+Form+Spam+Without+CAPTCHA" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fnicolasrosental.com%2F2009%2F06%2F08%2Fprevent-form-spam-without-captcha%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tipd.com/submit.php?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F06%2F08%2Fprevent-form-spam-without-captcha%2F" rel="nofollow" title="Add to&nbsp;Tip'd"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/tipd.png" title="Add to&nbsp;Tip'd" alt="Add to&nbsp;Tip'd" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Prevent+Form+Spam+Without+CAPTCHA+@+http%3A%2F%2Fnicolasrosental.com%2F2009%2F06%2F08%2Fprevent-form-spam-without-captcha%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F06%2F08%2Fprevent-form-spam-without-captcha%2F&amp;t=Prevent+Form+Spam+Without+CAPTCHA" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d136').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d136').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://nicolasrosental.com/2009/06/08/prevent-form-spam-without-captcha/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Easy jQuery AJAX For Backend Developers</title>
		<link>http://nicolasrosental.com/2009/03/09/easy-jquery-ajax-for-backend-developers/</link>
		<comments>http://nicolasrosental.com/2009/03/09/easy-jquery-ajax-for-backend-developers/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 18:06:36 +0000</pubDate>
		<dc:creator>nic</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://nicolasrosental.com/?p=112</guid>
		<description><![CDATA[There used to be a time when the backend had most of the power. Us PHP coders and other server-oriented life forms used to say &#8220;JavaScript? No, that&#8217;s for adding lame tricks that don&#8217;t work half the time.&#8221; But that was then, in the past few years AJAX and JavaScript in general exploded. All of [...]]]></description>
			<content:encoded><![CDATA[<p>There used to be a time when the backend had most of the power. Us PHP coders and other server-oriented life forms used to say &#8220;JavaScript? No, that&#8217;s for adding lame tricks that don&#8217;t work half the time.&#8221; But that was then, in the past few years AJAX and JavaScript in general exploded. All of a sudden it isn&#8217;t okay to re-load the page every time we needed to get new data.</p>
<p>I figured it couldn&#8217;t be that hard, but for some reason I was struggling to get AJAX to work like I wanted, and in talking to other developers I found out I wasn&#8217;t alone. For all of you that can relate to my story, here&#8217;s quick tutorial.</p>
<h3>The Setup</h3>
<p>We need a simple HTML page with a block element, with an id of  &#8220;element&#8221;. This page will also have the Jquery/Javascript needed to make the magic happen ( Usually you&#8217;d like to have most of your scripts in a separate file.) Later on we&#8217;ll add more to it, but this is all we need to get started.</p>
<pre>
&lt;!-- import jQuery wherever it is, in this case it's the same dir --&gt;

&lt;script src="jquery.js" type="text/javascript"&gt; &gt;/script&gt; &lt;!-- This is the secret sauce --&lt;
&lt;script type="text/javascript"&gt;
    $(document).ready(function ()
    {
        $('#element').load('output.php');
    });
&lt;/script&gt;
    &gt;div id="element" &gt;/div>
</pre>
<p>Let&#8217;s take a minute to explain the code above. First we need to import jQuery. Then we run our little script which says <em>when the DOM is ready grab the output from output.php and attach it to #element </em>(that is the div with id &#8216;element&#8217;.) The best part of the <strong>load </strong>function is that it expects a piece of HTML to attach to the given selector. It&#8217;s simple, rudimentary, and exactly what backend developers need.</p>
<p>Of course, we also need a very simple PHP script to give us the output we want to bring in via AJAX; I&#8217;ll name the file output.php. Again, we&#8217;ll add some complexity in latter examples.</p>
<pre>
&lt;?php
echo "Hello AJAX";
?&gt;
</pre>
<p>At first sight this example seems as if the &#8220;Hello Ajax!&#8221; message is just part of the page we&#8217;re viewing, so we&#8217;re going to modify the scripts a bit to show that is actually making a call to the script. Alternatively you can use the <a href="http://getfirebug.com/">Firebug</a> console to view the request and script information (highly recommended.)</p>
<h3>Wait for me!</h3>
<p>This time around, instead of making the request as soon as the DOM is ready, we&#8217;re going to do it at the push of a button.</p>
<pre>
&lt;script src="jquery.js" type="text/javascript"&gt;&lt;/script&gt; &lt;!-- import jQuery wherever it is --&gt; &lt;!-- This is the secret sauce --&gt;
&lt;script type="text/javascript"&gt;
    $(document).ready(function ()
    {
        $("#btn").click(function ()
        {
            $("#element").load('output.php');
        });
    })
&lt;/script&gt;
&lt;div id="element"&gt;&lt;/div&gt;
&lt;input id="btn" type="submit" /&gt;
</pre>
<p>This time around we told the function to wait for the button with id of &#8216;btn&#8217; to be clicked before fetching the output. We do so by using the <strong>click</strong> function of javascript. The same could be accomplished by adding <strong>onClick </strong>to the button in the HTML.</p>
<h3>The Final Act</h3>
<p>In the last example, I&#8217;ll show you how to combine the the power of jQuery and PHP to bring in real HTML to the page. Grab good &#8216;ole output.php and modify it as follows</p>
<pre>

//output.php

echo '&lt;h1&gt;Hello AJAX&lt;/h1&gt;';
echo '&lt;p&gt;This is a paragraph right after the Hello Ajax title&lt;/p&gt;';
</pre>
<p>When you click on the button now, you get properly formatted HTML. Yay AJAX!</p>
<p>Please keep in mind that there are much more advanced ways of doing this (witin and without jQuery) that allow for much more granular control, yet this is an extremely simple but powerful way to get some AJAX rolling.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d112').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d112" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fnicolasrosental.com%2F2009%2F03%2F09%2Feasy-jquery-ajax-for-backend-developers%2F&amp;submitHeadline=Easy+jQuery+AJAX+For+Backend+Developers&amp;submitSummary=" rel="nofollow" title="Add to&nbsp;Buzz"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&nbsp;Buzz" alt="Add to&nbsp;Buzz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F03%2F09%2Feasy-jquery-ajax-for-backend-developers%2F&amp;title=Easy+jQuery+AJAX+For+Backend+Developers" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F03%2F09%2Feasy-jquery-ajax-for-backend-developers%2F&amp;title=Easy+jQuery+AJAX+For+Backend+Developers" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F03%2F09%2Feasy-jquery-ajax-for-backend-developers%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fnicolasrosental.com%2F2009%2F03%2F09%2Feasy-jquery-ajax-for-backend-developers%2F&amp;title=Easy+jQuery+AJAX+For+Backend+Developers" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F03%2F09%2Feasy-jquery-ajax-for-backend-developers%2F&amp;bm_description=Easy+jQuery+AJAX+For+Backend+Developers" rel="nofollow" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http%3A%2F%2Fnicolasrosental.com%2F2009%2F03%2F09%2Feasy-jquery-ajax-for-backend-developers%2F&amp;T=Easy+jQuery+AJAX+For+Backend+Developers" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F03%2F09%2Feasy-jquery-ajax-for-backend-developers%2F&amp;title=Easy+jQuery+AJAX+For+Backend+Developers" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F03%2F09%2Feasy-jquery-ajax-for-backend-developers%2F&amp;title=Easy+jQuery+AJAX+For+Backend+Developers" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fnicolasrosental.com%2F2009%2F03%2F09%2Feasy-jquery-ajax-for-backend-developers%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tipd.com/submit.php?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F03%2F09%2Feasy-jquery-ajax-for-backend-developers%2F" rel="nofollow" title="Add to&nbsp;Tip'd"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/tipd.png" title="Add to&nbsp;Tip'd" alt="Add to&nbsp;Tip'd" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Easy+jQuery+AJAX+For+Backend+Developers+@+http%3A%2F%2Fnicolasrosental.com%2F2009%2F03%2F09%2Feasy-jquery-ajax-for-backend-developers%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F03%2F09%2Feasy-jquery-ajax-for-backend-developers%2F&amp;t=Easy+jQuery+AJAX+For+Backend+Developers" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d112').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d112').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://nicolasrosental.com/2009/03/09/easy-jquery-ajax-for-backend-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Practical Introduction to Firebug</title>
		<link>http://nicolasrosental.com/2009/02/23/practical-introduction-to-firebug/</link>
		<comments>http://nicolasrosental.com/2009/02/23/practical-introduction-to-firebug/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 16:46:26 +0000</pubDate>
		<dc:creator>nic</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://nicolasrosental.com/?p=103</guid>
		<description><![CDATA[Firebug is a very well known add-on for Firefox (it also works on other browsers) which allows web developers analyze, troubleshoot, and improve their sites. There&#8217;s a huge collection of documents and tutorials to teach you how to use it, how to debug different languages with it, and even how to cook dinner with Firebug [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://getfirebug.com/">Firebug</a> is a very well known add-on for Firefox (it also works on other browsers) which allows web developers analyze, troubleshoot, and improve their sites. There&#8217;s a huge collection of documents and tutorials to teach you how to use it, how to debug different languages with it, and even how to cook dinner with Firebug (not really).</p>
<p>This quick intro is intended to give you a taste of how it works, the different sections, and give you enough of a kickstart to allow you to discover on your own. We&#8217;ll walk through the interface, and try out a few practical examples to give you a taste of the bug. Best of all, you can do all of it while reading this post.</p>
<p>First of all you need to <a href="http://getfirebug.com/">install it.</a></p>
<p>Open it with F12, or click on the little bug at the bottom right corner of the browser.</p>
<p style="text-align: center;"><img class="size-full wp-image-105 aligncenter" title="firebug_html" src="http://nicolasrosental.com/wp-contents/uploads/2009/02/firebug_html.jpg" alt="Firebug HTML menu" width="149" height="88" /></p>
<p>Select <strong>HTML</strong> from the top bar and hover over the different elements. Notice how they are highlighted as you move from one to the next.</p>
<p>Select the <strong>CSS </strong>(right next to HTML), you can double-click any entry to modify it, or right-click and select &#8216;edit&#8217;. For example, look for the <strong>a </strong>selector and change <strong>text-decoration :   none</strong> to <strong>underline</strong> and see all the links suddenly change. Also, note that it auto-completes the property (fancy).</p>
<div id="attachment_106" class="wp-caption aligncenter" style="width: 467px"><img class="size-full wp-image-106" title="firebug_dom" src="http://nicolasrosental.com/wp-contents/uploads/2009/02/firebug_dom.jpg" alt="" width="457" height="215" /><p class="wp-caption-text">Firebug DOM menu</p></div>
<p>The <strong>DOM </strong>section is very useful, but also complicated to navigate if you don&#8217;t know what you are looking for. We&#8217;ll look at more of the DOM later on.</p>
<p>The <strong>Net </strong>section is simply cool. It might be disabled when you first click on it, but it&#8217;ll give you the option to enable if that&#8217;s the case. The initial subsection is <strong>All </strong>which shows a graphical representation of the aggregate of time it took to download each element on the page. You can also view the other sub-sections for CSS, Javascript, etc. Click on &#8216;clear&#8217; at the top left of the Firebug pane, then refresh the page and see the section populate in real time.</p>
<p>Let&#8217;s give a second look at the HTML section. Look at the HTML tree and open up to the entry <strong>&lt;div class=&#8221;container&#8221;&gt;</strong> (html -&gt; body -&gt; div).  On the right pane you can see the CSS styles affecting the page, under <strong>Laytout </strong>there&#8217;s an on-the-fly box model (awesome for troubleshooting margins, padding, etc.) In the <strong>DOM</strong> section you can check out the DOM properties for each particular element.</p>
<p style="text-align: center;"><img class="size-full wp-image-107 aligncenter" title="dom_edit_firebug" src="http://nicolasrosental.com/wp-contents/uploads/2009/02/dom_edit_firebug.jpg" alt="dom_edit_firebug" width="463" height="214" /> For exmaple, on the left side select the  <strong>&lt;title&gt;</strong>tag (html -&gt; head -&gt; title). In the right panel look for the <strong>text</strong> entry and double-click on it. Change the title to the one of your choice and see the page renamed.</p>
<p>Saving the best for last, try the following. Click on <strong>Console</strong>, at the very bottom you should have a prompt that looks like<strong> &gt;&gt;&gt;</strong>. Right there type &#8220;alert(&#8220;Hello NicDev&#8221;);&#8221; without the quotes, and press enter. Your script has just been run, you can imagine how handy this is to try JS on the fly.</p>
<p>Well, there&#8217;s a whole lot more to Firebug than what we went over today, but hopefully you feel comfortable enough to go tackle some of those tutorials and start churning out some awesome sites.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d103').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d103" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F23%2Fpractical-introduction-to-firebug%2F&amp;submitHeadline=Practical+Introduction+to+Firebug&amp;submitSummary=" rel="nofollow" title="Add to&nbsp;Buzz"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&nbsp;Buzz" alt="Add to&nbsp;Buzz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F23%2Fpractical-introduction-to-firebug%2F&amp;title=Practical+Introduction+to+Firebug" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F23%2Fpractical-introduction-to-firebug%2F&amp;title=Practical+Introduction+to+Firebug" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F23%2Fpractical-introduction-to-firebug%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F23%2Fpractical-introduction-to-firebug%2F&amp;title=Practical+Introduction+to+Firebug" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F23%2Fpractical-introduction-to-firebug%2F&amp;bm_description=Practical+Introduction+to+Firebug" rel="nofollow" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F23%2Fpractical-introduction-to-firebug%2F&amp;T=Practical+Introduction+to+Firebug" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F23%2Fpractical-introduction-to-firebug%2F&amp;title=Practical+Introduction+to+Firebug" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F23%2Fpractical-introduction-to-firebug%2F&amp;title=Practical+Introduction+to+Firebug" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F23%2Fpractical-introduction-to-firebug%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tipd.com/submit.php?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F23%2Fpractical-introduction-to-firebug%2F" rel="nofollow" title="Add to&nbsp;Tip'd"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/tipd.png" title="Add to&nbsp;Tip'd" alt="Add to&nbsp;Tip'd" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Practical+Introduction+to+Firebug+@+http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F23%2Fpractical-introduction-to-firebug%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F23%2Fpractical-introduction-to-firebug%2F&amp;t=Practical+Introduction+to+Firebug" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d103').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d103').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://nicolasrosental.com/2009/02/23/practical-introduction-to-firebug/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Participate in Building PHP With PHPT</title>
		<link>http://nicolasrosental.com/2009/02/13/participate-in-building-php-with-phpt/</link>
		<comments>http://nicolasrosental.com/2009/02/13/participate-in-building-php-with-phpt/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 20:08:14 +0000</pubDate>
		<dc:creator>nic</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[atlantaphp]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpt]]></category>
		<category><![CDATA[qa]]></category>
		<category><![CDATA[testfest]]></category>

		<guid isPermaLink="false">http://nicolasrosental.com/?p=83</guid>
		<description><![CDATA[So you like PHP, and open source software in general. Maybe you figured you&#8217;d like to collaborate in one but didn&#8217;t feel your skills were up to par. Well, fear not, you can write phpt tests. These are small units of code written in a particular way that allows scripts to build php files for [...]]]></description>
			<content:encoded><![CDATA[<p>So you like PHP, and open source software in general. Maybe you figured you&#8217;d like to collaborate in one but didn&#8217;t feel your skills were up to par. Well, fear not, you can write <a title="phpt" href="http://qa.php.net/write-test.php">phpt tests</a>. These are small units of code written in a particular way that allows scripts to build php files for testing. The level of proficiency required is not high, and it will allow you to learn and collaborate with real PHP gurus.</p>
<p>You can do all this from the comfort of your home, and once you&#8217;ve mustered enough courage you might want to join the <a href="http://wiki.php.net/qa/testfest">QA TestFest</a> and share your experiences with others while learning from true pros.</p>
<p>I&#8217;ve recently joined the <a href="http://atlantaphp.org/">Atlanta PHP Users&#8217; Group</a> and there&#8217;s talk of joining Altanta to the TestFest.</p>
<p><img class="size-full wp-image-91 alignright" title="php_logo1" src="http://nicolasrosental.com/wp-contents/uploads/2009/02/php_logo1.png" alt="php_logo1" width="270" height="142" /></p>
<p>More info:</p>
<ul>
<li><a href="http://qa.php.net/write-test.php">Creating new test files</a></li>
<li><a href="http://wiki.php.net/qa/testfest">start:qa:testfest</a></li>
<li><a href="http://forum.atlantaphp.org/index.php/t/497/">Atlanta PHP QA TestFest Announcement</a></li>
<li><a href="http://atlantaphp.org/">Atlanta PHP</a></li>
</ul>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d83').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d83" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F13%2Fparticipate-in-building-php-with-phpt%2F&amp;submitHeadline=Participate+in+Building+PHP+With+PHPT&amp;submitSummary=" rel="nofollow" title="Add to&nbsp;Buzz"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&nbsp;Buzz" alt="Add to&nbsp;Buzz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F13%2Fparticipate-in-building-php-with-phpt%2F&amp;title=Participate+in+Building+PHP+With+PHPT" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F13%2Fparticipate-in-building-php-with-phpt%2F&amp;title=Participate+in+Building+PHP+With+PHPT" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F13%2Fparticipate-in-building-php-with-phpt%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F13%2Fparticipate-in-building-php-with-phpt%2F&amp;title=Participate+in+Building+PHP+With+PHPT" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F13%2Fparticipate-in-building-php-with-phpt%2F&amp;bm_description=Participate+in+Building+PHP+With+PHPT" rel="nofollow" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F13%2Fparticipate-in-building-php-with-phpt%2F&amp;T=Participate+in+Building+PHP+With+PHPT" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F13%2Fparticipate-in-building-php-with-phpt%2F&amp;title=Participate+in+Building+PHP+With+PHPT" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F13%2Fparticipate-in-building-php-with-phpt%2F&amp;title=Participate+in+Building+PHP+With+PHPT" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F13%2Fparticipate-in-building-php-with-phpt%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tipd.com/submit.php?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F13%2Fparticipate-in-building-php-with-phpt%2F" rel="nofollow" title="Add to&nbsp;Tip'd"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/tipd.png" title="Add to&nbsp;Tip'd" alt="Add to&nbsp;Tip'd" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Participate+in+Building+PHP+With+PHPT+@+http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F13%2Fparticipate-in-building-php-with-phpt%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F02%2F13%2Fparticipate-in-building-php-with-phpt%2F&amp;t=Participate+in+Building+PHP+With+PHPT" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d83').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d83').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://nicolasrosental.com/2009/02/13/participate-in-building-php-with-phpt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter API 101 &#8211; Authentication with PHP and cURL</title>
		<link>http://nicolasrosental.com/2009/01/23/twitter-api-101-authentication-with-php-and-curl/</link>
		<comments>http://nicolasrosental.com/2009/01/23/twitter-api-101-authentication-with-php-and-curl/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 16:22:15 +0000</pubDate>
		<dc:creator>nic</dc:creator>
				<category><![CDATA[APIs]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://nicolasrosental.com/?p=42</guid>
		<description><![CDATA[Stop right there! I wrote this post back in January 2009, a lot has changed since then, and in case you haven&#8217;t heard basic authentication is a no go. I haven&#8217;t written any OAuth tutorials yet, so if you&#8217;re looking for some help check out the following links How to Authenticate Users With Twitter OAuth [...]]]></description>
			<content:encoded><![CDATA[<h3>Stop right there! I wrote this post back in January 2009, a lot has changed since then, and in case you haven&#8217;t heard <a href="http://dev.twitter.com/announcements">basic authentication is a no go</a>. I haven&#8217;t written any OAuth tutorials yet, so if you&#8217;re looking for some help check out the following links</h3>
<h3><a href="http://net.tutsplus.com/tutorials/php/how-to-authenticate-users-with-twitter-oauth/">How to Authenticate Users With Twitter OAuth</a></h3>
<h3><a title="Permanent Link to How to quickly integrate with Twitter’s OAuth API using PHP" rel="bookmark" href="http://www.jaisenmathai.com/blog/2009/03/31/how-to-quickly-integrate-with-twitters-oauth-api-using-php/">How to quickly integrate with Twitter’s OAuth API using PHP</a></h3>
<p>Now that I&#8217;m in the process of writing a simple twitter application, I want to share with you some of the steps that might help you save some time and grief in the future.</p>
<p>In this post I&#8217;ll show you how to connect securely to Twitter, authenticate, make a query and return a particular users&#8217; followers as a string using PHP and cURL.</p>
<p><span id="more-42"></span></p>
<p>//Create the connection handle</p>
<p>$curl_conn = curl_init();</p>
<p>//Set up the URL to query Twitter<br />
$user_followers = &#8220;https://twitter.com/statuses/followers/&#8221;username.xml&#8221;;</p>
<p>//Set cURL options</p>
<p>curl_setopt($curl_conn, CURLOPT_URL, $user_followers); //URL to connect to<br />
curl_setopt($curl_conn, CURLOPT_GET, 1); //Use GET method<br />
curl_setopt($curl_conn, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Use basic authentication<br />
curl_setopt($curl_conn, CURLOPT_USERPWD, &#8216;username:password&#8217;); //Set u/p<br />
curl_setopt($curl_conn, CURLOPT_SSL_VERIFYPEER, false); //Do not check SSL certificate (but use SSL of course), live dangerously!<br />
curl_setopt($curl_conn, CURLOPT_RETURNTRANSFER, 1); //Return the result as string</p>
<p>// Result from querying URL. Will parse as xml<br />
$output = curl_exec($curl_conn);</p>
<p>// close cURL resource. It&#8217;s like shutting down the water when you&#8217;re brushing your teeth.<br />
curl_close($curl_conn);</p>
<h3>Explanation</h3>
<p>The first step is to decide the type of query to use. For more information see the <a href="http://apiwiki.twitter.com/">API</a><a href="http://apiwiki.twitter.com/"> wiki</a>. Then you will set up all the options for cURL. In PHP these are set up one by one using curl_setopt(). If you don&#8217;t need a particular option, you can comment it out.  Each option is explained as a comment, but there are some areas that grant a bit more explanation.</p>
<p>Twitter uses <a href="http://http://en.wikipedia.org/wiki/Basic_access_authentication">basic authentication</a> for their services.  This is only needed for certain parts of the API, but more than likely you&#8217;ll end up having to authenticate at some point.</p>
<p>Use HTTPS if possible, otherwise credentials would be sent in clear text and it would be fairly easy to intercept and read.</p>
<p>Lastly,  execute cURL. This is when the connection happens, until now we have only set options, but haven&#8217;t actually attempted a connection. Now that we have a string back, we can convert it to an XML object and parse it for any information we need.</p>
<!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a title="Click me to see the sites." href="#" onclick="$$('div.d42').each( function(e) { e.visualEffect('slide_down',{duration:2.5}) }); return false;"><strong><em>Bookmark It</em></strong></a>
<br />
<div class="d42" style="overflow:hidden">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://buzz.yahoo.com/submit?submitUrl=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;submitHeadline=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL&amp;submitSummary=" rel="nofollow" title="Add to&nbsp;Buzz"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/buzz.png" title="Add to&nbsp;Buzz" alt="Add to&nbsp;Buzz" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;title=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;title=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;title=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;Google Bookmarks"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/google.png" title="Add to&nbsp;Google Bookmarks" alt="Add to&nbsp;Google Bookmarks" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.mister-wong.com/index.php?action=addurl&amp;bm_url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;bm_description=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;Mister Wong"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/misterwong.png" title="Add to&nbsp;Mister Wong" alt="Add to&nbsp;Mister Wong" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.netscape.com/submit/?U=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;T=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;Netscape"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/netscape.png" title="Add to&nbsp;Netscape" alt="Add to&nbsp;Netscape" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;title=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;title=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.technorati.com/faves?add=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F" rel="nofollow" title="Add to&nbsp;Technorati"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/technorati.png" title="Add to&nbsp;Technorati" alt="Add to&nbsp;Technorati" /></a>
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://tipd.com/submit.php?url=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F" rel="nofollow" title="Add to&nbsp;Tip'd"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/tipd.png" title="Add to&nbsp;Tip'd" alt="Add to&nbsp;Tip'd" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL+@+http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http%3A%2F%2Fnicolasrosental.com%2F2009%2F01%2F23%2Ftwitter-api-101-authentication-with-php-and-curl%2F&amp;t=Twitter+API+101+%26%238211%3B+Authentication+with+PHP+and+cURL" rel="nofollow" title="Add to&nbsp;Yahoo My Web"><img class="social_img" src="http://nicolasrosental.com/wp-content/plugins/social-bookmarks/images/yahoo.png" title="Add to&nbsp;Yahoo My Web" alt="Add to&nbsp;Yahoo My Web" /></a>
<br />
<a style="font-size:90%;text-align: right; " title="Click me to hide the sites." href="#" onclick="$$('div.d42').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); return false;">Hide Sites</a>
</div>
</div>
<!-- Social Bookmarks END -->
<script type="text/javascript">$$('div.d42').each( function(e) { e.visualEffect('slide_up',{duration:0.5}) }); </script>]]></content:encoded>
			<wfw:commentRss>http://nicolasrosental.com/2009/01/23/twitter-api-101-authentication-with-php-and-curl/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->