<?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>Made of Everything You&#039;re Not &#187; web development</title>
	<atom:link href="http://blog.ericlamb.net/tag/web-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ericlamb.net</link>
	<description>Thoughts on programming, people and life</description>
	<lastBuildDate>Thu, 27 Oct 2011 01:29:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Care About What Matters</title>
		<link>http://blog.ericlamb.net/2010/10/care-about-what-matters/</link>
		<comments>http://blog.ericlamb.net/2010/10/care-about-what-matters/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 21:03:52 +0000</pubDate>
		<dc:creator>Eric Lamb</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://blog.ericlamb.net/?p=3405</guid>
		<description><![CDATA[It&#8217;d been a while since I&#8217;ve had the free time to write something and I really didn&#8217;t think it&#8217;d be a bitch post but it is and here we are. But, as I sit here at midnight browsing Reddit, and, yes, a little drunk, I find myself raging about the idea of the dumb stuff [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;d been a while since I&#8217;ve had the free time to write something and I really didn&#8217;t think it&#8217;d be a bitch post but it is and here we are. But, as I sit here at midnight browsing Reddit, and, yes, a little drunk, I find myself raging about the idea of the dumb stuff we care about and why we probably shouldn&#8217;t.</p>
<p>Case in point, an article called &#8220;<a href="http://arin.me/blog/php-require-vs-include-vs-require_once-vs-include_once-performance-test" onclick="return TrackClick('http%3A%2F%2Farin.me%2Fblog%2Fphp-require-vs-include-vs-require_once-vs-include_once-performance-test','PHP+require+vs.+include+vs.+require_once+vs.+include_once+Performance+Test')" target="_blank">PHP require vs. include vs. require_once vs. include_once Performance Test</a>&#8221; written by <a href="http://arin.me" onclick="return TrackClick('http%3A%2F%2Farin.me','Arin+Sarkissian')" target="_blank">Arin Sarkissian</a> way back in 2007. Forgiving the obscenely long and verbose title, Arin goes over the process and code he created to test which of 4 statements (require, include, require_once, includes_once) was the most efficient in terms of performance. It&#8217;s definitely a good read if for no other reason than the insight into how to test and benchmark code but I think there&#8217;s more to the article than that.</p>
<p>That said, the article left me unsettled for a couple reasons. First, with the amazement and appreciation that someone had taken the initiative to <em>test</em> a theory instead of just drawing conclusions (something that&#8217;s pretty rare in my experience). Second though, well the second thing bothered me because of the other more applicable and meaningful question I couldn&#8217;t shake. Why do we care about this nonsense?</p>
<p>For years I&#8217;ve read articles about how best to handle certain circumstances to improve performance. Some are good. Things like how to use the dir() function to iterate over directories or how to properly write SQL are great and definitely worthwhile reads. On the other hand though, there are tons of articles talking about the advantages of using single quotes over double quotes or, as Arin wrote, which function is better suited for file inclusion; scenarios that matter so minimally that the effort in thinking about the issue is far greater than the gains of switching techniques.</p>
<p>As my friend Caroline would say, &#8220;Rubbish; all of it.&#8221; (she&#8217;s British).</p>
<p>Care about your SQL. Care about your file system interaction, your loops and your math. Care about your logic. And, because it&#8217;s so important it demands repeating, care about your SQL.</p>
<p>I promise you, there are zero circumstances where whether you used include_once over require_once is going to be the bottleneck. It will never matter one bit if you concatenate with single quotes rather than use double quotes with nested variables. Hand to fucking god; it will not matter nearly enough to spend any time debating which approach is better.</p>
<p>So before you start spending all your time wondering what is the best technique or method for a specific scenario as yourself how much does it matter.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 51px; width: 1px; height: 1px; overflow: hidden;">SQL</div>
<div><a class="addthis_button" href="http://blog.ericlamb.net//addthis.com/bookmark.php?v=250" addthis:url='http://blog.ericlamb.net/2010/10/care-about-what-matters/' addthis:title='Care About What Matters '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ericlamb.net/2010/10/care-about-what-matters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Welcome to The McDonaldification of Web Development</title>
		<link>http://blog.ericlamb.net/2009/11/welcome-to-the-mcdonaldification-of-web-development/</link>
		<comments>http://blog.ericlamb.net/2009/11/welcome-to-the-mcdonaldification-of-web-development/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 13:00:27 +0000</pubDate>
		<dc:creator>Eric Lamb</dc:creator>
				<category><![CDATA[Brain Dump]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[freelancing]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://blog.ericlamb.net/?p=2565</guid>
		<description><![CDATA[When I was a kid I remember McDonald&#8217;s as having some of the best food and providing the best experience ever. Just the thought of going there was exciting. Breakfast, lunch and dinner; it didn&#8217;t matter what meal it was. They went out of their way to, at least try, to make the experience fun [...]]]></description>
			<content:encoded><![CDATA[<p>When I was a kid I remember McDonald&#8217;s as having some of the best food and providing the best experience <em>ever</em>. Just the thought of going there was exciting. Breakfast, lunch and dinner; it didn&#8217;t matter what meal it was. They went out of their way to, at least try, to make the experience fun for the kids. Yes, this was part of a plan to get the kids hooked to bring in the family (which it did in spades) but it was one of those rare strategies that was win-win for both the customer and company.</p>
<div id="attachment_2567" class="wp-caption aligncenter" style="width: 205px"><a href="http://blog.ericlamb.net/wp-content/uploads/2009/10/mcjoker.jpg" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2Fwp-content%2Fuploads%2F2009%2F10%2Fmcjoker.jpg','Welcome+to+The+McDonaldification+of+Web+Development')"><img class="size-medium wp-image-2567" title="Welcome to The McDonaldification of Web Development" src="http://blog.ericlamb.net/wp-content/uploads/2009/10/mcjoker-195x300.jpg" alt="Welcome to The McDonaldification of Web Development" width="195" height="300" /></a><p class="wp-caption-text">Welcome to The McDonaldification of Web Development</p></div>
<p>Fast forward 20 years (sigh&#8230;) and McDonalds and it&#8217;s ilk are the lowest of the low when it comes to quality of service and product. It&#8217;s been <em>years</em> since any fast food restaurant has provided me with an experience worthy of my money; the food is always horrible processed <em>shit</em>, and the service (even at the most basic of basic levels) is completely nonexistent. Hell, I can&#8217;t remember the last time I was given ketchup with fries without having to ask for it&#8230;</p>
<p>Having worked in web development professionally for the last eight years I&#8217;m starting to notice a similar pattern in this industry. What was once an industry ruled by high profits for a job performed by professionals (mostly anyway) has quickly become an industry full of amateurs and scammers (mostly) trying to make as much money with as little thought to quality as quickly as possible. I&#8217;ve spoken before about the <a title="Just How Good Are You?" href="http://blog.ericlamb.net/2009/05/just-how-good-are-you/" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2F2009%2F05%2Fjust-how-good-are-you%2F','Just+How+Good+Are+You%3F')" target="_self">lack of quality I find in a lot of programmers</a> I work with, and while I&#8217;m not saying it&#8217;s the complete cause, I do think there&#8217;s a link.</p>
<blockquote><p>Oddly, I’m in the minority here. In my, limited, exposure to other programmers I can say definitively that the majority just plain suck; mostly because they refuse to grow and learn.</p>
<p>I’ve heard all the arguments before, “My weekends are mine”, “I work hard enough; I don’t have the energy”, and the best ever, “My employer should pay for this like Google does. Whah!!”. (I know Google doesn’t, in fact, do this but people still say it.) All just pure crap excuses for maintaining a level of competence just high enough to not get fired.</p>
<p>Bottom line: working 8 hours a day is just not enough to matter. If you think you’re a programmer and you don’t spend time improving your skills you’ll quickly, really quickly, become obsolete. It just doesn’t matter if .Net is going to be around forever and your employer won’t ever upgrade from 1.1; you’re a hack (and not in a good way).</p></blockquote>
<p>Now that I&#8217;m an active freelancer I&#8217;m really, <em>really</em>, starting to see the differences. Time and time again I end up taking a meeting with someone who has just been worked over by others in this field. The stories some of these companies and people have are just appalling and I&#8217;ve heard some doozies. Worst of all, behavior like this tends to skew their perspective and they view <em>all </em>freelancers as suspect.  Too much of my time is spent building confidence in me as a professional it&#8217;s really starting to become laughable.</p>
<p>It was all really quite the mystery until I recently reached out on craigslist to find a designer for a WordPress theme (I need to update this site BAD). I was pretty explicit that all I was looking for was a PSD file that I would personally turn into a WordPress theme but 4 out of 5 responses to the ad indicated that the respondent hadn&#8217;t even read the post. Frankly, it was irritating wading through the crap and, obviously, automated responses.</p>
<p>This is troubling for a couple reasons. For one thing it basically indicates, to me anyways, that the person (company, freelancer, whatever) had very little regard for what <em>I</em> wanted, instead opting for a <a title="Fastest Gun in the West Problem" href="http://blog.stackoverflow.com/2008/10/solving-the-fastest-gun-in-the-west-problem/" onclick="return TrackClick('http%3A%2F%2Fblog.stackoverflow.com%2F2008%2F10%2Fsolving-the-fastest-gun-in-the-west-problem%2F','Fastest+Gun+in+the+West+Problem')" target="_blank">fastest gun</a> approach. The number of emails I received <em>immediately</em> after posting my ad was around 20 and after reviewing each one it was obvious they were automated. I pity the individual or company who entertains these people.</p>
<p>The long term harm this can cause for other programmers (much less themselves) is completely short sighted. Crappy work begets a crappy experience for the client. Simple.</p>
<div><a class="addthis_button" href="http://blog.ericlamb.net//addthis.com/bookmark.php?v=250" addthis:url='http://blog.ericlamb.net/2009/11/welcome-to-the-mcdonaldification-of-web-development/' addthis:title='Welcome to The McDonaldification of Web Development '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ericlamb.net/2009/11/welcome-to-the-mcdonaldification-of-web-development/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>When Did Performance Stop Being Important?</title>
		<link>http://blog.ericlamb.net/2009/09/when-did-performance-stop-being-important/</link>
		<comments>http://blog.ericlamb.net/2009/09/when-did-performance-stop-being-important/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 13:00:13 +0000</pubDate>
		<dc:creator>Eric Lamb</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://blog.ericlamb.net/?p=2506</guid>
		<description><![CDATA[Now that I&#8217;m finally starting to &#8220;get&#8221; the Zend Framework I&#8217;m starting to have some serious doubts on whether I made the right choice; not in choosing Zend over another framework but in choosing any framework at all. The memory usage is just abysmal across the board and after working with the Zend Framework for [...]]]></description>
			<content:encoded><![CDATA[<p>Now that I&#8217;m finally starting to &#8220;get&#8221; the Zend Framework I&#8217;m starting to have some serious doubts on whether I made the right choice; not in choosing Zend over another framework but in choosing <em>any</em> framework at all. The memory usage is just abysmal across the board and after working with the Zend Framework for about a month or so it&#8217;s not entirely clear if it&#8217;s going to scale as I need it to.</p>
<div id="attachment_2508" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ericlamb.net/wp-content/uploads/2009/09/performance.jpg" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2Fwp-content%2Fuploads%2F2009%2F09%2Fperformance.jpg','When+Did+Performance+Stop+Mattering%3F')"><img class="size-medium wp-image-2508" title="When Did Performance Stop Mattering?" src="http://blog.ericlamb.net/wp-content/uploads/2009/09/performance-300x203.jpg" alt="When Did Performance Stop Mattering?" width="300" height="203" /></a><p class="wp-caption-text">When Did Performance Stop Mattering?</p></div>
<p>Which lead to the question of why.  At the moment it seems like a question of speed of development versus performance (which is ironic because <a title="Looking For More From Zend Framework" href="http://blog.ericlamb.net/2009/08/more-from-zend-framework/" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2F2009%2F08%2Fmore-from-zend-framework%2F','Looking+For+More+From+Zend+Framework')" target="_self">Zend Framework is <em>not</em> easy</a> <em>or speedy</em> to develop with).</p>
<p>&lt;disclaimer&gt;<br />
To be fair, it&#8217;s not just frameworks that have an uncomfortable overhead. Just take a look at Joomla and Drupal; 2 popular content management systems with an absurd overhead. It&#8217;s just easier to focus on my current interest rather than the CMS&#8217;es.<br />
&lt;/disclaimer&gt;</p>
<p>One thing I&#8217;m having a hard time getting comfortable with is how much memory is required when using a php web framework. Out of the box both Zend and Symfony (for example) use around 5MB per request. Understand, this is without any custom code. Just setting up the MVC and Autoloader for the default views and models. Nothing impressive or useful and 5 fucking MB to run <em>that</em>?</p>
<p>After having been on the wrong end of this issue on my own code I&#8217;m pretty sensitive to how my code performs; I&#8217;ve written some nasty algorithms and watching them crumble in real time has a tendency to turn you around <img src='http://blog.ericlamb.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Researching the issue doesn&#8217;t really help. There&#8217;s a lot of advice on how to improve the performance but it seems to always center around common sense improvements you should be using <em>anyway</em>.</p>
<p>The most touted improvement I&#8217;ve heard is that you have to use a PHP accelerator and opcode cache. I just find that response flawed but not because it&#8217;s bad advice but because it&#8217;s <em>common sense</em>. Yes, it&#8217;s true, but <em>not</em> using a framework in combination with a PHP accelerator and opcode cache is still better in my experience. All relying on those tools does is move the baseline for performance, which you&#8217;re supposed to do already, and a framework still consumes a good amount of resources on it&#8217;s own.</p>
<p>In my experience you get about a 50% reduction in memory usage when using something like x-cache but using the Zend Framework  still leaves a total of 2.5MB of memory usage to accomplish the bare minimum setup.</p>
<p>One saving grace is that hardware is cheap. Scaling with hardware is usually the go-to escape when the bottleneck is the code but it&#8217;s not without it&#8217;s own set of issues. For one thing while it&#8217;s true that hardware is cheap the labor to maintain that hardware is not. Especially if you want to maintain the server in a proper and responsible manner.</p>
<p>Another option, that&#8217;s really only available when using the Zend Framework, is decoupling the project from a direct dependence and not use the MVC components. In anticipation of doing this I&#8217;ve been writing a lot my recent code and projects in a style that&#8217;ll allow easy(ish) separation when the time comes.</p>
<p>At this point I haven&#8217;t used a framework in a production environment so all of this consternation might be for nothing. I just have a hard time accepting the performance hit of half a MB for using something trivial like a content management system (drupal) or, for example, a component like Zend_Navigation compared to the benefit. What are they actually doing to make the cost worth while?</p>
<p>Still another option is to just walk away from this whole OOP thing and head back to the familiar touch of procedural php and using functions and classes as more of decorators to apply than core components.  From my personal experience, and <em>only my experience</em>, using OOP is way more expensive than procedural. At the end of the day I need my programs to work fast, be easy to operate for my users and have a low impact on the server. How does using OOP help that?</p>
<p>At the moment I&#8217;m not sure how this is going to work out. I am confident it&#8217;ll be an adventure though. Hopefully, I find out how Zend will scale <em>before</em> a project of mine goes viral or gets popular. Hopefully.</p>
<div><a class="addthis_button" href="http://blog.ericlamb.net//addthis.com/bookmark.php?v=250" addthis:url='http://blog.ericlamb.net/2009/09/when-did-performance-stop-being-important/' addthis:title='When Did Performance Stop Being Important? '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ericlamb.net/2009/09/when-did-performance-stop-being-important/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>The Framework is the Language</title>
		<link>http://blog.ericlamb.net/2009/09/the-framework-is-the-language/</link>
		<comments>http://blog.ericlamb.net/2009/09/the-framework-is-the-language/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 13:00:05 +0000</pubDate>
		<dc:creator>Eric Lamb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://blog.ericlamb.net/?p=2486</guid>
		<description><![CDATA[As I&#8217;ve mentioned I&#8217;m trying to move all my programming to a web framework. It was tough going though because of the sheer complexity and my naivete about the  undertaking. After about a month of working with the Zend Framework I’m a little… bored with it. If this is what working with a framework is [...]]]></description>
			<content:encoded><![CDATA[<p>As I&#8217;ve mentioned I&#8217;m trying to move all my programming to <a title="Looking For More From Zend Framework" href="http://blog.ericlamb.net/2009/08/more-from-zend-framework/" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2F2009%2F08%2Fmore-from-zend-framework%2F','Looking+For+More+From+Zend+Framework')">a web framework</a>. It was tough going though because of the sheer complexity and my naivete about the  undertaking.</p>
<div id="attachment_2497" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ericlamb.net/wp-content/uploads/2009/09/learning-is-hard.jpg" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2Fwp-content%2Fuploads%2F2009%2F09%2Flearning-is-hard.jpg','The+Framework+is+the+Language')"><img class="size-medium wp-image-2497" title="The Framework is the Language" src="http://blog.ericlamb.net/wp-content/uploads/2009/09/learning-is-hard-300x205.jpg" alt="The Framework is the Language" width="300" height="205" /></a><p class="wp-caption-text">The Framework is the Language</p></div>
<blockquote><p>After about a month of working with the <a title="Zend Framework" href="http://framework.zend.com/" onclick="return TrackClick('http%3A%2F%2Fframework.zend.com%2F','Zend+Framework')" onclick="return TrackClick('http%3A%2F%2Fframework.zend.com%2F','Zend+Framework')" target="_blank">Zend Framework</a> I’m a little… bored with it. If this is what working with a framework is like I don’t want it (thank you very much). I, naively, thought using a framework would increase my productivity and highlight some of the joy I feel when developing and learning but, so far, all I have is frustration and a pretty heavy headache.</p></blockquote>
<p>Since then, I&#8217;ve spent some time looking at <a title="Symfony" href="http://www.symfony-project.org/" onclick="return TrackClick('http%3A%2F%2Fwww.symfony-project.org%2F','Symfony')" target="_blank">Symfony</a> (a fine, but overly complicated, framework), looking at <a title="Code Igniter" href="http://codeigniter.com/" onclick="return TrackClick('http%3A%2F%2Fcodeigniter.com%2F','Code+Igniter')" target="_blank">Code Igniter</a> and digging deeper into the <a title="Zend Framework" href="http://framework.zend.com/" onclick="return TrackClick('http%3A%2F%2Fframework.zend.com%2F','Zend+Framework')" onclick="return TrackClick('http%3A%2F%2Fframework.zend.com%2F','Zend+Framework')" target="_blank">Zend Framework</a>. It was while doing all of that, and struggling with the enormity of learning an entire freaking framework, that a thought occurred to me; I need to look at this as learning a new language instead of learning a component.</p>
<p>You can&#8217;t approach learning a framework as anything less than you would when learning a new language. Anything less and you&#8217;re in for pain. After this realization the framework came together pretty quickly though it still hurt like hell.</p>
<p>So, what does that mean? IMO you should have total absorption; learning a framework can not be done very effectively a couple hours at a time. Frameworks are just too damn big. They have too many parts and all the frameworks I&#8217;ve looked at seem to have very different philosophies in the architectural design and structure.</p>
<p>The strategy I took was, and the one I use when learning a new language BTW, is to make the project my world. Everything else is gone and all that&#8217;s left is the problem. There is no break, no rest and sleep is used to further solve problems more than it is to recharge. It&#8217;s really the only way I can accomplish something as complex and challenging as learning a new programming language.</p>
<p>The good news is that I now feel very comfortable using the Zend Framework though I still have my doubts as to how good of a decision it is to use a framework at all (that&#8217;s another discussion though).</p>
<div><a class="addthis_button" href="http://blog.ericlamb.net//addthis.com/bookmark.php?v=250" addthis:url='http://blog.ericlamb.net/2009/09/the-framework-is-the-language/' addthis:title='The Framework is the Language '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ericlamb.net/2009/09/the-framework-is-the-language/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Keeping an Eye on Your Development</title>
		<link>http://blog.ericlamb.net/2009/09/keeping-an-eye-on-your-development/</link>
		<comments>http://blog.ericlamb.net/2009/09/keeping-an-eye-on-your-development/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 13:00:42 +0000</pubDate>
		<dc:creator>Eric Lamb</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://blog.ericlamb.net/?p=2434</guid>
		<description><![CDATA[Oh, var_dump()&#8230; Poor, pathetic, little vardump()&#8230; There was a time when you were my favorite little go-to for debugging. Once upon a time, you were the end all be all of problem solving tools; this would be during my idiot phase of life. Not anymore though; thanks to some god (or whatever) someone smarter than [...]]]></description>
			<content:encoded><![CDATA[<p>Oh, var_dump()&#8230; Poor, pathetic, little vardump()&#8230; There was a time when you were my favorite little go-to for debugging. Once upon a time, you were the end all be all of problem solving tools; this would be during my idiot phase of life. Not anymore though; thanks to some god (or whatever) someone smarter than me (and apparently with more time on their hands) went and invented the Debug Toolbar.</p>
<div id="attachment_2440" class="wp-caption aligncenter" style="width: 264px"><a href="http://blog.ericlamb.net/wp-content/uploads/2009/09/spider-eye.jpg" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2Fwp-content%2Fuploads%2F2009%2F09%2Fspider-eye.jpg','Keeping+an+Eye+on+Your+Development')"><img class="size-medium wp-image-2440" title="Keeping an Eye on Your Development" src="http://blog.ericlamb.net/wp-content/uploads/2009/09/spider-eye-254x300.jpg" alt="Keeping an Eye on Your Development" width="254" height="300" /></a><p class="wp-caption-text">Keeping an Eye on Your Development</p></div>
<p>In case you didn&#8217;t know, a Debug Toolbar (I don&#8217;t know if that&#8217;s the universal name for it but it makes sense to me) is a nifty little widget that allows for easy access to all sorts of info on your web program. Since I work primarily in php that&#8217;s what I&#8217;m going focus on; I&#8217;m sure they&#8217;re available in other languages. Like most things; Google is your friend on this.</p>
<p>Usually, a Debug Toolbar contains information on included files, any sessions and cookies available, the database calls with timers and a breakdown of memory usage and performance.</p>
<p>Debug Toolbars usually work by encapsulating different code blocks or functions around &#8220;timer&#8221; functions to record the time it took for a block to run. All the Debug Toolbars I&#8217;ve used also included a memory component; really helps to see where the spikes are. There&#8217;s also the database integration; it&#8217;s just good sense to know where the bottlenecks are in a project.</p>
<p>As I said in the intro var_dump() is a handy little tool for debugging issues in php scripts. It works pretty well for small scripts but, the thing is, on larger projects it just becomes unpractical. Not only is it limited to arrays and objects but you have to manually place the call in the code and depending on the issue, you can get a HUGE amount of data back in a horrible tangle of strings. Makes XML look good.</p>
<p>Instead, using a Debug Toolbar, you get a nicely formatted unobtrusive way to keep an eye on how your code is performing while creating it. Needless to say, these are handy little tools.</p>
<h3>PHP_Debug</h3>
<p>A little disclosure: My first experience with a debug toolbar was with a really early, think pre alpha, version of <a title="PHP_Debug" href="http://www.php-debug.com/www/" onclick="return TrackClick('http%3A%2F%2Fwww.php-debug.com%2Fwww%2F','PHP_Debug')" target="_blank">PHP_Debug</a>. PHP_Debug, at that time, worked by displaying the debug information at the bottom of a <a title="PHP_Debug table example" href="http://www.php-debug.com/www/PHP_Debug_HTML_Table_test.php" onclick="return TrackClick('http%3A%2F%2Fwww.php-debug.com%2Fwww%2FPHP_Debug_HTML_Table_test.php','PHP_Debug+table+example')" onclick="return TrackClick('http%3A%2F%2Fwww.php-debug.com%2Fwww%2FPHP_Debug_HTML_Table_test.php','PHP_Debug+table+example')" target="_blank">page in a table</a>. This was definitely a step up from using var_dump(), to be sure, but it was still a little painful to decipher. Clients would complain.</p>
<p>Then PHP_Debug pretty much innovated the Microsoft way and copied a feature from another application; <a title="Symfony Debug Toolbar" href="http://www.symfony-project.org/blog/2008/08/27/new-in-symfony-1-2-customize-the-web-debug-toolbar" onclick="return TrackClick('http%3A%2F%2Fwww.symfony-project.org%2Fblog%2F2008%2F08%2F27%2Fnew-in-symfony-1-2-customize-the-web-debug-toolbar','Symfony+Debug+Toolbar')" target="_blank">Symfony</a>. (I kid, I kid.)</p>
<p>Seriously though, PHP_Debug does claim inspiration from the Symfony which I think is pretty classy of them; it seems too many times credit goes unsaid.</p>
<p>Keep in mind, this was the first time I saw anything like a debug toolbar. I don&#8217;t want to break down to hyperbole but to say the sky parted and angels sang would be a fucking understatement.</p>
<div id="attachment_2449" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ericlamb.net/wp-content/uploads/2009/09/php_debug_toolbar.png" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2Fwp-content%2Fuploads%2F2009%2F09%2Fphp_debug_toolbar.png','PHP_Debug+Toolbar')"><img class="size-medium wp-image-2449" title="PHP_Debug Toolbar" src="http://blog.ericlamb.net/wp-content/uploads/2009/09/php_debug_toolbar-300x9.png" alt="PHP_Debug Toolbar" width="300" height="9" /></a><p class="wp-caption-text">PHP_Debug Toolbar</p></div>
<p>PHP_Debug is perfect for those stand alone projects that are started from scratch. It&#8217;s not <em>impossible </em>to integrate PHP_Debug into an existing program, I&#8217;ve done it a few times, but unless you&#8217;ve abstracted out a good deal of the logic it&#8217;s going to be a little painful. Put aside a few hours if you&#8217;re going to attempt it.</p>
<p>The script displays the output in 2 different ways; through a <a title="PHP_Debug HTML_DIV Renderer" href="http://www.php-debug.com/www/PHP_Debug_HTML_Div_test.php" onclick="return TrackClick('http%3A%2F%2Fwww.php-debug.com%2Fwww%2FPHP_Debug_HTML_Div_test.php','PHP_Debug+HTML_DIV+Renderer')" target="_blank">floating div</a> at the top of a page or as an <a title="PHP_Debug table example" href="http://www.php-debug.com/www/PHP_Debug_HTML_Table_test.php" onclick="return TrackClick('http%3A%2F%2Fwww.php-debug.com%2Fwww%2FPHP_Debug_HTML_Table_test.php','PHP_Debug+table+example')" onclick="return TrackClick('http%3A%2F%2Fwww.php-debug.com%2Fwww%2FPHP_Debug_HTML_Table_test.php','PHP_Debug+table+example')" target="_blank">HTML table</a> displayed at the bottom of the page. <a title="PHP_Debug Installation" href="http://www.php-debug.com/www/install.php" onclick="return TrackClick('http%3A%2F%2Fwww.php-debug.com%2Fwww%2Finstall.php','PHP_Debug+Installation')" target="_blank">Installation</a> is pretty easy and straightforward, either as a PEAR module or as a stand alone script.</p>
<h3>ZFDebug</h3>
<p><a title="ZFDebug" href="http://code.google.com/p/zfdebug/" onclick="return TrackClick('http%3A%2F%2Fcode.google.com%2Fp%2Fzfdebug%2F','ZFDebug')" target="_blank">ZFDebug</a> is a plugin for the Zend Framework that acts pretty much like PHP_Debug except with a simple and easy integration into the Zend Framework and it&#8217;s quite a bit slicker. Smooth animations, version details, sticky states and full of detail. If you use the Zend Framework I can&#8217;t recommend it highly enough.</p>
<div id="attachment_2444" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ericlamb.net/wp-content/uploads/2009/09/ZFDebug-image.png" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2Fwp-content%2Fuploads%2F2009%2F09%2FZFDebug-image.png','ZFDebug')"><img class="size-medium wp-image-2444" title="ZFDebug" src="http://blog.ericlamb.net/wp-content/uploads/2009/09/ZFDebug-image-300x11.png" alt="ZFDebug" width="300" height="11" /></a><p class="wp-caption-text">ZFDebug</p></div>
<p>There are some <a title="ZFDebug Installation Instructions" href="http://code.google.com/p/zfdebug/wiki/Installation" onclick="return TrackClick('http%3A%2F%2Fcode.google.com%2Fp%2Fzfdebug%2Fwiki%2FInstallation','ZFDebug+Installation+Instructions')" target="_blank">installation instructions</a> which at the time of this writing are just broken though. Follow the linked instructions but use the below code in place of the code provided in the instructions:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">protected</span> <span style="color: #000000; font-weight: bold;">function</span> _initZFDebug<span style="color: #000;">&#40;</span><span style="color: #000;">&#41;</span>
<span style="color: #000;">&#123;</span>
    <span style="color: #000088;">$autoloader</span> <span style="color: #339933;">=</span> Zend_Loader_Autoloader<span style="color: #339933;">::</span><span style="color: #004000;">getInstance</span><span style="color: #000;">&#40;</span><span style="color: #000;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$autoloader</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registerNamespace</span><span style="color: #000;">&#40;</span><span style="color: #0000ff;">'ZFDebug'</span><span style="color: #000;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$options</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #000;">&#40;</span>
        <span style="color: #0000ff;">'plugins'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #000;">&#40;</span><span style="color: #0000ff;">'Variables'</span><span style="color: #339933;">,</span> 
                           <span style="color: #0000ff;">'File'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #000;">&#40;</span><span style="color: #0000ff;">'base_path'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'/path/to/project/'</span><span style="color: #000;">&#41;</span><span style="color: #339933;">,</span>
                           <span style="color: #0000ff;">'Memory'</span><span style="color: #339933;">,</span> 
                           <span style="color: #0000ff;">'Time'</span><span style="color: #339933;">,</span> 
                           <span style="color: #0000ff;">'Registry'</span><span style="color: #339933;">,</span> 
                           <span style="color: #0000ff;">'Exception'</span><span style="color: #000;">&#41;</span>
    <span style="color: #000;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Instantiate the database adapter and setup the plugin.
</span>    <span style="color: #666666; font-style: italic;"># Alternatively just add the plugin like above and rely on the autodiscovery feature.
</span>    <span style="color: #22f;">if</span> <span style="color: #000;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasPluginResource</span><span style="color: #000;">&#40;</span><span style="color: #0000ff;">'db'</span><span style="color: #000;">&#41;</span><span style="color: #000;">&#41;</span> <span style="color: #000;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bootstrap</span><span style="color: #000;">&#40;</span><span style="color: #0000ff;">'db'</span><span style="color: #000;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$db</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getPluginResource</span><span style="color: #000;">&#40;</span><span style="color: #0000ff;">'db'</span><span style="color: #000;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getDbAdapter</span><span style="color: #000;">&#40;</span><span style="color: #000;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$options</span><span style="color: #000;">&#91;</span><span style="color: #0000ff;">'plugins'</span><span style="color: #000;">&#93;</span><span style="color: #000;">&#91;</span><span style="color: #0000ff;">'Database'</span><span style="color: #000;">&#93;</span><span style="color: #000;">&#91;</span><span style="color: #0000ff;">'adapter'</span><span style="color: #000;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$db</span><span style="color: #339933;">;</span>
    <span style="color: #000;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;"># Setup the cache plugin
</span>    <span style="color: #22f;">if</span> <span style="color: #000;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">hasPluginResource</span><span style="color: #000;">&#40;</span><span style="color: #0000ff;">'cache'</span><span style="color: #000;">&#41;</span><span style="color: #000;">&#41;</span> <span style="color: #000;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bootstrap</span><span style="color: #000;">&#40;</span><span style="color: #0000ff;">'cache'</span><span style="color: #000;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$cache</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getPluginResource</span><span style="color: #000;">&#40;</span><span style="color: #0000ff;">'cache'</span><span style="color: #000;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getDbAdapter</span><span style="color: #000;">&#40;</span><span style="color: #000;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$options</span><span style="color: #000;">&#91;</span><span style="color: #0000ff;">'plugins'</span><span style="color: #000;">&#93;</span><span style="color: #000;">&#91;</span><span style="color: #0000ff;">'Cache'</span><span style="color: #000;">&#93;</span><span style="color: #000;">&#91;</span><span style="color: #0000ff;">'backend'</span><span style="color: #000;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$cache</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getBackend</span><span style="color: #000;">&#40;</span><span style="color: #000;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000;">&#125;</span>
&nbsp;
    <span style="color: #000088;">$debug</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ZFDebug_Controller_Plugin_Debug<span style="color: #000;">&#40;</span><span style="color: #000088;">$options</span><span style="color: #000;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bootstrap</span><span style="color: #000;">&#40;</span><span style="color: #0000ff;">'frontController'</span><span style="color: #000;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$frontController</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getResource</span><span style="color: #000;">&#40;</span><span style="color: #0000ff;">'frontController'</span><span style="color: #000;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$frontController</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registerPlugin</span><span style="color: #000;">&#40;</span><span style="color: #000088;">$debug</span><span style="color: #000;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000;">&#125;</span></pre></div></div>

<p>Using ZFDebug is as simple as that. Once installed you&#8217;ll have a div laying at the bottom of the page with all the details you could want. Plus, it comes preinstalled with the hooks for database and cache profiling. It&#8217;s still possible to manually insert timing blocks but the hard part is already done for you. </p>
<h3>Symfony</h3>
<p>If you&#8217;re using Symfony you&#8217;re in luck (and none of this is probably news to you); Symfony comes with a Debug Toolbar (the original maybe?) preinstalled and read to use. All you have to do is either hit up frontend_dev.php in a browser or change:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$configuration</span> <span style="color: #339933;">=</span> ProjectConfiguration<span style="color: #339933;">::</span><span style="color: #004000;">getApplicationConfiguration</span><span style="color: #000;">&#40;</span><span style="color: #0000ff;">'frontend'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'prod'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #000;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>to</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$configuration</span> <span style="color: #339933;">=</span> ProjectConfiguration<span style="color: #339933;">::</span><span style="color: #004000;">getApplicationConfiguration</span><span style="color: #000;">&#40;</span><span style="color: #0000ff;">'frontend'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'dev'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #000;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>in your bootstrap file. </p>
<div id="attachment_2458" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ericlamb.net/wp-content/uploads/2009/09/symfony_toolbar.png" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2Fwp-content%2Fuploads%2F2009%2F09%2Fsymfony_toolbar.png','Symfony+Debug+Toolbar')"><img src="http://blog.ericlamb.net/wp-content/uploads/2009/09/symfony_toolbar-300x17.png" alt="Symfony Debug Toolbar" title="Symfony Debug Toolbar" width="300" height="17" class="size-medium wp-image-2458" /></a><p class="wp-caption-text">Symfony Debug Toolbar</p></div>
<p>It&#8217;s not as robust as PHP_Debug or ZFDebug out of the box (oddly, there&#8217;s no included file reference) but it does allow for <a href="http://www.symfony-project.org/cookbook/1_2/en/web_debug_toolbar" onclick="return TrackClick('http%3A%2F%2Fwww.symfony-project.org%2Fcookbook%2F1_2%2Fen%2Fweb_debug_toolbar','How+to+customize+the+Web+Debug+Toolbar')" target="_blank" title="How to customize the Web Debug Toolbar">customization</a> so it has the potential to be very informative and useful. </p>
<p>One last thing about Web Debug Toolbars; they aren&#8217;t a replacement for good practices. You can&#8217;t rely on them too much and sometimes your instinct will contradict the output of the toolbar. In my experience you should trust that instinct. A Web Debug Toolbar should only be used to provide insight not replace common sense.  </p>
<p>One thing to keep in mind is to not focus too much on the</p>
<div><a class="addthis_button" href="http://blog.ericlamb.net//addthis.com/bookmark.php?v=250" addthis:url='http://blog.ericlamb.net/2009/09/keeping-an-eye-on-your-development/' addthis:title='Keeping an Eye on Your Development '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ericlamb.net/2009/09/keeping-an-eye-on-your-development/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Eclipse for PHP Dev: One Month In</title>
		<link>http://blog.ericlamb.net/2009/09/eclipse-for-php-dev-one-month-in/</link>
		<comments>http://blog.ericlamb.net/2009/09/eclipse-for-php-dev-one-month-in/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 13:00:21 +0000</pubDate>
		<dc:creator>Eric Lamb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://blog.ericlamb.net/?p=2415</guid>
		<description><![CDATA[As I previously mentioned I&#8217;m using Eclipse IDE for a good deal of my php development at the moment. At first, I was a little skeptical of how much Eclipse would improve my productivity. Initially, it was kind of painful but after changing my work flow to work better with Eclipse I do admit it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>As I previously mentioned I&#8217;m using <a title="Eclipse IDE" href="http://eclipse.org/" onclick="return TrackClick('http%3A%2F%2Feclipse.org%2F','Eclipse+IDE')" target="_blank">Eclipse IDE</a> for a good deal of my php development at the moment. At first, I was a little skeptical of how much Eclipse would improve my productivity. Initially, it <em>was</em> kind of painful but after changing my work flow to work better with Eclipse I do admit it&#8217;s an improvement.</p>
<div id="attachment_2419" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ericlamb.net/wp-content/uploads/2009/08/eclipse-image.png" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2Fwp-content%2Fuploads%2F2009%2F08%2Feclipse-image.png','Eclipse+IDE')"><img class="size-medium wp-image-2419" title="Eclipse IDE" src="http://blog.ericlamb.net/wp-content/uploads/2009/08/eclipse-image-300x194.png" alt="Eclipse IDE" width="300" height="194" /></a><p class="wp-caption-text">Eclipse IDE</p></div>
<p>My initial &#8220;look&#8221; at Eclipse was <a title="Eclipse for PHP Developers" href="http://www.eclipse.org/downloads/packages/eclipse-php-developers/galileor" onclick="return TrackClick('http%3A%2F%2Fwww.eclipse.org%2Fdownloads%2Fpackages%2Feclipse-php-developers%2Fgalileor','Eclipse+for+PHP+Developers')" target="_blank">Eclipse for PHP Developers</a>; this was on my old laptop but sine I no longer had it I had to reinstall Eclipse again. This time I&#8217;m using Eclipse standard with the <a title="PHP Development Tools" href="http://www.eclipse.org/pdt/downloads/" onclick="return TrackClick('http%3A%2F%2Fwww.eclipse.org%2Fpdt%2Fdownloads%2F','PHP+Development+Tools')" target="_blank">PHP Developer Tools</a> (PDT) extensions added on instead. No real reason, &#8220;just &#8217;cause&#8221;.</p>
<h3>First the good.</h3>
<p>Right off, the most important and very coolest of the very cool features, is the built in function reference. I LOVE the ctrl+click feature! You can click on any function, class or method call and it will open the file containing that call. It&#8217;s really, REALLY, helpful. This feature is incredible, and one I&#8217;m sure isn&#8217;t unique to Eclipse. Still, after doing the alternative (see function, search for file with function, search for function in file and read) a feature like this is simply magical.</p>
<p>Hell, just hovering over an element will display the comment info if you used docblock style comments (you do write docblock comments right?).</p>
<div id="attachment_2421" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ericlamb.net/wp-content/uploads/2009/08/code-inspector.png" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2Fwp-content%2Fuploads%2F2009%2F08%2Fcode-inspector.png','Eclipse+Code+Inspector')"><img class="size-medium wp-image-2421" title="Eclipse Code Inspector" src="http://blog.ericlamb.net/wp-content/uploads/2009/08/code-inspector-300x122.png" alt="Eclipse Code Inspector" width="300" height="122" /></a><p class="wp-caption-text">Eclipse Code Inspector</p></div>
<p>Combining the above two features pretty much kills off a pretty signifigant portion of development; digging through code looking for something.</p>
<p>But wait! There&#8217;s more:</p>
<p>There&#8217;s also the integration with <a title="Subversion" href="http://subversion.tigris.org/" onclick="return TrackClick('http%3A%2F%2Fsubversion.tigris.org%2F','Subversion')" target="_blank">Subversion</a>; it requires an add-on plugin to work but work it does. It&#8217;s a little confusing to use at first, but after reading <a title="How to use Subversion with Eclipse" href="http://www.ibm.com/developerworks/opensource/library/os-ecl-subversion/" onclick="return TrackClick('http%3A%2F%2Fwww.ibm.com%2Fdeveloperworks%2Fopensource%2Flibrary%2Fos-ecl-subversion%2F','How+to+use+Subversion+with+Eclipse')" target="_blank">How to use Subversion with Eclipse</a> article by IBM it started to make sense. I started working with Eclipse before I dug into the Subversion integration so the change to workflow was a little disruptive at first. If you&#8217;re planning on using Subversion you should definately check out the Subversion integration <em>before</em> using Eclipse full time.</p>
<p>One last thing about the Subversion plugin; it&#8217;s written by the same guys (<a title="Subclipse" href="http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA" onclick="return TrackClick('http%3A%2F%2Fsubclipse.tigris.org%2Fservlets%2FProjectProcess%3FpageID%3Dp4wYuA','Subclipse')" target="_blank">CollabNet</a>) who make <a title="TortoiseSVN" href="http://tortoisesvn.tigris.org/" onclick="return TrackClick('http%3A%2F%2Ftortoisesvn.tigris.org%2F','TortoiseSVN')" target="_blank">TortoiseSVN</a> <em>and </em>Subversion itself so you can still use Tortoise if you want to. I appreciate that.</p>
<p>One of my first &#8220;misconceptions&#8221; was that there wasn&#8217;t any FTP or SFTP functionality. This is <em>technically </em>true but there is a plugin that handles this in a basic manner. There isn&#8217;t any way to work directly on the server (by this I mean, upload on save type functionality) but you can download and upload files to a server using either FTP or SFTP.</p>
<h3>Now the petty, petty, stuff</h3>
<p>One gripe I have is that Eclipse doesn&#8217;t syntax highlight <a title="Smarty" href="http://smarty.net" onclick="return TrackClick('http%3A%2F%2Fsmarty.net','Smarty')" target="_blank">Smarty</a> tags; not even the HTML is syntax highlighted.</p>
<p>I was also hoping for some sort of customization on the syntax highlighting colors. Personally, I like the colors to be a little more vibrant than most IDEs default to. Small gripe to be sure but it would have been nice to have.</p>
<p>At this stage I haven&#8217;t really dug into the build process but from what I&#8217;ve read it should be able to improve the deployment work. Since I do php work I&#8217;m hoping &#8220;deployment work&#8221; means automated replication and setup. I know there&#8217;s ANT integration but having never used ANT before this is a whole other discussion.</p>
<p>Still, all and all Eclipse isn&#8217;t bad. Not even close. I still use EditPlus for <em>some</em> development, especially since there isn&#8217;t remote access, but more and more I&#8217;m finding myself open Eclipse for the real work.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">http://eclipse.org/</div>
<div><a class="addthis_button" href="http://blog.ericlamb.net//addthis.com/bookmark.php?v=250" addthis:url='http://blog.ericlamb.net/2009/09/eclipse-for-php-dev-one-month-in/' addthis:title='Eclipse for PHP Dev: One Month In '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ericlamb.net/2009/09/eclipse-for-php-dev-one-month-in/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fiddler Web Debugger</title>
		<link>http://blog.ericlamb.net/2009/08/fiddler-web-debugger/</link>
		<comments>http://blog.ericlamb.net/2009/08/fiddler-web-debugger/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 13:00:16 +0000</pubDate>
		<dc:creator>Eric Lamb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://blog.ericlamb.net/?p=1818</guid>
		<description><![CDATA[Let&#8217;s not kid ourselves: web development isn&#8217;t that hard. Nope, the server side stuff (php, .NET, etc) or even what happens in the browser (JavaScript, CSS, etc) isn&#8217;t too difficult. Not all of it&#8217;s easy though; sometimes when dealing with the HTTP level things can get a little&#8230; random. In FireFox I use a couple [...]]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s not kid ourselves: web development isn&#8217;t that hard. Nope, the server side stuff (php, .NET, etc) or even what happens in the browser (JavaScript, CSS, etc) isn&#8217;t too difficult. Not all of it&#8217;s easy though; sometimes when dealing with the HTTP level things can get a little&#8230; random.</p>
<div id="attachment_2168" class="wp-caption aligncenter" style="width: 287px"><a href="http://blog.ericlamb.net/wp-content/uploads/2009/07/FiddlerLogo.png" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2Fwp-content%2Fuploads%2F2009%2F07%2FFiddlerLogo.png','Fiddler+Web+Debugger')"><img class="size-full wp-image-2168" title="Fiddler Web Debugger" src="http://blog.ericlamb.net/wp-content/uploads/2009/07/FiddlerLogo.png" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2Fwp-content%2Fuploads%2F2009%2F07%2FFiddlerLogo.png','Fiddler+Web+Debugger')" alt="Fiddler Web Debugger" width="277" height="84" /></a><p class="wp-caption-text">Fiddler Web Debugger</p></div>
<p>In FireFox I use a couple plugins to help make HTTP debugging a little less painful; HttpFox and the venerable FireBug. There&#8217;s also a cool tool called <a title="Fiddler Web Debugger" href="http://www.fiddler2.com/fiddler2/" onclick="return TrackClick('http%3A%2F%2Fwww.fiddler2.com%2Ffiddler2%2F','Fiddler+Web+Debugger')" target="_blank">Fiddler</a> written by Eric Lawrence of Microsoft.</p>
<blockquote><p>Fiddler is a Web Debugging Proxy which logs all HTTP(S) traffic between your computer and the Internet. Fiddler allows you to inspect all HTTP(S) traffic, set breakpoints, and &#8220;fiddle&#8221; with incoming or outgoing data. Fiddler includes a powerful event-based scripting subsystem, and can be extended using any .NET language.</p>
<p>Fiddler is freeware and can debug traffic from virtually any application, including Internet Explorer, Mozilla Firefox, Opera, and thousands more.</p></blockquote>
<p>First, it should be noted that Fiddler is covered under a Microsoft license. That might matter to you or your company&#8230;</p>
<p>Anyway, in order to get Fiddler to work with anything other than IE, I&#8217;m talking about programs like FireFox or similar, you have to do some tampering and configuring of Windows, including the registry, along with the program you want ot send requests from, so for now I only tested it using IE (this can&#8217;t last though; I&#8217;m just NOT going to develop in IE).</p>
<p>Fiddler does the basic HTTP sniffing you&#8217;d expect but it also has tools to inspect and tamper with the data in the traffic; this is where HttpFox and Firebug drop the ball. Fiddler allows you to see the basics as you would expect any HTTP sniffer to allow but also displays out an XML rendering as well as the Hex view (if you need that sort of thing).</p>
<p>You can mess with a bunch of the different parts of the session including the session itself using custom built &#8220;rules&#8221;. These rules are written in JavaScript and contain commands that extend Fiddlers UI to allow for extensibility. Needless to say, this is a cool part of the tool.</p>
<p>Another really cool feature of Fiddler is that it can hook into the session for pretty much any Microsoft program that connects to the Internet like Microsoft Office. (I&#8217;d always been curious what connections Office makes while open and finding that out scratched a long standing itch.)</p>
<p>It&#8217;s definitely worth a look if you need to debug any HTTP traffic (AJAX anyone?).</p>
<div><a class="addthis_button" href="http://blog.ericlamb.net//addthis.com/bookmark.php?v=250" addthis:url='http://blog.ericlamb.net/2009/08/fiddler-web-debugger/' addthis:title='Fiddler Web Debugger '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ericlamb.net/2009/08/fiddler-web-debugger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s In Your Toolbox?</title>
		<link>http://blog.ericlamb.net/2009/08/whats-in-your-toolbox/</link>
		<comments>http://blog.ericlamb.net/2009/08/whats-in-your-toolbox/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 14:04:00 +0000</pubDate>
		<dc:creator>Eric Lamb</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Servers]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[virtual machines]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[web server]]></category>

		<guid isPermaLink="false">http://blog.ericlamb.net/?p=2284</guid>
		<description><![CDATA[One thing almost all computer users have in common, regardless of vocation, is that we use the computer to achieve some goal. The actual goal doesn&#8217;t matter so much as the fact that we&#8217;re using the computer to do something that, otherwise, we wouldn&#8217;t be able to do. To do so though we use various [...]]]></description>
			<content:encoded><![CDATA[<p>One thing almost all computer users have in common, regardless of vocation, is that we use the computer to achieve some goal. The actual goal doesn&#8217;t matter so much as the fact that we&#8217;re using the computer to do something that, otherwise, we wouldn&#8217;t be able to do. To do so though we use various tools that are, usually, purpose built for the task.</p>
<p>Let&#8217;s be honest; without the tools we would be useless.</p>
<div id="attachment_2285" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ericlamb.net/wp-content/uploads/2009/08/toolbox.jpg" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2Fwp-content%2Fuploads%2F2009%2F08%2Ftoolbox.jpg','What')"><img class="size-medium wp-image-2285" title="What's in your Toolbox?" src="http://blog.ericlamb.net/wp-content/uploads/2009/08/toolbox-300x279.jpg" alt="What's in your Toolbox?" width="300" height="279" /></a><p class="wp-caption-text">What&#39;s in your Toolbox?</p></div>
<p>Personally I love my tools; specifically, I find developer tools to be some of the most interesting and <em>fun </em>toys available. I don&#8217;t want this to turn into a fanboy post but, in the interest of honesty, it just might. You have been warned&#8230;</p>
<h3>What&#8217;s in my Web Developer Toolbox?</h3>
<p>My toolbox is full of programs that are <em>purpose built</em> to help every step along the way for building Internet applications. Over the years, like pretty much all developers I&#8217;d guess,  I&#8217;ve come to rely on the below tools to ease the pain of development as much as possible. I totally vouch for these tools.</p>
<h4>Version Control</h4>
<p>This one&#8217;s crucial. If I had to rank these (and I really don&#8217;t plan to) version control would be at the top of the list. There&#8217;s a whole slew of options available but, for me, version control starts and ends with <a title="Subversion" href="http://subversion.tigris.org/" onclick="return TrackClick('http%3A%2F%2Fsubversion.tigris.org%2F','Subversion')" target="_blank">Subversion</a>.</p>
<p>Yes, there are all sorts of hype surrounding <a title="GIT" href="http://git-scm.com/" onclick="return TrackClick('http%3A%2F%2Fgit-scm.com%2F','GIT')" target="_blank">GIT</a> and <a title="Mercurial" href="http://mercurial.selenic.com/wiki/" onclick="return TrackClick('http%3A%2F%2Fmercurial.selenic.com%2Fwiki%2F','Mercurial')" target="_blank">Mercurial</a> but, because right now, I work alone my needs are way too simple for anything like distributed version control. Nope; just give me <a title="Tortoise SVN" href="http://tortoisesvn.tigris.org/" onclick="return TrackClick('http%3A%2F%2Ftortoisesvn.tigris.org%2F','Tortoise+SVN')" target="_blank">Tortoise</a> and an SVN URL, with credentials, and I&#8217;m a happy camper.</p>
<h4>Local Development Web Server</h4>
<p>Once upon a time the thought of using a local development web server was heresy to my style and philosophy. Now that I&#8217;ve been using one for the last year I have to admit I was dead wrong. Dumb even.</p>
<p>Previously, I would always use an external Linux server for all my development. The idea was that since the finished site would be hosted on a Linux server it was important to develop the site in the same environment. There are 2 big problems with this approach though; one is that the project is more likely to be <em>dependent</em> on the environment which can make relocation a problem, and two, is that continued progress on the project requires a connection to the Internet.</p>
<p>On the other hand, developing your projects on a local machine requires finesse and forethought to ensure porting the site from one environment to another doesn&#8217;t lead to anarchy. There&#8217;s also the knowledge and insight gained from setting up an environment by hand; there&#8217;s so much to gain from doing this it&#8217;s just silly not to without some edge condition.</p>
<h4>Text Editor</h4>
<p>Only masochists use Notepad for text editing. In today&#8217;s world of fast CPUs and large amounts of RAM it&#8217;s really hard to believe anyone would use Notepad for anything other than the most basic of <em>basic</em> editing tasks. If you plan on having a file open, for editing, for any extended period of time it&#8217;s just stupid (yes; STUPID) to use it.</p>
<p>Instead, I prefer <a title="EditPlus" href="http://www.editplus.com/" onclick="return TrackClick('http%3A%2F%2Fwww.editplus.com%2F','EditPlus')" target="_blank">EditPlus</a> for all my text editing needs. Why? For one killer feature; a right click context menu item. Right click over any file and choose EditPlus to open the file for editing; it makes working very fluid and continuous.  It even handles files in the hundreds of MBs with ease.</p>
<p>There are other options for a text editor (Notepad2 comes to mind) but EditPlus is tough to beat.</p>
<h4>Database Tools</h4>
<p>Sure, a command line tool is perfectly adequate for administering a database server. The problem though is that I develop on a Windows machine and not using a GUI tool for database administration is kind of silly. It&#8217;s like the people who only use VIM for text editing; it&#8217;s like trying to prove a point against all logic.</p>
<p>Using MySQL, the easiest, and most familiar tool, is <a title="phpMyAdmin" href="http://www.phpmyadmin.net/" onclick="return TrackClick('http%3A%2F%2Fwww.phpmyadmin.net%2F','phpMyAdmin')" target="_blank">phpMyAdmin</a>; but for remote administration phpMyAdmin starts to break down. Instead, you can&#8217;t beat the <a title="MySQL GUI Tools" href="http://dev.mysql.com/downloads/gui-tools/" onclick="return TrackClick('http%3A%2F%2Fdev.mysql.com%2Fdownloads%2Fgui-tools%2F','MySQL+GUI+Tools')" target="_blank">MySQL Administrator</a>. It offers all the functionality as phpMyAdmin as well as a slew of advanced functionality like the ability to create stored procedures (which you should never, ever, do) and functions.</p>
<h4>Remote Connectivity</h4>
<p>Since pretty much everything I work on has to go <em>somewhere</em> and I usually need to connect directly to a server for administration I need tools that&#8217;ll allow me access. These tools really come down to 3; FTP, SSH and RDP.</p>
<p>For simply moving files between servers FTP or SFTP is obviously the choice. There&#8217;s bunches and bunches of options when it comes to FTP clients but I&#8217;ve been using <a title="CuteFTP" href="http://www.globalscape.com/cuteftppro/" onclick="return TrackClick('http%3A%2F%2Fwww.globalscape.com%2Fcuteftppro%2F','CuteFTP')" target="_blank">CuteFTP</a> for years and, pretty much, I swear by it. Yes, it&#8217;s a paid product but CuteFTP is also low impact, easy to use and, more important, doesn&#8217;t get in the way of my productivity.</p>
<p>And then there&#8217;s system administration which requires full control and access to a server or computer.</p>
<p>Linux has SSH which requires a small client utility. There&#8217;s a shitload of options available here but they&#8217;re all pretty similar so there&#8217;s not much difference between using, say, PuTTy or SSH Secure Shell Client (or any of the myriad other SSH clients out there). You just need to have one.</p>
<p>For Windows as far as I&#8217;m concerned there&#8217;s really only 2 options; Remote Desktop Connection (RDP) and VNC. For ease of use and quality of experience RDP is the way to go. HINT: There&#8217;s a setting to allow mapping of HDDs on the client machine to the server for easier file transfers.</p>
<h4>Virtual Machines</h4>
<p>In my opinion there&#8217;s been no bigger advance in quality assurance (QA) then the advent of the virtual machine (VM). QA probably wasn&#8217;t even a goal when VMs were first conceived but, boy, have they filled the gap well.</p>
<p>I&#8217;ve already gone into detail about my choice of VM tool as being Virtual Box:</p>
<blockquote><p>VirtualBox handles the resource detail pretty elegantly; in that it doesn’t use the resource until it needs it. This means that instead of instantly having 10GB of your hard drive used up VirtualBox will only use the amount already taken. You can tweak the settings for a VM whenever you want so you can get just the right mix.</p></blockquote>
<h4>Web Browsers</h4>
<p>You need pretty much every <em>modern</em> browser<em> </em>under the sun here. Um&#8230; duh?</p>
<p>So, there you go; those are the primary tools I use for web development. There are definitely some other tools I use that didn&#8217;t make the list (RegexBuddy, Photoshop and diff tools come to mind) but I didn&#8217;t feel they deserved mention because of how rare they&#8217;re used.</p>
<p>Did I miss anything else?</p>
<div><a class="addthis_button" href="http://blog.ericlamb.net//addthis.com/bookmark.php?v=250" addthis:url='http://blog.ericlamb.net/2009/08/whats-in-your-toolbox/' addthis:title='What&#8217;s In Your Toolbox? '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ericlamb.net/2009/08/whats-in-your-toolbox/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Bad Behavior Spam Blocker Part 1</title>
		<link>http://blog.ericlamb.net/2009/05/the-bad-behavior-spam-blocker-part-1/</link>
		<comments>http://blog.ericlamb.net/2009/05/the-bad-behavior-spam-blocker-part-1/#comments</comments>
		<pubDate>Fri, 08 May 2009 13:38:54 +0000</pubDate>
		<dc:creator>Eric Lamb</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[bad behavior]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://blog.ericlamb.net/?p=1504</guid>
		<description><![CDATA[Anyone with a blog has seen comment spam. This is the stuff that shows up talking about Viagra, written in Russia and are usually stuffed with links. There are a couple tactics for combating this sort of thing; some sites require registration to comment, some people manually delete the stuff and some sites use technology [...]]]></description>
			<content:encoded><![CDATA[<p>Anyone with a blog has seen comment spam. This is the stuff that shows up talking about Viagra, written in Russia and are usually stuffed with links. </p>
<p>There are a couple tactics for combating this sort of thing; some sites require registration to comment, some people manually delete the stuff and some sites use technology to help. </p>
<div id="attachment_1591" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ericlamb.net/wp-content/uploads/2009/04/bad_behavior.jpg" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2Fwp-content%2Fuploads%2F2009%2F04%2Fbad_behavior.jpg','Bad+Behavior')"><img src="http://blog.ericlamb.net/wp-content/uploads/2009/04/bad_behavior-300x199.jpg" alt="Bad Behavior" title="Bad Behavior" width="300" height="199" class="size-medium wp-image-1591" /></a><p class="wp-caption-text">Bad Behavior</p></div>
<p>What to do? What to do&#8230;?</p>
<p>Well, I don&#8217;t think it&#8217;s a good idea to add barriers in front of users participating in a discussion, so registration is out. I&#8217;m pretty lazy and don&#8217;t want to manually delete comment spam so moderation isn&#8217;t going to work. I am a programmer though so I have an innate confidence in technology to deal with this (mostly anyway). To that end I like to use 2 different services to deal with comment spam; Akismet, which I&#8217;m not going to talk about now, and <a href="http://www.bad-behavior.ioerror.us/" onclick="return TrackClick('http%3A%2F%2Fwww.bad-behavior.ioerror.us%2F','Bad+Behavior')" title="Bad Behavior" target="_blank">Bad Behavior</a>. </p>
<p>According to the official site:</p>
<blockquote><p>
Bad Behavior complements other link spam solutions by acting as a gatekeeper, preventing spammers from ever delivering their junk, and in many cases, from ever reading your site in the first place. This keeps your site’s load down, makes your site logs cleaner, and can help prevent denial of service conditions caused by spammers.
</p></blockquote>
<p>Thankfully, there are already WordPress plugins for both Akismet and Bad Behavior, so my blog is pretty well protected, but I also work on custom programs and need to protect them too. This got me thinking about how to to get Bad Behavior up and running on your systems; which is why you&#8217;re here I&#8217;m sure.</p>
<p>Like most things php, installing Bad Behavior is pretty easy. To install just <a href="http://www.bad-behavior.ioerror.us/download/" onclick="return TrackClick('http%3A%2F%2Fwww.bad-behavior.ioerror.us%2Fdownload%2F','Download+Bad+Behavior')" title="Download Bad Behavior" target="_blank">download the files</a>, unzip and place the files somewhere in your applications include path. Then just include the below preferably in a file included in all your pages after you upload the files. Using the below will only protect your site</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$path_to_bb</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/path/to/'</span><span style="color: #339933;">;</span>
<span style="color: #22f;">require_once</span><span style="color: #000;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$path_to_bb</span>/bad-behavior-generic.php&quot;</span><span style="color: #000;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>The above is nice and all; your site&#8217;s pretty well protected from there but it would be nice to know what was happening behind the scenes. Just how many spam attempts are being blocked?</p>
<p>Bad Behavior does include a logging system but, oddly, at the time of this writing using 2.0.26, they don&#8217;t include any sort of install script. The instructions state:</p>
<blockquote><p>
If you just can’t live without logging, you will need to provide a database connection. Bad Behavior uses callbacks whenever it needs to run a database query; in order to provide this functionality, you will need to provide the appropriate hooks into your PHP-based software’s database and add them into the bad-behavior-generic.php file. The code has stub functions which show what is needed, and you can use the bad-behavior-wordpress.php file as an example to work from, though your implementation will necessarily be different.
</p></blockquote>
<p>I&#8217;ll go into detail in the next post; I&#8217;m still <a href="http://blog.ericlamb.net/2009/05/yeah-yeah-yeah-ive-been-sick/" onclick="return TrackClick('http%3A%2F%2Fblog.ericlamb.net%2F2009%2F05%2Fyeah-yeah-yeah-ive-been-sick%2F','Yeah%2C+Yeah%2C+Yeah%3B+I%E2%80%99ve+been+Sick%E2%80%A6')" title="Yeah, Yeah, Yeah; I’ve been Sick…">sick</a> so I can&#8217;t write anymore. </p>
<div><a class="addthis_button" href="http://blog.ericlamb.net//addthis.com/bookmark.php?v=250" addthis:url='http://blog.ericlamb.net/2009/05/the-bad-behavior-spam-blocker-part-1/' addthis:title='The Bad Behavior Spam Blocker Part 1 '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div>]]></content:encoded>
			<wfw:commentRss>http://blog.ericlamb.net/2009/05/the-bad-behavior-spam-blocker-part-1/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

