<?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/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>BrandonSavage.net</title>
	<atom:link href="http://www.brandonsavage.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.brandonsavage.net</link>
	<description>The personal blog of Brandon Savage. Contains entries of a personal and professional nature focusing on PHP, Apple, LAMP, MySQL and Washington, DC.</description>
	<lastBuildDate>Mon, 15 Jun 2009 00:22:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>David Pogue, Are You Kidding Me?</title>
		<link>http://www.brandonsavage.net/david-pogue-are-you-kidding-me/</link>
		<comments>http://www.brandonsavage.net/david-pogue-are-you-kidding-me/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 00:18:48 +0000</pubDate>
		<dc:creator>Brandon Savage</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[keychain]]></category>
		<category><![CDATA[protection]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.brandonsavage.net/?p=425</guid>
		<description><![CDATA[Shortly after my lunch I saw the following tweet from David Pogue, technology columnist for the The New York Times.


Given Pogue&#8217;s large following, I was disappointed by the advice he gave.
A secure password on a laptop isn&#8217;t to keep semi-trusted people off of it. It&#8217;s to keep it protected in the event that the hard [...]]]></description>
			<content:encoded><![CDATA[<p>Shortly after my lunch I saw the following tweet from David Pogue, technology columnist for the The New York Times.<br />
<span id="more-425"></span><br />
<a href="http://www.brandonsavage.net/wp-content/uploads/2009/06/Picture-1.jpg"><img src="http://www.brandonsavage.net/wp-content/uploads/2009/06/Picture-1.jpg" alt="David Pogue Tweet" title="David Pogue Tweet" width="527" height="75" class="alignright size-full wp-image-426" /></a></p>
<p>Given Pogue&#8217;s large following, I was disappointed by the advice he gave.</p>
<p>A secure password on a laptop isn&#8217;t to keep semi-trusted people off of it. It&#8217;s to keep it protected in the event that the hard drive is lost. Arguably, the drive could be removed and read without booting it, removing all password protection, but a good password combined with disk encryption can help protect data from theft.</p>
<p>Pogue argues that he doesn&#8217;t need a password for security, but any information that is stored on file servers or worse, in his keychain, is accessible with that simple password he is using. Failing to have a secure password not only places his data at risk, but the data of those he might know or work with.</p>
<p>Even if gaining physical access (e.g. finding the computer or stealing it) would grant a person a huge advantage, this is not an excuse to make the password so incredibly simple. And for one of the most well-known technology columnists to suggest otherwise to his 444,666 followers is negligent, bordering on criminal.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonsavage.net/david-pogue-are-you-kidding-me/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Moving On</title>
		<link>http://www.brandonsavage.net/moving-on/</link>
		<comments>http://www.brandonsavage.net/moving-on/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 12:19:26 +0000</pubDate>
		<dc:creator>Brandon Savage</dc:creator>
				<category><![CDATA[Friday Inspirations]]></category>

		<guid isPermaLink="false">http://www.brandonsavage.net/?p=422</guid>
		<description><![CDATA[Today is my last day at The Bivings Group. Yesterday was my last effective day; as I write this, I&#8217;m flying over West Virginia on my way to a friend&#8217;s wedding in California.
Starting June 22nd, I&#8217;ll be working for Applied Security. I&#8217;ve learned a lot at The Bivings Group, and worked on a lot of [...]]]></description>
			<content:encoded><![CDATA[<p>Today is my last day at The Bivings Group. Yesterday was my last effective day; as I write this, I&#8217;m flying over West Virginia on my way to a friend&#8217;s wedding in California.</p>
<p>Starting June 22nd, I&#8217;ll be working for Applied Security. I&#8217;ve learned a lot at The Bivings Group, and worked on a lot of great projects, including The Pickens Plan. I&#8217;ll miss the friends I made, but I&#8217;m glad that I&#8217;ll be able to see them again at the developer&#8217;s group meetings and conferences.</p>
<p>Good luck to the folks at The Bivings Group. See you soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonsavage.net/moving-on/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Of Community</title>
		<link>http://www.brandonsavage.net/of-community/</link>
		<comments>http://www.brandonsavage.net/of-community/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 00:19:08 +0000</pubDate>
		<dc:creator>Brandon Savage</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[phpc]]></category>

		<guid isPermaLink="false">http://www.brandonsavage.net/?p=419</guid>
		<description><![CDATA[The PHP Community is a fairly large, rules-free community of people who share a common interest in programming. Many of us hang out on Twitter, our own blogs, or on IRC (usually on Freenode #phpc). So some events of the day certainly caught me by surprise.
This afternoon, while hanging out in a lesser known channel, [...]]]></description>
			<content:encoded><![CDATA[<p>The PHP Community is a fairly large, rules-free community of people who share a common interest in programming. Many of us hang out on <a href="http://www.twitter.com/">Twitter</a>, our own blogs, or on IRC (usually on Freenode #phpc). So some events of the day certainly caught me by surprise.</p>
<p>This afternoon, while hanging out in a lesser known channel, I was kicked out for no reason besides the whim of the operator, <a href="http://derickrethans.nl/">Derick Rethans</a>. No warning, no rude comment on my part, just a joke followed by a kick. <a href="http://www.snipe.net/">Alison Lunde</a> was also kicked for a seemingly bogus reason. Another person was banned.</p>
<p>How could this be, two weeks after the &#8220;community conference,&#8221; which Derick himself attended?</p>
<p>I was furious. I felt betrayed, violated, attacked personally for something that shouldn&#8217;t have happened. I hadn&#8217;t been kicked out of an IRC channel since before I was a teenager; this was a personal insult and by God, I was ready to fight. I talked to a number of my friends in the PHP community and told them that this slight was beyond insulting; I was going to tear Derick a new one on my blog and wash my hands of the community forever. After all, everyone in the channel seemed to support this decision, right? They were all still there, hanging out, perhaps hoping they wouldn&#8217;t be next.</p>
<p>But a few hours went by, and a few things started to happen. First, a number of people in the community told me that leaving the community would hurt the community overall. Others told me they were beside themselves at Derick&#8217;s action, and wouldn&#8217;t be participating in any &#8220;elite&#8221; channels. I got a number of supportive emails. A number of people said &#8220;well if we can&#8217;t be a part of that channel, we&#8217;ll start our own&#8221; and did just that. Not to be exclusive &#8211; just to reduce the noise level.</p>
<p>As time went on I realized that the community really is larger than any one person. Even when one person does something inconsiderate or rude, that doesn&#8217;t and shouldn&#8217;t define the community. I was really ready to let Derick have it, to walk away, and to never be a part of the community ever again. But no one person defines the community, and no one person can shape it, no matter who they are. That&#8217;s the point of the PHP community.</p>
<p>Instead I&#8217;ll practice some forgiveness. Derick, you&#8217;re welcome in any channel I&#8217;m in, any time. Xdebug is fantastic and your book on dates and times is perhaps the preeminent work on the topic. Your contributions to the core of PHP and its documentation are unmatched by anyone, and with 130 presentations to your name, you certainly are accomplished. You&#8217;re a part of the community, and I welcome you.</p>
<p>For those wondering how to join the community, it&#8217;s easy. Show up in IRC, or come to a conference. Find your users group in your area, or join one of PHP&#8217;s many project mailing lists. If you need direction, <a href="http://elizabethmariesmith.com/">Elizabeth Smith</a> (<a href="http://twitter.com/auroraeosrose">@auroraeosrose</a>) always has direction on work that needs to be done in the community. Dive in, get involved, don&#8217;t be a jerk and meet people. Put on a thick skin, watch out for toes, put on your work clothes and get involved.</p>
<p>Tell them I sent you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonsavage.net/of-community/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>#tek09 &#8211; Day Two: A Hackathon And A Lesson</title>
		<link>http://www.brandonsavage.net/tek09-day-two-a-hackathon-and-a-lesson/</link>
		<comments>http://www.brandonsavage.net/tek09-day-two-a-hackathon-and-a-lesson/#comments</comments>
		<pubDate>Fri, 22 May 2009 04:30:30 +0000</pubDate>
		<dc:creator>Brandon Savage</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Friday Inspirations]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[phptek]]></category>
		<category><![CDATA[teaching]]></category>
		<category><![CDATA[tek]]></category>

		<guid isPermaLink="false">http://www.brandonsavage.net/?p=409</guid>
		<description><![CDATA[One of the greatest things about the PHP community is the willingness of people to help one another.
Picture this: you&#8217;ve got developers of all levels, working in the same room. They&#8217;ve been tasked with working on various open source projects. Only in PHP do you see expert level developers like Eli White, Matthew Turland and [...]]]></description>
			<content:encoded><![CDATA[<p>One of the greatest things about the PHP community is the willingness of people to help one another.</p>
<p>Picture this: you&#8217;ve got developers of all levels, working in the same room. They&#8217;ve been tasked with working on various open source projects. Only in PHP do you see expert level developers like <a href="http://www.eliw.com/">Eli White</a>, <a href="http://www.ishouldbecoding.com/">Matthew Turland</a> and <a href="http://blog.libssh2.org/">Sara Golemon</a> teaching more inexperienced developers (like myself!)</p>
<p>Also in the PHP community: Sara Goleman was having a debate with a younger programmer who insisted that for loops were slower than while and do-while loops. Upon examining the source she discovered that in fact it was wrong &#8211; and she promised to look into it. You won&#8217;t get that in the Rails community.</p>
<p>The best thing about conferences is the community around them. Non-assuming giants in code and contributions work alongside newbie developers to solve problems and discuss important issues. People are willing to teach and others are eager to learn, making the PHP community grow.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonsavage.net/tek09-day-two-a-hackathon-and-a-lesson/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#tek09 Day 1 &#8211; Some Mighty Sessions</title>
		<link>http://www.brandonsavage.net/tek09-day-1-some-mighty-sessions/</link>
		<comments>http://www.brandonsavage.net/tek09-day-1-some-mighty-sessions/#comments</comments>
		<pubDate>Thu, 21 May 2009 12:22:40 +0000</pubDate>
		<dc:creator>Brandon Savage</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://www.brandonsavage.net/?p=407</guid>
		<description><![CDATA[Day 1 sure started with a bang, with Andrei Zmievski doing a phenomenal keynote on the future of PHP. There were great photos, including the (in)famous &#8220;ball of nails&#8221; quote from Terry Chay. Then it was off to the breakout sessions.
Eli White knocked one out of the park with &#8220;Highly Scalable Web Applications&#8221; while Wez [...]]]></description>
			<content:encoded><![CDATA[<p>Day 1 sure started with a bang, with Andrei Zmievski doing a phenomenal keynote on the future of PHP. There were great photos, including the (in)famous &#8220;ball of nails&#8221; quote from Terry Chay. Then it was off to the breakout sessions.</p>
<p>Eli White knocked one out of the park with &#8220;Highly Scalable Web Applications&#8221; while Wez Furlong did a great job with &#8220;Getting It Done.&#8221; Liz Smith rocked the house with &#8220;SPL To The Rescue,&#8221; a talk that was so amazing it was being talked about at the cocktail party that night.</p>
<p>Off to dinner, I had a great conversation with Snipe, and then we went to the cocktail party where we heard presentations of twenty slides, twenty seconds each. A great &#8220;first day&#8221; (second for those who came to the tutorials) at php|tek.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonsavage.net/tek09-day-1-some-mighty-sessions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#tek09 &#8211; Tutorial Session Roundup</title>
		<link>http://www.brandonsavage.net/tek09-tutorial/</link>
		<comments>http://www.brandonsavage.net/tek09-tutorial/#comments</comments>
		<pubDate>Wed, 20 May 2009 12:18:19 +0000</pubDate>
		<dc:creator>Brandon Savage</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://www.brandonsavage.net/tek09-tutorial/</guid>
		<description><![CDATA[Tuesday started off with little fanfare but much anticipation as the tutorial day at php&#124;tek got underway. There were a lot of great tutorials, but I chose to attend the Security Boot Camp by Christian Wenz, and the Subversion tutorial by Lorna Mitchell and Matthew O&#8217;Phinney. 
Both tutorials were great, with the Subversion tutorial being [...]]]></description>
			<content:encoded><![CDATA[<p>Tuesday started off with little fanfare but much anticipation as the tutorial day at php|tek got underway. There were a lot of great tutorials, but I chose to attend the Security Boot Camp by Christian Wenz, and the Subversion tutorial by Lorna Mitchell and Matthew O&#8217;Phinney. </p>
<p>Both tutorials were great, with the Subversion tutorial being the more useful of the two for myself. Afterwards we all went out for some deep dish Chicago-style pizza which is an experience in itself. Deep dish Chicago piza is a pizza with a semi-thick crust and about two inches of cheese. The sauce is placed on top of the pizza (rather than between the crust and the cheese) to keep the cheese from drying out. It&#8217;s truly an experience.</p>
<p>Today starts the formal conference, and we&#8217;ll have some great sessions by Eli White, Chris Shiflett, Elizabeth Smith and others. I can&#8217;t wait!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonsavage.net/tek09-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>#tek09 &#8211; Getting Ready For php&#124;tek</title>
		<link>http://www.brandonsavage.net/tek09-getting-ready-for-phptek/</link>
		<comments>http://www.brandonsavage.net/tek09-getting-ready-for-phptek/#comments</comments>
		<pubDate>Sun, 17 May 2009 13:30:29 +0000</pubDate>
		<dc:creator>Brandon Savage</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[#tek09]]></category>
		<category><![CDATA[phptek]]></category>

		<guid isPermaLink="false">http://www.brandonsavage.net/?p=398</guid>
		<description><![CDATA[Next week is php&#124;tek in Chicago.
Every day I&#8217;ll be blogging, tweeting and generally writing about how the conference is going. It will be fresh, fast, and relevant.
Also, in conjunction with John Bafford and my company, The Bivings Group, we&#8217;ve set up an auto-updating php&#124;tek Twitter feed at http://twitter.bivings.com/. Note: Internet Explorer doesn&#8217;t work 100% well [...]]]></description>
			<content:encoded><![CDATA[<p>Next week is php|tek in Chicago.</p>
<p>Every day I&#8217;ll be blogging, tweeting and generally writing about how the conference is going. It will be fresh, fast, and relevant.</p>
<p>Also, in conjunction with <a href="http://www.bafford.com/">John Bafford</a> and my company, <a href="http://www.bivings.com/">The Bivings Group</a>, we&#8217;ve set up an auto-updating php|tek Twitter feed at <a href="http://twitter.bivings.com/">http://twitter.bivings.com/</a>. <strong>Note:</strong> Internet Explorer doesn&#8217;t work 100% well with this site, but Firefox, Chrome and Safari work perfectly.</p>
<p>So come and join us, in person, on Twitter, online. We&#8217;ll see you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonsavage.net/tek09-getting-ready-for-phptek/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress Caching Slides &#8211; Wordcamp Mid-Atlantic</title>
		<link>http://www.brandonsavage.net/wordpress-caching-slides-wordcamp-mid-atlantic/</link>
		<comments>http://www.brandonsavage.net/wordpress-caching-slides-wordcamp-mid-atlantic/#comments</comments>
		<pubDate>Sat, 16 May 2009 20:14:58 +0000</pubDate>
		<dc:creator>Brandon Savage</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[System Architecture]]></category>
		<category><![CDATA[#wordcampmidatl]]></category>
		<category><![CDATA[caching]]></category>
		<category><![CDATA[talk]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.brandonsavage.net/?p=401</guid>
		<description><![CDATA[Thanks everyone for a great Wordcamp Mid-Atlantic and for attending Wordpress Caching! Here are the slides so you can download them for your own resource.
Remember, these are licensed under the Creative Commons license: http://creativecommons.org/licenses/by-nc-sa/3.0/ or compatible license such as GPL. Please attribute me and don&#8217;t sell this content!
Download the slides here: Wordpress Caching
]]></description>
			<content:encoded><![CDATA[<p>Thanks everyone for a great Wordcamp Mid-Atlantic and for attending Wordpress Caching! Here are the slides so you can download them for your own resource.</p>
<p>Remember, these are licensed under the Creative Commons license: http://creativecommons.org/licenses/by-nc-sa/3.0/ or compatible license such as GPL. Please attribute me and don&#8217;t sell this content!</p>
<p>Download the slides here: <a href='http://www.brandonsavage.net/wp-content/uploads/2009/05/wordpresscaching.pdf'>Wordpress Caching</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonsavage.net/wordpress-caching-slides-wordcamp-mid-atlantic/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>In Defense Of Commenting</title>
		<link>http://www.brandonsavage.net/in-defense-of-commenting/</link>
		<comments>http://www.brandonsavage.net/in-defense-of-commenting/#comments</comments>
		<pubDate>Mon, 04 May 2009 16:30:59 +0000</pubDate>
		<dc:creator>Brandon Savage</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[code comment]]></category>
		<category><![CDATA[comment]]></category>
		<category><![CDATA[commenting]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://www.brandonsavage.net/?p=389</guid>
		<description><![CDATA[My article from last week, &#8220;On Code Commenting and Technical Debt&#8221; raised a lot of response throughout the community. I think that discussion is great, and I&#8217;m all for a debate that enhances the community. But I feel as though my argument has been taken a bit out of context.
To that end, here are five [...]]]></description>
			<content:encoded><![CDATA[<p>My article from last week, <a href="http://www.brandonsavage.net/on-code-commenting-and-technical-debt/">&#8220;On Code Commenting and Technical Debt&#8221;</a> raised <a href="http://mtabini.blogspot.com/2009/04/myth-of-myth-of-self-commenting-code.html">a lot</a> of <a href="http://blog.agilephp.com/2009/04/30/show-me-your-code-comments-and-ill-show-why-you-dont-need-them/">response</a> <a href="http://www.whitewashing.de/blog/articles/116">throughout</a> <a href="http://www.phpjack.com/content/comments-are-not-cure-or-disease">the</a> <a href="http://blog.agilephp.com/2009/05/02/most-confused-discussion-in-the-known-universe/">community</a>. I think that discussion is great, and I&#8217;m all for a debate that enhances the community. But I feel as though my argument has been taken a bit out of context.</p>
<p>To that end, here are five things that I believe commenting <em>is</em> and five things that commenting <em>is not</em>.</p>
<p><strong>5 Things Commenting IS NOT:</strong></p>
<ol>
<li> <strong>Commenting is not an excuse for bad code.</strong> Bad code is bad code, whether you comment it or not. If you&#8217;re going to write bade code, please stop and instead learn how to write good code. Good comments won&#8217;t make bad code any better. So commenting is not a crutch for bad code.</li>
<li><strong>Commenting doesn&#8217;t eliminate refactoring.</strong> A lot of the argument seemed to focus on refactoring code. Refactoring is good. Commenting is certainly not an excuse to abandon refactoring, assuming that someone who comes along next can just read the comments and understand. Comments cannot be used to try and remove the need for legitimate refactoring.</li>
<li><strong>Commenting is not for explaining every little thing about your code.</strong> Commenting is not for explaining what an if-else statement does. It&#8217;s for explaining WHY you have an if-else statement there. Good code should be commented only to explain the reasons behind something, not how something works. Programmers are logical, and they can figure it out.</li>
<li><strong>Commenting is not for justifying poor decisions.</strong> Bad code is second only to bad decisions. Architect your application well, rather than writing comments explaining why you didn&#8217;t.</li>
<li><strong>Commenting is not for documentation.</strong> This might get me into a bit of trouble, but listen closely: despite the fact that great applications exist (like phpDocumentor) commenting is not the same thing as documenting. Documenting involves discussing the signature, the return value, and the purpose. Commenting is leaving little notes about what you&#8217;re doing and why.</li>
</ol>
<p><strong>5 Things Commenting IS:</strong></p>
<ol>
<li><strong>Commenting is for leaving yourself notes.</strong> I often leave myself a note in the code. A to-do. A warning. A &#8220;hey this is not right but you didn&#8217;t have time to fix it this time around.&#8221; These are important. Code is always a work in progress, even if it&#8217;s production code (that&#8217;s why there&#8217;s versions of something &#8211; you&#8217;re going to eventually make it better).</li>
<li><strong>Commenting is for reminding yourself of decisions.</strong> If you&#8217;ve spent any time in programming you&#8217;ve come back to some code you wrote and gone &#8220;why did I do that?&#8221; Then you spend an hour trying to refactor it only to discover that it was right the first time, because you spent the same hour doing this a week ago. Why? Because there might be only one logical way to do something. Save yourself the time and write a reminder.</li>
<li><strong>Commenting is for cluing others to the decisions you made.</strong> If you&#8217;ve ever been asked to implement a relatively simple feature in a fairly complicated and complete application that you&#8217;ve never worked with before, you know the struggle it is to not introduce a bug. Comments can clue you in to why a developer made a particular decision (&#8221;a dependency over in X function needs this&#8221;) and avoid new bugs (or rewriting good code because you think it&#8217;s bad!).</li>
<li><strong>Commenting is for highlighting your weaknesses for future correcton.</strong> Lots of times you may not have a great solution but you implement something that&#8217;s going to need fixing later. Rather than leaving no comments and having the next developer think you&#8217;re stupid, you can give them an idea that you know it&#8217;s not the best answer. You also can immediately highlight weak spots that you identified when you wrote it the first time.</li>
<li><strong>Commenting is for passing messages between the generations.</strong> <a href="http://www.caseysoftware.com/">Keith Casey</a> reminded us in the last conversation that anywhere from 50% to 90% of the software lifecycle is maintaining that code once you&#8217;ve written it, and most of the time you&#8217;re not going to be the one to maintain it. Comments allow you to pass notes between your generation and the future. If you&#8217;re maintaining a software package, or developing a new version, you can leave comments to warn about some ridiculously odd backwards compatibility hack you wrote. You can use comments to alert them to a function that supports a legacy operation. You can leave comments to tell the future programmers important things about your code.</li>
</ol>
<p><em>Not</em> doing these things is the accrual of <a href="http://www.brandonsavage.net/on-code-commenting-and-technical-debt/">technical debt</a> in the way I described it last week. Because not commenting for these reasons makes your code harder to understand and your application more difficult to maintain, incurring an &#8220;interest payment&#8221; in order to gain understanding. </p>
<p>Commenting should be used with care. Commenting is not a crutch, and it&#8217;s not a fix for bad programming. But when used effectively, it can and does provide a powerful way to communicate ideas, without bloating your code, as some have suggested. And though each programmer&#8217;s style might be different, and each shop might hold a different set of rules, the one theme that should ring true is that commenting should be used for helping programmers. That&#8217;s what it&#8217;s there for.</p>
<p><em>Acknowledgments for this blog entry really belong to the whole community. Your comments, suggestions, criticisms, and ideas formed the five points for each, and though I&#8217;m the one who assembled them in one place, it was truly a community effort.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonsavage.net/in-defense-of-commenting/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>On Code Commenting And Technical Debt</title>
		<link>http://www.brandonsavage.net/on-code-commenting-and-technical-debt/</link>
		<comments>http://www.brandonsavage.net/on-code-commenting-and-technical-debt/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 16:30:33 +0000</pubDate>
		<dc:creator>Brandon Savage</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[code commenting]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[self-documenting code]]></category>
		<category><![CDATA[technical debt]]></category>

		<guid isPermaLink="false">http://www.brandonsavage.net/?p=383</guid>
		<description><![CDATA[If you&#8217;ve been in development for any length of time, you&#8217;ve probably come across a project or a company that doesn&#8217;t take the time to incorporate comments into its code. The argument is often made that &#8220;our code is self-documenting&#8221; and that commenting is just a waste of time, especially if you write clear, clean [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve been in development for any length of time, you&#8217;ve probably come across a project or a company that doesn&#8217;t take the time to incorporate comments into its code. The argument is often made that &#8220;our code is self-documenting&#8221; and that commenting is just a waste of time, especially if you write clear, clean code. But I disagree.</p>
<p>Some people take a different view of commenting than others. Most recently, <a href="http://www.eliw.com/">Eli White</a> wrote an article called <a href="http://phpadvent.org/2008/commenting-on-comments-by-eli-white">&#8220;Commenting on Commenting&#8221;</a> in which he argued for commenting virtually every single line of code. He talked about working for a company where they stripped the code out and turned the comments into line-by-line documentation. But commenting to me is important for a different reason:</p>
<p>Failure to comment is simply the accrual of <a href="http://www.brandonsavage.net/paying-down-technical-debt/">technical debt</a>. </p>
<p>Technical debt is the cost of fixing things that you didn&#8217;t fix at a particular point because it would have been too costly. This cost can be in time or money, but represents additional effort that must be made. How does this apply to commenting?</p>
<p>Assume it takes one additional hour per file to write clear, complete comments. To save that hour now, you do not comment your code (before or after you write it), delivering the product faster. However, the next developer to come along and work on that code is going to have to learn about it. Assuming that it would take them an hour to learn about it with comments, and four hours to learn about it without comments, the two hours you saved by not commenting (the hour to comment, and the hour to read them) has cost you four hours of a developer relearning your code, for a total cost of 2 extra hours.</p>
<p>This clearly isn&#8217;t worth it.</p>
<p>Undoubtedly somewhere out there someone is going to say something like &#8220;wait a minute, Brandon! What if it takes less time?&#8221; If it actually takes less time, fine. You got lucky. Think back on your prior experiences, though. The cleanest code you&#8217;ve ever seen written by <strong>somebody else</strong> &#8211; how long did it take you to learn? The problem comes not because we write bad code or are sloppy in our design. It comes because we&#8217;re human beings and we have to understand the logic before we can modify it. It&#8217;s the same reason a doctor who specializes in the heart must understand the other body systems before he can do surgery &#8211; even if he never treats any other organs, he must understand how they work together. In the same way, a programmer must understand the logic behind code before they can modify it, and failure to adequately justify your architecture incurs a cost.</p>
<p>This myth of self-documenting code needs to be squashed once and for all. Commenting is important, and unless your code does nothing other than display &#8220;Hello World!&#8221; it&#8217;s going to need some explanation. </p>
<p><em>Marco Tabini, a man I deeply respect, posted a rebuttal to my argument <a href="http://mtabini.blogspot.com/2009/04/myth-of-myth-of-self-commenting-code.html">here</a>. I recommend you read it, as he made some really great points.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonsavage.net/on-code-commenting-and-technical-debt/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>#followfriday &#8211; Those That Influence Me Most</title>
		<link>http://www.brandonsavage.net/five-influential-php-developers-followfriday/</link>
		<comments>http://www.brandonsavage.net/five-influential-php-developers-followfriday/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 04:30:59 +0000</pubDate>
		<dc:creator>Brandon Savage</dc:creator>
				<category><![CDATA[Friday Inspirations]]></category>
		<category><![CDATA[appreciation]]></category>
		<category><![CDATA[grace]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[thanks]]></category>

		<guid isPermaLink="false">http://www.brandonsavage.net/?p=330</guid>
		<description><![CDATA[I&#8217;m a big believer in giving credit where credit is due. There are a number of people who have influenced my experience as a programmer, and I want to take time on this Friday to talk about and thank each one of them individually. Oh, and they&#8217;re all on Twitter in case you want to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a big believer in giving credit where credit is due. There are a number of people who have influenced my experience as a programmer, and I want to take time on this Friday to talk about and thank each one of them individually. Oh, and they&#8217;re all on Twitter in case you want to go participate in #followfriday and add them to your list.</p>
<p>The five I picked have been influential in my development as a programmer, and I owe each of them a debt of gratitude. I wanted to highlight them, as they&#8217;re A-list members of the PHP community and people everyone should know. So, in no particular order&#8230;<br />
<span id="more-330"></span><br />
<strong><a href="http://ishouldbecoding.com/">Matthew Turland</a> (<a href="http://www.twitter.com/elazar">@elazar</a>)</strong><br />
<a href="http://www.brandonsavage.net/wp-content/uploads/2009/03/matthew.jpg"><img src="http://www.brandonsavage.net/wp-content/uploads/2009/03/matthew-150x150.jpg" alt="Matthew Turland" title="Matthew Turland" width="150" height="150" class="alignright size-thumbnail wp-image-327" /></a> Matthew Turland is the Researcher. Matt always has an article or blog entry about something I&#8217;m thinking about, and he&#8217;s known among his peers as being someone who carefully researches things, and writes and works carefully. I&#8217;ve learned from Matt that there&#8217;s probably someone else who&#8217;s already thought about my problem, and that a little bit of good research goes a long way. As Keith Casey put it, &#8220;Matt is meticulous, precise, and always working to understand it better.&#8221;</p>
<p>As a community member, Matt has contributed Phergie, an IRC bot that runs around on <a href="http://www.freenode.net/">Freenode</a> in many of the PHP channels. His contribution is certainly appreciated&#8230;if not painful (I&#8217;ve been &#8220;popped&#8221; many-a-time by that bot ;-)).</p>
<p><strong><a href="http://blog.calevans.com/">Cal Evans</a> (<a href="http://twitter.com/calevans">@calevans</a>)</strong><br />
<a href="http://www.brandonsavage.net/wp-content/uploads/2009/03/cal.jpg"><img src="http://www.brandonsavage.net/wp-content/uploads/2009/03/cal-150x150.jpg" alt="Cal Evans" title="Cal Evans" width="150" height="150" class="alignleft size-thumbnail wp-image-322" /></a>When it comes to encouragement, Cal Evans has it nailed. Cal is the Encourager. Cal always has a friendly word and has always encouraged me. From introducing me to colleagues to talking about ideas and projects, I can count on Cal for a friendly smile and a word of encouragement. Cal&#8217;s blog is always full of small bits of wisdom and I really like that he&#8217;s active in the community. Cal was best known as Zend&#8217;s Community Guy before he moved over to iBuildings, where we miss him dearly (since he&#8217;s in the Netherlands).</p>
<p>Cal really embodies the idea that you catch more flies with honey rather than vinegar. I&#8217;ve learned from him that a dollop of encouragement goes miles farther than a pound of anger or yelling. His posts on management style are particularly useful for the day when I&#8217;ll have to lead a team. Cal&#8217;s an invaluable member of the PHP community.</p>
<p><strong><a href="http://caseysoftware.com/">Keith Casey</a> (<a href="http://twitter.com/caseysoftware">@caseysoftware</a>)</strong><br />
<a href="http://www.brandonsavage.net/wp-content/uploads/2009/03/keith.jpg"><img src="http://www.brandonsavage.net/wp-content/uploads/2009/03/keith-150x150.jpg" alt="Keith Casey" title="Keith Casey" width="150" height="150" class="alignright size-thumbnail wp-image-324" /></a>From my own personal experience, Keith Casey is the Enforcer. Keith never hesitates to smack me around when I need it, and he doesn&#8217;t put up with much guff. This is a good thing, because I&#8217;m known to be a bit of a pain in the ass. But not with Keith. He&#8217;s smart, sees through crap, doesn&#8217;t put up with much, is willing to tell it like it is, has unimpeachable honesty and integrity, and is above reproach. The community is better off because Keith is in it, and I&#8217;m a better programmer because I know him.</p>
<p>Perhaps the most important aspect is that Keith doesn&#8217;t seem to hold a grudge. The same guy who smacks me around also drinks alongside me at the monthly Beverage Subgroups and is still a lot of fun to be with. Opinionated, honest, and usually right, Keith is one of my most valued influences.</p>
<p><strong><a href="http://www.eliw.com/">Eli White</a> (<a href="http://twitter.com/eliw">@eliw</a>)</strong><br />
<a href="http://www.brandonsavage.net/wp-content/uploads/2009/03/eli.jpg"><img src="http://www.brandonsavage.net/wp-content/uploads/2009/03/eli-150x150.jpg" alt="Eli White" title="Eli White" width="150" height="150" class="alignleft size-thumbnail wp-image-326" /></a>If you ever see PHP code that has 10,000 lines of commenting and runs thousands of loops a second without breaking, it was probably done by PHP&#8217;s MacGyver, Eli White. Eli&#8217;s time as an employee of <a href="http://www.digg.com/">Digg</a> gave him a look at systems many of us will never get, and the opportunity to solve problems most of us will never experience. But it also made Eli into one of PHP&#8217;s pre-eminent developers. As Eli will probably tell you, we&#8217;ve had many a debate where I&#8217;ve said something as a blanket statement and he&#8217;s corrected me &#8211; and he&#8217;s almost always 100% right. </p>
<p>Eli has taught me that there&#8217;s a lot you can do with PHP if you&#8217;re creative enough to figure it out. And that there sometimes is an exception to a well established rule (e.g. running MySQL queries inside a loop). Without him, I don&#8217;t think I&#8217;d have tried some of the things that I have tried, and I know that I&#8217;d be a worse off developer. Eli&#8217;s contribution has been invaluable.</p>
<p><strong><a href="http://doboard.com/">Barry Austin</a> (<a href="http://twitter.com/barryaustin">@barryaustin</a>)</strong><br />
<a href="http://www.brandonsavage.net/wp-content/uploads/2009/03/barry.jpg"><img src="http://www.brandonsavage.net/wp-content/uploads/2009/03/barry-150x150.jpg" alt="Barry Austin" title="Barry Austin" width="150" height="150" class="alignright size-thumbnail wp-image-323" /></a>My experience with Barry Austin has led me to see him as being Wise. Barry always presents a well-thought response to any query, thinks carefully, and has excellent advice. When you ask Barry something, he&#8217;s going to think about it before he gives you his answer. He&#8217;s got lots of experience in security, managing teams, and working with people, and his thoughtful responses always reflect his experience. Barry has taught me the value of careful contemplation, and I deeply respect this about him. I know that I can ask Barry about anything and the response he&#8217;ll give me will be well considered and match the wisdom I have come to know from him.</p>
<p>As a community member, Barry is an important voice for strategy and direction. The DC PHP developer&#8217;s group is better because of Barry, and anyone that knows him would agree.</p>
<p>So who are your strongest influences? These are mine, but everyone has people that influence them . While I&#8217;m not going to try and start a meme, whereby these five now have to write about it, thanking people never goes out of style. So take some time and thank those that matter to you, that have invested in your career, that have mentored you.</p>
<p>Happy Friday. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonsavage.net/five-influential-php-developers-followfriday/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Marketing for PHP Developers</title>
		<link>http://www.brandonsavage.net/marketing-for-php-developers/</link>
		<comments>http://www.brandonsavage.net/marketing-for-php-developers/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 04:30:20 +0000</pubDate>
		<dc:creator>Brandon Savage</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.brandonsavage.net/?p=279</guid>
		<description><![CDATA[A discussion recently took place between myself and a few others regarding what constitutes effective marketing, and how technical people can sell their technical wares. The measure of good marketing, of course, is not hard to identify: it&#8217;s how effectively your marketing translates into sales. However, there&#8217;s a large gap in many people&#8217;s understandings of [...]]]></description>
			<content:encoded><![CDATA[<p>A discussion recently took place between myself and a few others regarding what constitutes effective marketing, and how technical people can sell their technical wares. The measure of good marketing, of course, is not hard to identify: it&#8217;s how effectively your marketing translates into sales. However, there&#8217;s a large gap in many people&#8217;s understandings of how you get your items out there and in front of people who are ready to buy.</p>
<p>Technical people seem particularly bad at marketing effectively. I think this is because we&#8217;re fact-oriented, focused on the features and neat ideas our products include. We&#8217;ll spend pages and pages talking about the cool things that our tool or application can do. And then we&#8217;ll wonder why our client didn&#8217;t buy it.</p>
<p>Why do we do this? Because we forget that marketing isn&#8217;t about <em>features</em> it&#8217;s about <em>meeting needs</em>.<br />
<span id="more-279"></span><br />
Consider if you were going to market a pen. Would you talk about the features of the pen &#8211; it&#8217;s ability to write upside down, it&#8217;s ability to write in black, and the fact that it would last for three months? No, you&#8217;d talk about how good it feels in your hand, how great it makes your pocket look, and how writing with that pen is going to get you a promotion. Why? Because features don&#8217;t sell products &#8211; meeting needs do. In this case, your marketing would meet the need of comfort, security, and exclusivity.</p>
<p><div id="attachment_287" class="wp-caption alignright" style="width: 310px"><a href="http://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs"><img src="http://www.brandonsavage.net/wp-content/uploads/2009/03/needs-300x196.png" alt="Hierarchy of Needs" title="Needs" width="300" height="196" class="size-medium wp-image-287" /></a><p class="wp-caption-text">Hierarchy of Needs</p></div>There is a <a href="http://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs">hierarchy of needs</a> that comes into play. This hierarchy plays a key role in the decision-making process, and our individual security in each level allows us to reach higher levels in the hierarchy. The more deeply we play to these needs, the more effective our marketing scheme will be. Marketing the pen plays into the Security and Esteem levels of the pyramid.</p>
<p>These principles are extremely important, but often overlooked by technical individuals. The person isn&#8217;t likely to buy just because our product has great features. It has to meet a need that they have. It has to fulfill some deep seeded concern &#8211; whether it be for job security, appreciation of others, or something similar. This isn&#8217;t license to be dishonest &#8211; don&#8217;t promise that your application will do things it cannot do or fulfill needs that it will not &#8211; but your marketing should be geared towards the hierarchy of needs.</p>
<p>Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonsavage.net/marketing-for-php-developers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Scaling Up: Picking The Right Setup</title>
		<link>http://www.brandonsavage.net/scaling-up-picking-the-right-setup/</link>
		<comments>http://www.brandonsavage.net/scaling-up-picking-the-right-setup/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 11:30:48 +0000</pubDate>
		<dc:creator>Brandon Savage</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[System Architecture]]></category>
		<category><![CDATA[Web Architecture]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[CDN]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[grid computing]]></category>
		<category><![CDATA[Mosso]]></category>
		<category><![CDATA[scaling]]></category>

		<guid isPermaLink="false">http://www.brandonsavage.net/?p=277</guid>
		<description><![CDATA[Now that your application is running at peak performance and you&#8217;ve decided that it&#8217;s time to scale, let&#8217;s talk about the right setup.
The modern age has brought us lots of new ways to take a growing site and scale it. From Amazon Web Services to cloud computing and grid computing, to Mosso and Akamai, there [...]]]></description>
			<content:encoded><![CDATA[<p>Now that your application is running at peak performance and you&#8217;ve decided that it&#8217;s time to scale, let&#8217;s talk about the right setup.</p>
<p>The modern age has brought us lots of new ways to take a growing site and scale it. From Amazon Web Services to cloud computing and grid computing, to Mosso and Akamai, there are lots of options we should consider. This article won&#8217;t make a recommendation as to which you should pick; it will simply discuss what each service has to offer and leave it up to you.<br />
<span id="more-277"></span><br />
<strong>The Old Fashioned Way: New Hardware</strong><br />
Your first option is the old standby, buying new hardware. This may be a viable and necessary option. For example, if the site is a local intranet, you may need to invest in hardware because you want to maintain the servers in house. You may also determine that your site needs new hardware regardless of how you scale in the cloud or on the grid. Adding your own hardware is probably your most expensive option, however, and requires a massive capital investment on your part. Still, it is an option that you may want to consider.</p>
<p><strong>The New-Fashioned Way: Dedicated Hosted Servers</strong><br />
<em><a href="http://www.josephscott.org/">Joseph Scott</a> pointed out a deficiency with this article, and that is that I failed to discuss dedicated hosted servers. I am correcting this deficiency, after his comment was posted.</em> It is possible to rent dedicated servers that are hosted elsewhere. This has the benefit of the dedicated servers purchased above, but the added benefit of not having the capital expense associated with buying a new server. Many companies exist that do this, including two of the largest, <a href="http://www.rackspace.com/">Rackspace</a> and <a href="http://www.mediatemple.com/">MediaTemple</a>.</p>
<p>A subset of the dedicated hosted server is the dedicated virtual server, which may offer the same performance for a bit less money. Rackspace&#8217;s subsidiary, <a href="http://www.slicehost.com/">Slicehost</a> provides this sort of service, and hosts BrandonSavage.net with no trouble.</p>
<p>Dedicated hosted and virtual servers are great because you don&#8217;t have to worry about uptime (that&#8217;s handled for you) and, in many cases, the software is installed for you by the company that owns the server. Still you have full control over the system, with the ability to configure it, and the server is usually a dedicated box reserved just for you, meaning you get the full benefit of the processor, RAM, and storage. And if something goes wrong at 3 am it&#8217;s someone else&#8217;s responsibility to fix it &#8211; and you can usually call them for help. </p>
<p>There are some drawbacks to virtual or dedicated servers. Namely, in the long run it can cost more to host than to own your own servers, especially if you already have a data center (though when you factor in the costs of renting data center space, connecting the servers and paying a systems administrator this might not be true). Also, getting a second server set up can sometimes take some time &#8211; I remember a particular example where a company I worked for had a fast growing site that needed to scale immediately and was told by one company that it would take seven days to install a load balancer. &#8220;Seven days!&#8221; they exclaimed. &#8220;We need this in seven HOURS.&#8221; (The company was ultimately able to work with our timeframe.)</p>
<p><strong>Using The Cloud: Amazon Web Services</strong><br />
Amazon has a number of new web services that allow you to create virtual servers almost on command. These servers can be started up and shut down at will, meaning they make it easier to scale up and down as needed. Amazon charges by the hour for these services, as well as by how much data you&#8217;re using and how much space you need. You can check out the full compliment of Amazon services by going to their website, <a href="http://aws.amazon.com/">http://aws.amazon.com/</a>. Amazon offers virtual servers, a data store, and hosting in both the United States and Europe (for an additional charge).</p>
<p>The benefit of using Amazon&#8217;s web services is that you can scale up more quickly, your data is less prone to hardware failure, and you have the ability to create instances of servers on a whim while paying only for the time you actually use. The drawbacks are that your servers are hosted by someone else; the services can also be expensive if you have a high traffic site, and the servers do have some time to start up meaning you have to monitor load and anticipate additional needs. Also, Amazon does not yet provide an automatic load balancer, so you&#8217;ll still have to add new servers to your pool.</p>
<p><strong>Automated Scaling: Services Like Mosso</strong><br />
It&#8217;s becoming popular now to use services that are capable of scaling on demand &#8211; that is, they can accept more traffic and allocate more resources to your site as they are needed. The obvious benefit is that your site will always be able to handle new traffic, but the drawback is that these services are somewhat expensive.</p>
<p><a href="http://www.mosso.com/">Mosso</a> is one service that does this. They advertise that you&#8217;ll always have space, bandwidth and processors to handle traffic. Mosso is owned by Rackspace, who has a fantastic reputation amongst the development community and is well trusted. Some users at the <a href="http://www.dcphp.net/">DC PHP Developer&#8217;s Group</a> reported that Mosso has some latency issues, however, from the database and PHP servers being different from the web servers, so this may be a concern to some users. Still, this option provides the ability to scale quickly and without monitoring.</p>
<p><strong>Delivering Content: CDNs</strong><br />
Not using a Content Delivery Network (CDN)? Why not? CDNs are great for many things: delivering content that never changes (static pages), reducing server load, and reducing latency for people who are located around the world.</p>
<p>In short, a CDN is a service that distributes your content and delivers it to individuals based on their location. So someone in Asia sees your content on a server based in Asia, while someone in Brooklyn sees it on a server based in Upstate New York. CDNs also allow you to send your content to their servers to be cached, reducing the number of hits to your servers.</p>
<p><a href="http://www.akamai.com/">Akamai</a> is probably one of the biggest CDNs around the world. Their rates are reasonable, and they have lots of servers. Some of their clients include Google and Myspace, so they&#8217;re well known and reliable. There are others, which you can find with a Google search. </p>
<p>The benefits of a CDN are that your files are delivered faster to people seeking your site and your traffic to your actual servers is reduced, as the CDN takes on much of the processing power required to serve pages. The drawback is that dynamic pages cannot be delivered very effectively by a CDN, meaning that for dynamic pages you&#8217;ll still have to send people to your site, for the most part. Still, in terms of delivering images, static content, and files, CDNs can be reliable and reasonable for reducing the load on your servers.</p>
<p><strong>Conclusion</strong><br />
This is a lot of information to digest, and there&#8217;s a lot of different options out there for you to consider. You should pick the one (or combination of the ones) that suit your application and needs the best. Don&#8217;t try and implement everything, as you&#8217;ll never succeed; instead, study carefully, and invest well. You&#8217;ll be on your way to scaling your site in no time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonsavage.net/scaling-up-picking-the-right-setup/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<series:name><![CDATA[Scaling Up]]></series:name>
	</item>
		<item>
		<title>What Matters Most (Job Hunt Advice)</title>
		<link>http://www.brandonsavage.net/what-matters-most-job-hunt-advice/</link>
		<comments>http://www.brandonsavage.net/what-matters-most-job-hunt-advice/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 04:00:57 +0000</pubDate>
		<dc:creator>Brandon Savage</dc:creator>
				<category><![CDATA[Personal Management]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[cover letter]]></category>
		<category><![CDATA[Employment]]></category>
		<category><![CDATA[job]]></category>
		<category><![CDATA[resume]]></category>

		<guid isPermaLink="false">http://www.brandonsavage.net/?p=304</guid>
		<description><![CDATA[Recently I&#8217;ve had the opportunity to review a number of resumes and cover letters, both through my professional endeavors and because of inadvertent posts to the DC PHP list from people replying to job postings.
One thing that strikes me as odd is the number of people who send cover letters riddled with errors.
For example:

dear sirs,
Im [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I&#8217;ve had the opportunity to review a number of resumes and cover letters, both through my professional endeavors and because of inadvertent posts to the DC PHP list from people replying to job postings.</p>
<p>One thing that strikes me as odd is the number of people who send cover letters riddled with errors.</p>
<p>For example:</p>
<blockquote><p>
dear sirs,</p>
<p>Im interested in applying for the position your advertising. I have 5 years experience developing applications. I attach a copy of my resume for your consideration.</p>
<p>Thanks.
</p></blockquote>
<p>Two things to note: first, this was made up, based on a common set of mistakes. Second, I&#8217;m presuming for the moment that the developer applying is a native English speaker and not someone from another country.</p>
<p>I&#8217;ve heard the argument that developers aren&#8217;t necessarily great writers, nor do they need to be. But I reject that argument for two reasons. First, email communications are critical to business and yes, though the message was communicated effectively, the message is still riddled with errors.</p>
<p>Second, poor English reflects on your programming abilities.</p>
<p>How so? </p>
<p>Programming languages are not that different from actual languages: each has a set of syntactical rules, a set of conventions, a set of best practices, and a way of doing things that&#8217;s specific to that language.</p>
<p>If you haven&#8217;t taken the time to learn how to communicate in your native language, what makes me think you&#8217;re going to be a capable programmer?</p>
<p>Developers, as you prepare cover letters and resumes, please read through them and have others do so, as well. Syntax is as important in English as it is in PHP; knowing the difference between your and you&#8217;re or there/their/they&#8217;re does matter, as does proper form in a formal letter (even if it&#8217;s being sent through email). Don&#8217;t jeopardize your chances by writing a crappy cover letter or resume.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonsavage.net/what-matters-most-job-hunt-advice/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Looking Back: Learning From Old Code</title>
		<link>http://www.brandonsavage.net/looking-back-learning-from-old-code/</link>
		<comments>http://www.brandonsavage.net/looking-back-learning-from-old-code/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 04:30:52 +0000</pubDate>
		<dc:creator>Brandon Savage</dc:creator>
				<category><![CDATA[Friday Inspirations]]></category>
		<category><![CDATA[Personal Management]]></category>
		<category><![CDATA[Web Architecture]]></category>
		<category><![CDATA[Code Reviews]]></category>
		<category><![CDATA[Code Samples]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.brandonsavage.net/?p=293</guid>
		<description><![CDATA[In 2007 I wrote a blogging program from scratch. I was really proud of it, too. It was all my own invention, with a little help that I got from a Facebook developer I knew, and I worked really hard on it. Spent the whole summer writing it so I&#8217;d be able to launch it [...]]]></description>
			<content:encoded><![CDATA[<p>In 2007 I wrote a blogging program from scratch. I was really proud of it, too. It was all my own invention, with a little help that I got from a Facebook developer I knew, and I worked really hard on it. Spent the whole summer writing it so I&#8217;d be able to launch it in time to blog from Washington, when I moved here. When I started looking for coding jobs, I gave them the website address as an example of my work.</p>
<p>Turns out that it&#8217;s great they didn&#8217;t ask for a code sample.<br />
<span id="more-293"></span><br />
Here&#8217;s the actual code from the page that displays the entries&#8230;</p>
<pre class="brush: php">
&lt;?php
session_start();
$path = getcwd();
$path = $path.&#039;/includes/&#039;;

$page = &#039;entry&#039;;

include_once($path.&#039;header.inc.php&#039;);
include_once($path.&#039;dblogin.inc.php&#039;);
include_once($path.&#039;functions.inc.php&#039;);
echo &#039;&lt;script type=&quot;text/javascript&quot; src=&quot;ajax.js&quot;&gt;&lt;/script&gt;&#039;;
echo &#039;&lt;script type=&quot;text/javascript&quot; src=&quot;motionpack.js&quot;&gt;&lt;/script&gt;&#039;;

if(isset($_SESSION[&#039;admin&#039;]) AND $_SESSION[&#039;admin&#039;] &gt; 0)
	{
	echo &#039;&lt;script type=&quot;text/javascript&quot; src=&quot;admin_ajax.js&quot;&gt;&lt;/script&gt;&#039;;
	}

if(!isset($_GET[&#039;entryid&#039;]) OR $_GET[&#039;entryid&#039;] == false) { echo $err_1; include_once($path.&#039;footer.inc.php&#039;); die; }

if(isset($_SESSION[&#039;loggedin&#039;])) { $permissions = $_SESSION[&#039;permissions&#039;]; } ELSE { $permissions = &#039;1&#039;; }
$entryid = (int)$_GET[&#039;entryid&#039;];

$query = mysql_query(&quot;SELECT * FROM bb_entry WHERE id = &#039;$entryid&#039; AND permissions &lt;= &#039;$permissions&#039;&quot;);

if(mysql_numrows($query) == 0) { 

		echo &#039;&lt;p align=&quot;center&quot;&gt;&lt;font color=&quot;#FF0000&quot;&gt;&lt;b&gt;Error!&lt;/b&gt; You must log in before reading this entry.&lt;/font&gt;&lt;/p&gt;&#039;;

		echo &#039;&lt;form method=post action=&quot;login.php&quot;&gt;&#039;;
		echo &#039;&lt;p align=&quot;center&quot;&gt;&lt;b&gt;Username:&lt;/b&gt; &lt;input type=text name=username size=14 maxlength=16&gt;&lt;/p&gt;&#039;;
		echo &#039;&lt;p align=&quot;center&quot;&gt;&lt;b&gt;Password:&lt;/b&gt; &lt;input type=password name=password size=14 maxlength=16&gt;&lt;/p&gt;&#039;;
		echo &#039;&lt;p align=center&gt;&lt;input type=submit name=submit value=Submit&gt;&lt;/p&gt;&#039;;
		echo &#039;&lt;p align=&quot;center&quot; class=&quot;menu&quot;&gt;&lt;a href=&quot;forgot_password.php&quot;&gt;Forgot Your Password?&lt;/a&gt;&lt;/p&gt;&lt;/form&gt;&#039;;

include_once($path.&#039;footer.inc.php&#039;); die; }

if(empty($_SESSION[&#039;admin&#039;]) OR $_SESSION[&#039;admin&#039;] != 1) {
mysql_query(&quot;UPDATE bb_count SET count = count + 1 WHERE id = &#039;$entryid&#039;&quot;); }

if(isset($_SESSION[&#039;username&#039;]) AND $_SESSION[&#039;admin&#039;] != 1) { $user = $_SESSION[&#039;username&#039;];
if(mysql_numrows(mysql_query(&quot;SELECT entryid FROM bb_count_users WHERE user = &#039;$user&#039; AND entryid = &#039;$entryid&#039;&quot;)) == 0 AND isset($user))
	{
	mysql_query(&quot;INSERT INTO bb_count_users (user,entryid) VALUES (&#039;$user&#039;,&#039;$entryid&#039;)&quot;);
	}}

if(isset($_SESSION[&#039;admin&#039;]) AND $_SESSION[&#039;admin&#039;] == 1)
	{

	$raw_count = mysql_query(&quot;SELECT count FROM bb_count WHERE id = &#039;$entryid&#039;&quot;);
	$raw = mysql_result($raw_count,0,0);

	$string = &#039;&lt;p&gt;[ &lt;b&gt;Raw Count:&lt;/b&gt; &#039;.$raw.&#039; | &lt;a href=&quot;seevisits.php?entryid=&#039;.$entryid.&#039;&quot;&gt;See All Data&lt;/a&gt;] [ &lt;a href=&quot;makeentry.php?entryid=&#039;.$entryid.&#039;&quot;&gt;Edit&lt;/a&gt; | &lt;a href=&quot;deleteentry.php?entryid=172&quot;&gt;Delete&lt;/a&gt; ]&lt;p&gt;&#039;;

	}
	ELSE
	{
	$string = false;
	}
?&gt;
</pre>
<p>(This isn&#8217;t the entire file, as it would fill an entire 201 lines, but just a taste.)</p>
<p>I couldn&#8217;t believe this code. It was amazing to me that I wrote this! There are no functions, it&#8217;s completely procedural, and it&#8217;s a disaster.</p>
<p>But you know what? I learned something.</p>
<p>It helped me to realize how far I&#8217;ve come. It helped me to realize the improvements I&#8217;ve made. This was written in a time when I had no concept of objects, array or string functions, or even virtual hosts. That was a long time ago.</p>
<p>Take some time today and look at some of your old code. What can you learn from it? What does it tell you about the progress you&#8217;ve made and where you&#8217;re going? Relish in the old code, and the creativity it showed, and then remember how you felt when you wrote it. I know I&#8217;ll be doing the same thing.</p>
<p>Happy Friday!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brandonsavage.net/looking-back-learning-from-old-code/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
