<?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>MacdougalMedia</title>
	<atom:link href="http://macdougalmedia.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://macdougalmedia.com</link>
	<description>by Scott Macdougal Weaver</description>
	<lastBuildDate>Fri, 26 Feb 2010 01:39:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MemcacheD + PHP + MySQL = Dream Team</title>
		<link>http://macdougalmedia.com/2010/02/25/memcached-php-mysql-dream-team/</link>
		<comments>http://macdougalmedia.com/2010/02/25/memcached-php-mysql-dream-team/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 01:37:55 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[MemcacheD]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://macdougalmedia.com/?p=150</guid>
		<description><![CDATA[
When using development frameworks like CakePHP, Zend or even Smarty, I always took their ability to cache data for granted. After all, I hadn&#8217;t built all of my applications using frameworks and those that were lacking didn&#8217;t seem to be hurting too badly. It just seemed like a bonus for using their environments and while [...]]]></description>
			<content:encoded><![CDATA[<p><a title="memcached" href="http://memcached.org" target="_blank"><img class="alignnone size-full wp-image-154" title="memcached" src="http://macdougalmedia.com/wp-content/uploads/2010/02/memcached.jpg" alt="memcached" width="600" height="186" /></a></p>
<p>When using development frameworks like CakePHP, Zend or even Smarty, I always took their ability to cache data for granted. After all, I hadn&#8217;t built all of my applications using frameworks and those that were lacking didn&#8217;t seem to be hurting too badly. It just seemed like a bonus for using their environments and while I was very aware of the fact that caching reduces stress on the database, I hadn&#8217;t really built anything that was in dire need of caching as a means of improving overall functionality.</p>
<p>Once I started learning about memcached, I actually started to think about my non-frameworked applications and whether there were any noticeable lags. It wasn&#8217;t long before I had thought of a few glaringly obvious examples where (mem)caching could be used to significantly improve performance. But before I go into those examples, here is a brief explanation of what memcached does for you (taken directly from <a title="memcached" href="http://memcached.org" target="_blank">memcached.org</a>):</p>
<blockquote>
<div>
<div id="mc-is">
<h3>What is Memcached?</h3>
<p><strong>Free &amp; open source, high-performance, distributed  memory object caching system</strong>, generic in nature, but intended  for use in speeding up dynamic web applications by alleviating database  load.</p>
<p>Memcached is an in-memory key-value store for small chunks of  arbitrary data (strings, objects) from results of database calls, API  calls, or page         rendering.</p>
<p><strong>Memcached is simple yet powerful</strong>. Its simple  design promotes quick deployment, ease of development, and solves many  problems facing large data caches. Its <a href="http://code.google.com/p/memcached/wiki/Clients" target="_blank">API</a> is  available for most popular languages.</p>
</div>
</div>
</blockquote>
<p>So first on my list was <a title="Blogflare" href="http://www.blogflare.com" target="_blank">Blogflare.com</a>, with its MySQL-based statistical cruncher running on regular intervals and its PHP-based image tickers, the load on the database was strained on a very regular basis. I noticed if I just adjusted the simple database calls to push updates to memcached and then check memcached for data before I even touch the database, performance significantly increased on the front-end. Additionally, this same improvement was helpful in terms of serving out ticker images that are normally database-driven. With these two simple changes, load on the database dropped enough to make scaling much less of a pain. This is relevant, too, as the site has grown steadily over the past few months and shows no signs of stopping.</p>
<p>The next item on the list is one I can&#8217;t actually link you to but an application that I&#8217;ve built for the <a title="Claire Trevor School of the Arts" href="http://www.arts.uci.edu" target="_blank">University&#8217;s Art School</a> to handle finance planning and reporting for graduate students. After a few moments of thinking about its structure I realized the database is very read-heavy, particularly in the reporting area. Reports are generated from stored procedures and perform some pretty heavy calculations on each student&#8217;s data in order to provide administrators with a very accurate picture of spending and planned spending. Updating the database calls for insert/update/delete methods to perform calls to memcached first proved to be ENORMOUSLY effective at speeding up use of the database. While this helps to reduce load on the server, the most important factor in this case was how much better the overall user experience was. Lagginess became intermittent rather than constant.</p>
<p>When I was researching memcached and wondering about how such a thing would scale, I found a clipping from this article entitled <a title="How to Dramatically Speed Up Your Web Application: An Introduction to memcached" href="http://www.majordojo.com/2007/03/memcached-howto.php" target="_blank">How to Dramatically Speed Up Your Web Application: An Introduction to memcached</a> very helpful-</p>
<blockquote><p>No doubt if you took Computer Science in school you were cautioned of  the temptation to abuse caches because there is a law of diminishing  returns in regards to the size of your cache: the larger your cache gets  the more costly it is retrieve and store information within it.  Memcache however is not heavily constrained in this way, because the  cache at large is made up of lots of little caches. This allows  memcached to be much more responsive even when the cache itself begins  to reach sizes that might be really inefficient in other circumstances.</p></blockquote>
<p>So this little bit managed to assuage my fears and give me the confidence to jump right in and start testing it with my lesser-applications. The results, even this early, have been astounding and I can now see how they are a very vital part of modern web application development.</p>
]]></content:encoded>
			<wfw:commentRss>http://macdougalmedia.com/2010/02/25/memcached-php-mysql-dream-team/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Use jQuery to Tally Forms</title>
		<link>http://macdougalmedia.com/2009/12/11/use-jquery-to-tally-forms/</link>
		<comments>http://macdougalmedia.com/2009/12/11/use-jquery-to-tally-forms/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 23:41:00 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://macdougalmedia.com/?p=136</guid>
		<description><![CDATA[
Recently, I had the task of creating a simple form to be submitted to a specific department member here on campus. I felt this was a great opportunity to utilize jQuery and to see just how simple I could make adding new fields, since I wanted the form to be somewhat dynamic (adding/removing of inputs [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://macdougalmedia.com/wp-content/uploads/2009/12/travel_expenses.png"><img class="size-full wp-image-148 alignnone" title="Travel Expenses" src="http://macdougalmedia.com/wp-content/uploads/2009/12/travel_expenses.png" alt="Travel Expenses" width="616" height="245" /></a></p>
<p>Recently, I had the task of creating a simple form to be submitted to a specific department member here on campus. I felt this was a great opportunity to utilize jQuery and to see just how simple I could make adding new fields, since I wanted the form to be somewhat dynamic (adding/removing of inputs and such).</p>
<p>After trying a few methods here and there, I was able to utilize a few jQuery functions and a nice plugin (<a title="jQuery Format Currency" href="http://code.google.com/p/jquery-formatcurrency/" target="_blank">jquery-formatcurrency</a>) to make everything work as desired.</p>
<p>Here is what I came up with:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> total <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
&nbsp;
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.currency'</span><span style="color: #009900;">&#41;</span>.<span style="color: #000066;">blur</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		total <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
&nbsp;
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.add'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span>obj<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			total <span style="color: #339933;">+=</span> $<span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.subtract'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span>obj<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			total <span style="color: #339933;">-=</span> $<span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#total'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>total<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.currency'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">formatCurrency</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>symbol<span style="color: #339933;">:</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>What&#8217;s neat about this method is that it handles everything on the blur (loss of focus) of any element with the &#8216;currency&#8217; class applied. That means it won&#8217;t do anything to the field while a person is typing in it &#8212; annoying for some people &#8212; it waits until the user moves on to the next field or away from the field altogether.</p>
<p>The really cool part of what happens first is the mathematical operation. Notice the similarity between the following methods:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.add'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span>obj<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	total <span style="color: #339933;">+=</span> $<span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.subtract'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span>obj<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	total <span style="color: #339933;">-=</span> $<span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #CC0000;">1</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>The first method looks at all elements with the &#8216;add&#8217; class applied. The <strong>.each</strong> jQuery function cycles through each matched element and feeds two variables to the attached function: an incremented index and the object reference itself. This makes a tally extremely simple as jQuery will automagically cycle through all the elements you want to either add or subtract based on what class you have applied. The same applies to both classes and, of course, can be extended if you want to do more complex mathematics or formatting to your fields.</p>
<p>After these methods run, the <em>total</em> variable now holds the correct sum for all fields properly classed either &#8216;add&#8217; or &#8217;subtract.&#8217; This can now be applied to the input field with an id of &#8216;total&#8217;:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#total'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>total<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>This will set the &#8216;total&#8217; input field&#8217;s value to the sum of the fields.</p>
<p>Lastly, it will format all fields to currency using the <em>formatCurrency </em>function:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.currency'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">formatCurrency</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>symbol<span style="color: #339933;">:</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Notice I specify here that I do not want any currency symbol (e.g. &#8216;$&#8217;) as I specify that outside the field itself to display to the user.</p>
<p>Again, all of this happens every time a field gets updated and loses focus. So yes, it&#8217;s magic.</p>
]]></content:encoded>
			<wfw:commentRss>http://macdougalmedia.com/2009/12/11/use-jquery-to-tally-forms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I am a Web Ninja</title>
		<link>http://macdougalmedia.com/2009/12/11/i-am-a-web-ninja/</link>
		<comments>http://macdougalmedia.com/2009/12/11/i-am-a-web-ninja/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 10:22:07 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://macdougalmedia.com/?p=133</guid>
		<description><![CDATA[I doubt I&#8217;ll be applying for a job in Amsterdam anytime soon, but I thought I&#8217;d see if I could work my way through this test anyway. It doesn&#8217;t really involve any sort of real web development prowess, really, but it does require some reasonable know-how with Firebug (one of my most favorite tools ever).
The [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_134" class="wp-caption alignleft" style="width: 310px"><a href="http://macdougalmedia.com/wp-content/uploads/2009/12/thesedays-webninja.png"><img class="size-medium wp-image-134 " title="thesedays-webninja" src="http://macdougalmedia.com/wp-content/uploads/2009/12/thesedays-webninja-300x125.png" alt="Are you Ninja enough?" width="300" height="125" /></a><p class="wp-caption-text">Click to Enlarge</p></div>
<p>I doubt I&#8217;ll be applying for a job in Amsterdam anytime soon, but I thought I&#8217;d see if I could work my way through this test anyway. It doesn&#8217;t really involve any sort of real web development prowess, really, but it does require some reasonable know-how with <a title="Firebug" href="http://getfirebug.com/" target="_blank">Firebug</a> (one of my most favorite tools ever).</p>
<p>The test took me about five minutes (four of which was spent on number three), the last minute was spent on the other questions. That&#8217;s pretty decent in my mind, but who knows how well other people did?</p>
<p>I really like this style of interviewing though, and I think more companies should use it to weed out the riffraff. It does require a lot of creativity on the design end but, I&#8217;d imagine, reduces man hours (spent interviewing and processing) like crazy. If I ever hire more developers, I plan to come up with a puzzle test like this.</p>
<p>If you&#8217;re interested in seeing how you&#8217;ll do, <a title="Web Ninja Test" href="http://playground.thesedays.com/ninja/" target="_blank">click here to take the web ninja test</a>.</p>
<p>-Scott</p>
]]></content:encoded>
			<wfw:commentRss>http://macdougalmedia.com/2009/12/11/i-am-a-web-ninja/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Death To Internet Explorer 6! [Internet Explorer]</title>
		<link>http://macdougalmedia.com/2009/08/10/death-to-internet-explorer-6-internet-explorer/</link>
		<comments>http://macdougalmedia.com/2009/08/10/death-to-internet-explorer-6-internet-explorer/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 21:32:29 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Boycott Internet Explorer]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[Internet Explorer 6]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://macdougalmedia.com/?p=126</guid>
		<description><![CDATA[Well it&#8217;s about time.
It&#8217;s been nearly ten years of toiling over my CSS and Javascript, trying to give my websites a consistent look and feel across the board. Internet Explorer version 6 has been the bane of my existence and the thorn in my hide. My developer friends and I have discussed boycotting it at [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_127" class="wp-caption alignnone" style="width: 470px"><a href="http://www.cnn.com/2009/TECH/08/06/internet.explorer.six/index.html?iref=mpstoryview"><img class="size-full wp-image-127" title="Kill Internet Explorer 6" src="http://macdougalmedia.com/wp-content/uploads/2009/08/kill_ie6.jpg" alt="Kill Internet Explorer 6" width="460" height="332" /></a><p class="wp-caption-text">Kill Internet Explorer 6</p></div>
<p>Well it&#8217;s about time.</p>
<p>It&#8217;s been nearly ten years of toiling over my CSS and Javascript, trying to give my websites a consistent look and feel across the board. Internet Explorer version 6 has been the bane of my existence and the thorn in my hide. My developer friends and I have discussed boycotting it at the risk of losing the eyes of the uninformed millions unknowingly viewing the internet the way it was never meant to be seen. Sure, we might lose their eyes altogether but we&#8217;d prefer that over a negative experience.</p>
<p>More recent versions of Internet Explorer aren&#8217;t as bad and they&#8217;re getting better at adhering to web standards but there are still some annoying browser-specific quirks we have to deal with every day. All I ask is that people really follow through with this movement.</p>
<p>To read more, <a title="Boycott Internet Explorer" href="http://www.cnn.com/2009/TECH/08/06/internet.explorer.six/index.html?iref=mpstoryview" target="_blank">click here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://macdougalmedia.com/2009/08/10/death-to-internet-explorer-6-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>IETester: Test Internet Explorer 5.5, 6, 7 and 8 [Tools]</title>
		<link>http://macdougalmedia.com/2009/08/07/ietester-test-internet-explorer-5-5-6-7-and-8-tools/</link>
		<comments>http://macdougalmedia.com/2009/08/07/ietester-test-internet-explorer-5-5-6-7-and-8-tools/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 20:18:00 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://macdougalmedia.com/?p=121</guid>
		<description><![CDATA[Today, my buddy Javier (owner of the Online Bill Manager) told me about IETester and I was shocked that A) I&#8217;d never heard of it before, and B) how simple it is to use.
If you&#8217;ve ever wanted to test one of your websites for cross-browser compatibility, you know how much of a pain in the [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_122" class="wp-caption alignnone" style="width: 471px"><img class="size-full wp-image-122 " title="IE Tester" src="http://macdougalmedia.com/wp-content/uploads/2009/08/ietester.jpg" alt="IE Tester" width="461" height="332" /><p class="wp-caption-text">IE Tester</p></div>
<p>Today, my buddy Javier (owner of the <a title="Online Bill Manager" href="http://www.thebillmanager.com" target="_blank">Online Bill Manager</a>) told me about <a title="IETester" href="http://www.my-debugbar.com/wiki/IETester/HomePage" target="_blank">IETester</a> and I was shocked that A) I&#8217;d never heard of it before, and B) how simple it is to use.</p>
<p>If you&#8217;ve ever wanted to test one of your websites for cross-browser compatibility, you know how much of a pain in the ass it is to either use a web service to do it for you or to ask a friend who actually has a crappy older version of IE to check your website for you. In either case, the waiting is the worst part and slows development down to a crawl.</p>
<p>Now although some people have chosen to <a title="Boycott Internet Explorer" href="http://abetterbrowser.org/" target="_blank">boycott Internet Explorer</a> (I know I&#8217;d be happier if it were gone), I still understand that a large percentage (if not the majority) still use it. Therefore, as web developers, we must test for it and patch our CSS and Javascript accordingly.</p>
<p><a title="IETester" href="http://www.my-debugbar.com/wiki/IETester/HomePage" target="_blank">IETester</a> makes this an absolute snap.</p>
<p>Although it is buggy, if all you want to do is see how a site looks in Internet Explorer 5.5, you simply open an IE 5.5 tab and go. You can view web pages in Internet Explorer versions 5.5, 6, 7 and 8 all at once. All you have to do is tab between them. Pretty handy, huh?</p>
<p>After tabbing through a few of my websites, I&#8217;ve found a lot of glitches in previous versions of Internet Explorer that I would have otherwise never known about. Of course, my philosophy is that if you aren&#8217;t at least on IE 7, then you need to get with it. IE 6 was nice and simple but it completely lacks standards support and even IE 7 falls short in the browser war.</p>
<p>In any case, for those of us that work in professional production environments where we are forced to design for versions as old as IE 6, this tool is amazing for just that purpose.</p>
<p>Oh yeah, and did I mention it&#8217;s free?</p>
<p><a title="IETester" href="http://www.my-debugbar.com/wiki/IETester/HomePage" target="_blank">Download IETester Here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://macdougalmedia.com/2009/08/07/ietester-test-internet-explorer-5-5-6-7-and-8-tools/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SweetDate.org</title>
		<link>http://macdougalmedia.com/2009/07/07/sweetdate-org/</link>
		<comments>http://macdougalmedia.com/2009/07/07/sweetdate-org/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 19:45:16 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Smarty]]></category>

		<guid isPermaLink="false">http://macdougalmedia.com/?p=103</guid>
		<description><![CDATA[


Language:
PHP w/ Smarty


Database:
MySQL


Javascript:
jQuery



Sweet Date is a very straight-forward dating service web site. People sign up, browse and find people that interest them, and they can either send them an instant message or they can send them a message using the site&#8217;s built-in mailing system.
As far as the look goes, I chose blue because I think [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_104" class="wp-caption alignleft" style="width: 260px"><a href="http://sweetdate.org"><img class="size-full wp-image-104" title="Sweet Date" src="http://macdougalmedia.com/wp-content/uploads/2009/07/portfolio_sweetdate.png" alt="Sweet Date" width="250" height="250" /></a><p class="wp-caption-text">Sweet Date</p></div>
<table style="margin-bottom:15px;" border="0">
<tbody>
<tr>
<td>Language:</td>
<td>PHP w/ Smarty</td>
</tr>
<tr>
<td>Database:</td>
<td>MySQL</td>
</tr>
<tr>
<td>Javascript:</td>
<td>jQuery</td>
</tr>
</tbody>
</table>
<p><a title="Sweet Date" href="http://sweetdate.org" target="_blank">Sweet Date</a> is a very straight-forward dating service web site. People sign up, browse and find people that interest them, and they can either send them an instant message or they can send them a message using the site&#8217;s built-in mailing system.</p>
<p>As far as the look goes, I chose blue because I think it looks great and because I thought I&#8217;d try adhering to some standards for emotional targetting this time (e.g. <a title="Color Wheel Pro: Color Meaning" href="http://www.color-wheel-pro.com/color-meaning.html" target="_blank">Color Wheel Pro / Blue</a>). Additionally, I&#8217;m taking my time with the feel of the site as I don&#8217;t want it to have a &#8220;thrown-together&#8221; appearance. Instead, I want people to know intuitively how to use the web site and where to go if they need help.</p>
<p>The reason I&#8217;m able to pay attention to these elements is because I&#8217;m using Smarty Templating Engine again, which makes development go a lot faster. Now I can focus on jQuery and Photoshop.</p>
<p>While I&#8217;m very aware that dating web sites are a dime-a-dozen these days, I&#8217;ve always wanted to build one for several reasons:</p>
<ol>
<li>Ads pay reasonably well</li>
<li>The structure is reasonably simple</li>
<li>I need more large-scale web sites on my resume</li>
</ol>
<p>Although at the moment, the web site is currently being built, the basic frame is in place with the look &amp; feel largely intact. Once registration is open, feel free to open an account but the site will be largely in beta until I feel it is relatively complete.</p>
]]></content:encoded>
			<wfw:commentRss>http://macdougalmedia.com/2009/07/07/sweetdate-org/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compress PHP Output And Save On Bandwidth!</title>
		<link>http://macdougalmedia.com/2009/06/30/compress-php-output-and-save-on-bandwidth/</link>
		<comments>http://macdougalmedia.com/2009/06/30/compress-php-output-and-save-on-bandwidth/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 01:07:12 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Gzip]]></category>
		<category><![CDATA[zlib]]></category>

		<guid isPermaLink="false">http://macdougalmedia.com/?p=72</guid>
		<description><![CDATA[We all love web pages that load super fast and as Google pushes us to &#8220;make the web faster,&#8221; we must heed the call.
In my search for ways to increase efficiency while decreasing page load times and bandwidth output, I happened upon the wonderful world of Zlib compression. This compression type uses gzip to compress [...]]]></description>
			<content:encoded><![CDATA[<p>We all love web pages that load super fast and as Google pushes us to &#8220;<a title="Google seeks faster web" href="http://www.infoworld.com/t/internet/google-seeks-faster-web-950" target="_blank">make the web faster</a>,&#8221; we must heed the call.</p>
<p>In my search for ways to increase efficiency while decreasing page load times and bandwidth output, I happened upon the wonderful world of Zlib compression. This compression type uses gzip to compress the output of your files and feed them to the browser.</p>
<p>How cool is that?</p>
<p>While it might sound like it would be an impossible task, it&#8217;s really as simple as doing two things-</p>
<p><strong>Step 1. Make sure your PHP server has the zlib extension</strong></p>
<p>All you have to do is create a file called something like <strong>phpinfo.php</strong> on your server and put the following code inside:</p>
<pre name="code" class="php">&lt;?php

phpinfo();

?&gt;</pre>
<p>Once it loads, just find &#8216;zlib&#8217; and check to see whether it&#8217;s there and whether it&#8217;s enabled. If not, you need to either enable it yourself or ask your server admin to do it.</p>
<p><strong>Step 2. Pop in the code!</strong></p>
<p>Put the following code at the very top of any pages you want compressed, or (preferably) in your header file for the entire site-</p>
<pre name="code" class="php">&lt;?php

ini_set('zlib.output_compression', 'On');
ini_set('zlib.output_compression_level', '1');
?&gt;
</pre>
<p>OR if that doesn&#8217;t work for you, you can try this-</p>
<pre name="code" class="php">&lt;?php

ob_start('ob_gzhandler');

?&gt;</pre>
<p>&#8230;that&#8217;s it!</p>
<p>Now try reloading your page.</p>
<p>If everything went right, you should notice an improvement in load time and where you&#8217;ll notice it most is in your bandwidth usage at the end of the month.</p>
<p>I tested the before and after on Sitdiary.net and the file got compressed by over 3X every time! In other words, I&#8217;m going to cut my bandwidth usage down by 2/3 on all PHP files.</p>
<p><span style="color: #ff0000;">*** </span><strong>UPDATE</strong> <span style="color: #ff0000;">***</span></p>
<p>On my Wordpress blogs, I&#8217;ve been testing this out on the index.php and it seems I&#8217;m getting upwards of 75% compression rates!</p>
]]></content:encoded>
			<wfw:commentRss>http://macdougalmedia.com/2009/06/30/compress-php-output-and-save-on-bandwidth/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>ProfilesFree.com</title>
		<link>http://macdougalmedia.com/2009/06/30/profilesfree-com/</link>
		<comments>http://macdougalmedia.com/2009/06/30/profilesfree-com/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 22:52:57 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[GreyBox]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://macdougalmedia.com/?p=67</guid>
		<description><![CDATA[


Language:
PHP


Database:
MySQL


Javascript:
GreyBox



Profiles Free, I&#8217;ll admit, was something made purely out of curiosity. I wanted to see whether I could build a site that Google would like enough to keep users coming back to while at the same time generating a small stream of income, and it does just that.
The site incorporates Google AdSense and affiliate marketing [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_65" class="wp-caption alignleft" style="width: 260px"><a href="http://www.profilesfree.com"><img class="size-full wp-image-65" title="ProfilesFree.com" src="http://macdougalmedia.com/wp-content/uploads/2009/06/portfolio_profilesfree.png" alt="ProfilesFree.com" width="250" height="250" /></a><p class="wp-caption-text">Profiles Free</p></div>
<table style="margin-bottom:15px;" border="0">
<tbody>
<tr>
<td>Language:</td>
<td>PHP</td>
</tr>
<tr>
<td>Database:</td>
<td>MySQL</td>
</tr>
<tr>
<td>Javascript:</td>
<td>GreyBox</td>
</tr>
</tbody>
</table>
<p><a title="Profiles Free" href="http://www.profilesfree.com" target="_blank">Profiles Free</a>, I&#8217;ll admit, was something made purely out of curiosity. I wanted to see whether I could build a site that Google would like enough to keep users coming back to while at the same time generating a small stream of income, and it does just that.</p>
<p>The site incorporates Google AdSense and affiliate marketing ads in a very &#8220;in your face&#8221; kind of style.</p>
<p>One of the best things about this site is that it&#8217;s almost maintenance-free. I check on it about once a month just to make sure it&#8217;s still there and functioning.</p>
<p>All of the back-end code is done in PHP and the database is, of course, MySQL. Instead of using any kind of JavaScript library on the site, I decided it was a bit overkill for a site like this and just went with the light-weight GreyBox framework to display images in modal forms.</p>
]]></content:encoded>
			<wfw:commentRss>http://macdougalmedia.com/2009/06/30/profilesfree-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sitdiary.net</title>
		<link>http://macdougalmedia.com/2009/06/30/sitdiary-net/</link>
		<comments>http://macdougalmedia.com/2009/06/30/sitdiary-net/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 15:27:50 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Smarty]]></category>

		<guid isPermaLink="false">http://macdougalmedia.com/?p=54</guid>
		<description><![CDATA[


Language:
PHP w/ Smarty Templates


Database:
MySQL


Javascript:
jQuery



Sitdiary started back in 2001 as a very simple idea: I wanted other people to be able to post blog entries about anything they wanted. What started as a small idea soon grew into a user-base of over 250,000, where at its peak had over 100 users online at any given time.
Time [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_52" class="wp-caption alignleft" style="width: 260px"><a href="http://www.sitdiary.net" target="_blank"><img class="size-full wp-image-52" title="Sitdiary" src="http://macdougalmedia.com/wp-content/uploads/2009/06/portfolio_sitdiary.png" alt="Sitdiary" width="250" height="250" /></a><p class="wp-caption-text">Sitdiary</p></div>
<table style="margin-bottom:15px;" border="0">
<tbody>
<tr>
<td>Language:</td>
<td>PHP w/ Smarty Templates</td>
</tr>
<tr>
<td>Database:</td>
<td>MySQL</td>
</tr>
<tr>
<td>Javascript:</td>
<td>jQuery</td>
</tr>
</tbody>
</table>
<p><a title="Sitdiary" href="http://www.sitdiary.net" target="_blank">Sitdiary</a> started back in 2001 as a very simple idea: I wanted other people to be able to post blog entries about anything they wanted. What started as a small idea soon grew into a user-base of over 250,000, where at its peak had over 100 users online at any given time.</p>
<p>Time after time, the bandwidth wasn&#8217;t enough for this &#8220;small&#8221; site and I was forced to continuously upgrade on a monthly basis. At one point, the cost became more than I could handle and that&#8217;s when the popularity of the site started to take a downward turn.</p>
<p>As the site would be out of commission for days at a time, the user base soon dwindled down to around 50,000 and all of a sudden, bandwidth wasn&#8217;t too much of an issue.<span id="more-54"></span></p>
<p>Of course, if I knew then what I know now, I would have done quite a few things differently. For one, I would&#8217;ve chosen a catchier name. Secondly, I would&#8217;ve added some serious caching to this site to reduce overall demand on files <em>and</em> database. Thirdly, I wouldn&#8217;t have built the database in such a fashion. When I started building Sitdiary, I figured the best way to build the database would be to give each user their own tables for: entries (posts), comments and friends. While this might work well for a few thousand users, the method quickly degrades over time as it is an unnecessary waste of space. Fourthly, I would have added a payment plan for the really dedicated users to help pay for the bandwidth costs.</p>
<p>Since then, I&#8217;ve upgraded the database to a more standardized format and after testing the speed before and after, I can tell you that the standardized format is significantly faster. I&#8217;ve also added page caching using Smarty.</p>
<p>Overall, I&#8217;m glad Sitdiary is still running despite its bumpy and uncertain past.</p>
]]></content:encoded>
			<wfw:commentRss>http://macdougalmedia.com/2009/06/30/sitdiary-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BillManager.org</title>
		<link>http://macdougalmedia.com/2009/06/29/billmanager-org/</link>
		<comments>http://macdougalmedia.com/2009/06/29/billmanager-org/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 06:31:44 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://macdougalmedia.com/?p=48</guid>
		<description><![CDATA[


Language:
PHP


Database:
MySQL


Javascript:
jQuery



Bill Manager was initially built as a way to remind me to pay my own bills, but as I talked to other people I found that they were interested in such a service &#8212; especially for free.
On top of reminders, the site also features a few informational articles, a series of tips on financial responsibility [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_49" class="wp-caption alignleft" style="width: 260px"><a href="http://www.billmanager.org"><img class="size-full wp-image-49" title="Bill Manager" src="http://macdougalmedia.com/wp-content/uploads/2009/06/portfolio_billmanager.png" alt="Bill Manager" width="250" height="250" /></a><p class="wp-caption-text">Bill Manager</p></div>
<table style="margin-bottom:15px;" border="0">
<tbody>
<tr>
<td>Language:</td>
<td>PHP</td>
</tr>
<tr>
<td>Database:</td>
<td>MySQL</td>
</tr>
<tr>
<td>Javascript:</td>
<td>jQuery</td>
</tr>
</tbody>
</table>
<p><a title="Bill Manager" href="http://www.billmanager.org" target="_blank">Bill Manager</a> was initially built as a way to remind me to pay my own bills, but as I talked to other people I found that they were interested in such a service &#8212; especially for free.</p>
<p>On top of reminders, the site also features a few informational articles, a series of tips on financial responsibility and calculators.</p>
<p>Currently, the site is still going an upgrade to facilitate multiple users but should be up shortly.</p>
<p>It should be noted that since this site was created, several others have popped up on the &#8216;bill manager&#8217; search that do pretty much the same thing. This is no surprise, but I&#8217;m in the process of coming up with a killer feature to set it apart (if only temporarily).</p>
]]></content:encoded>
			<wfw:commentRss>http://macdougalmedia.com/2009/06/29/billmanager-org/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
