<?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>John Morris</title>
	<atom:link href="http://www.johnmorrisonline.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.johnmorrisonline.com</link>
	<description>Web Site Designer, Developer, Builder</description>
	<lastBuildDate>Sat, 07 Jan 2012 21:44:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PHP Functions Video Tutorial: array_diff_assoc</title>
		<link>http://www.johnmorrisonline.com/array_diff_assoc/</link>
		<comments>http://www.johnmorrisonline.com/array_diff_assoc/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 14:08:26 +0000</pubDate>
		<dc:creator>John Morris</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[php function video tutorial]]></category>

		<guid isPermaLink="false">http://www.johnmorrisonline.com/?p=1300</guid>
		<description><![CDATA[In this video, you&#8217;ll learn about the array_diff_assoc PHP function. This function calculates the difference between an original (&#8220;primary&#8221;) array and any number of comparison arrays. It returns an array containing an values from the original array that do NOT exist in any of the comparison arrays. The big difference between this PHP function and [...]]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://www.johnmorrisonline.com/wp-content/uploads/2011/12/array_diff_assoc.png" width="240" />
		</p><p>In this video, you&#8217;ll learn about the array_diff_assoc PHP function. This function calculates the difference between an original (&#8220;primary&#8221;) array and any number of comparison arrays.</p>
<p>It returns an array containing an values from the original array that do NOT exist in any of the comparison arrays.</p>
<p>The big difference between this <a href="http://www.johnmorrisonline.com/tag/php-function-video-tutorial/">PHP function</a> and other &#8220;array_diff&#8221; functions is it takes the keys of each array into account, as well. Meaning, that BOTH the key and value of any element must match for that element to be calculated.</p>
<p>Here&#8217;s how to use it:</p>
<p><iframe width="600" height="338" src="http://www.youtube.com/embed/YFwZgN0kPH4?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>You can learn more about this function in the <a href="http://www.php.net/manual/en/function.array-diff-assoc.php">PHP Manual</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnmorrisonline.com/array_diff_assoc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Functions Video Tutorial: array_count_values</title>
		<link>http://www.johnmorrisonline.com/array_count_values/</link>
		<comments>http://www.johnmorrisonline.com/array_count_values/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 13:53:43 +0000</pubDate>
		<dc:creator>John Morris</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[php function video tutorial]]></category>

		<guid isPermaLink="false">http://www.johnmorrisonline.com/?p=1293</guid>
		<description><![CDATA[In this video, you&#8217;ll learn about the array_count_values PHP function. This function lets you count how many times a certain value occurs in an array. It returns an array where the values of the original array are now the keys and the occurrence of each key in the original array are the values. Here&#8217;s how [...]]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://www.johnmorrisonline.com/wp-content/uploads/2011/12/array_count_values.png" width="240" />
		</p><p>In this video, you&#8217;ll learn about the array_count_values <a href="http://www.johnmorrisonline.com/category/php/">PHP</a> function. This function lets you count how many times a certain value occurs in an array.</p>
<p>It returns an array where the values of the original array are now the keys and the occurrence of each key in the original array are the values.</p>
<p>Here&#8217;s how to use it:</p>
<p><iframe width="600" height="338" src="http://www.youtube.com/embed/PK_9IYd__L8?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>You can learn more about this function in the <a href="http://www.php.net/manual/en/function.array-count-values.php">PHP Manual</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnmorrisonline.com/array_count_values/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Functions Video Tutorial: array_combine</title>
		<link>http://www.johnmorrisonline.com/array_combine/</link>
		<comments>http://www.johnmorrisonline.com/array_combine/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 13:30:06 +0000</pubDate>
		<dc:creator>John Morris</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[php function video tutorial]]></category>

		<guid isPermaLink="false">http://www.johnmorrisonline.com/?p=1286</guid>
		<description><![CDATA[In this video, we&#8217;ll cover the array_combine PHP function. This function lets you specify an array of keys and an array of values and combine the two into a single array. The resulting array contains the values specified in the keys arrays as keys and the values specified in the values array as values. Here&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://www.johnmorrisonline.com/wp-content/uploads/2011/12/array_combine.png" width="240" />
		</p><p>In this video, we&#8217;ll cover the array_combine <a href="http://www.johnmorrisonline.com/tag/php-function-video-tutorial/">PHP function</a>. This function lets you specify an array of keys and an array of values and combine the two into a single array.</p>
<p>The resulting array contains the values specified in the keys arrays as keys and the values specified in the values array as values.</p>
<p>Here&#8217;s how to use it:</p>
<p><iframe width="600" height="338" src="http://www.youtube.com/embed/pLMkWlA1394?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>You can learn more about this function in the <a href="http://www.php.net/manual/en/function.array-combine.php">PHP Manual</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnmorrisonline.com/array_combine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Functions Video Tutorial: array_chunk</title>
		<link>http://www.johnmorrisonline.com/array_chunk/</link>
		<comments>http://www.johnmorrisonline.com/array_chunk/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 13:04:52 +0000</pubDate>
		<dc:creator>John Morris</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[php function video tutorial]]></category>

		<guid isPermaLink="false">http://www.johnmorrisonline.com/?p=1278</guid>
		<description><![CDATA[In this video, you&#8217;ll learn how to use the array_chunk PHP function. This handy function lets you break an array into smaller chunks of a size you specify. The resulting array is a multi-dimensional array containing your chunked arrays. Here&#8217;s how to use it: You can also read more about this function in the PHP [...]]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://www.johnmorrisonline.com/wp-content/uploads/2011/12/array_chunk.png" width="240" />
		</p><p>In this video, you&#8217;ll learn how to use the array_chunk <a href="http://www.johnmorrisonline.com/category/php/">PHP</a> function. This handy function lets you break an array into smaller chunks of a size you specify.</p>
<p>The resulting array is a multi-dimensional array containing your chunked arrays.</p>
<p>Here&#8217;s how to use it:</p>
<p><iframe width="600" height="338" src="http://www.youtube.com/embed/JBiM3Y7BBh8?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>You can also read more about this function in the <a href="http://www.php.net/manual/en/function.array-chunk.php">PHP Manual</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnmorrisonline.com/array_chunk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Functions Video Tutorial: array_change_key_case</title>
		<link>http://www.johnmorrisonline.com/array_change_key_case/</link>
		<comments>http://www.johnmorrisonline.com/array_change_key_case/#comments</comments>
		<pubDate>Sat, 03 Dec 2011 04:39:53 +0000</pubDate>
		<dc:creator>John Morris</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[php function video tutorial]]></category>

		<guid isPermaLink="false">http://www.johnmorrisonline.com/?p=1268</guid>
		<description><![CDATA[In this video, you&#8217;ll learn about the array_change_key case PHP function. This function lets you change the case off all the keys in an array to either upper or lower case. Here&#8217;s what it is and how to use it: You can also learn more about this function in the PHP Manual.]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://www.johnmorrisonline.com/wp-content/uploads/2011/12/array_change_key_case.png" width="240" />
		</p><p>In this video, you&#8217;ll learn about the array_change_key case <a href="http://www.johnmorrisonline.com/category/php/">PHP</a> function. This function lets you change the case off all the keys in an array to either upper or lower case.</p>
<p>Here&#8217;s what it is and how to use it:</p>
<p><iframe width="610" height="343" src="http://www.youtube.com/embed/yZXbx6-XJKI?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>You can also learn more about this function in the <a href="http://www.php.net/manual/en/function.array-change-key-case.php">PHP Manual</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnmorrisonline.com/array_change_key_case/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Top 5 PHP Tutorials You Probably Don&#8217;t Know About</title>
		<link>http://www.johnmorrisonline.com/top-5-php-tutorials-you-probably-dont-know-about/</link>
		<comments>http://www.johnmorrisonline.com/top-5-php-tutorials-you-probably-dont-know-about/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 19:26:57 +0000</pubDate>
		<dc:creator>John Morris</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.johnmorrisonline.com/?p=1261</guid>
		<description><![CDATA[Being a fully self-taught PHP developer, I&#8217;ve spent a LOT of time searching for and perusing online tutorials. Some are awesome. Others&#8230; not so much. So, I figured I&#8217;d take a moment to help you separate the wheat from the chaffe. Here&#8217;s my top 5 PHP tutorials in no particular order: 1. Tizag.com PHP Tutorial [...]]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://www.johnmorrisonline.com/wp-content/uploads/2011/12/top-5-php-tuts.png" width="240" />
		</p><p>Being a fully self-taught <a href="http://www.johnmorrisonline.com/category/php/">PHP</a> developer, <em>I&#8217;ve spent a LOT of time searching for and perusing online tutorials</em>.</p>
<p>Some are awesome. Others&#8230; not so much. So, I figured I&#8217;d take a moment to help you separate the wheat from the chaffe.</p>
<p>Here&#8217;s my top 5 PHP tutorials in no particular order:</p>
<p><strong>1. <a href="http://www.tizag.com/phpT/">Tizag.com PHP Tutorial</a></strong></p>
<p>I spent a lot of time with this little gem. For me, the best part about this tutorial is it covers the important stuff. A lot of tutorials spend way too much time covering things that don&#8217;t really matter&#8230; at least in the beginning. Tizag.com&#8217;s tutorial covers the essentials like working with MySQL, includes, arrays, file manipulation, and more. A great collection of essential PHP skills.</p>
<p><strong>2. <a href="http://www.w3schools.com/php/php_intro.asp">W3Schools.com PHP Tutorial</a></strong></p>
<p>This one is really similar to the Tizag.com tutorial in that it covers the essentials. That said, it&#8217;s good to hear it explained a different way and it covers some topics and shares some tips you won&#8217;t find in the Tizag.com tutorial. You get similar essentials to the Tizag.com tutorial like working with MySQL, arrays, includes, etc&#8230; but you get a few extras like ODBC and using PHP in conjunction with XML and AJAX.</p>
<p><strong>3. <a href="http://www.learnphp.co">Learn PHP</a></strong></p>
<p>Self-aggrandizing? Blatant self-promotion? Probably, but I really do believe this is one of the better tutorials out there. It is, of course, a tutorial by yours truly but what makes it unique is that 1) it&#8217;s a VIDEO tutorial, which are hard to find and 2) it covers in-depth what I call the &#8220;Essential Loop&#8221;&#8230; the first major skill I believe a PHP coder must learn. And, like the others, it&#8217;s free.</p>
<p><strong>4. <a href="http://devzone.zend.com/6/php-101-php-for-the-absolute-beginner/">PHP For the Absolute Beginner</a></strong></p>
<p>Again, similar content to the first two, but what make this one unique is the playful style in which it&#8217;s written. Vikram Vaswani, the author, isn&#8217;t afraid to take a stab at injection a little humor into this tutorial. Of course, sometimes the humor hits just right&#8230; and sometimes it falls flat, but you gotta respect the valiant effort.</p>
<p><strong>5. <a href="http://www.webmonkey.com/2010/02/php_tutorial_for_beginners/">WebMonkey PHP for Beginners</a></strong></p>
<p>Another beginner tutorial that&#8217;s even more focused on the first steps of learning PHP. I like this tutorial, because it is so focused on the critical first steps: learning PHP syntax, working with variables and functions, operators and a few others. If you&#8217;re brand new to PHP, this is a good place to start and keep from getting overwhelmed.</p>
<p>All in all, these PHP tutorials are a great place to start. Be sure to check them out. <strong>Also, what other tutorials have you taken that you found useful? Feel free to share with the community!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnmorrisonline.com/top-5-php-tutorials-you-probably-dont-know-about/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Loop Results Into an Array in PHP</title>
		<link>http://www.johnmorrisonline.com/how-to-loop-results-into-an-array-in-php/</link>
		<comments>http://www.johnmorrisonline.com/how-to-loop-results-into-an-array-in-php/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 16:17:46 +0000</pubDate>
		<dc:creator>John Morris</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[php arrays]]></category>
		<category><![CDATA[php loop]]></category>

		<guid isPermaLink="false">http://www.johnmorrisonline.com/?p=1234</guid>
		<description><![CDATA[This is one of those little tricks in PHP that can save you a ton of time. Reality is, when you&#8217;re dealing with MySQL results&#8230; you&#8217;ll almost always have to loop through an array of results to grab what you want and put THOSE results back into an array. If you don&#8217;t know how to [...]]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://www.johnmorrisonline.com/wp-content/uploads/2011/11/loop-results-into-array.png" width="240" />
		</p><p>This is one of those little tricks in PHP that can save you a ton of time. Reality is, when you&#8217;re dealing with MySQL results&#8230; you&#8217;ll almost always have to loop through an array of results to grab what you want and put THOSE results back into an array.</p>
<p>If you don&#8217;t know how to do it, it can be really frustrating. For me, when I figured this out it was one of those &#8220;sword falling from the sky&#8221; moments.</p>
<p>So, if you don&#8217;t know how to do it, here it is:</p>
<pre class="brush: php">

$my_array = array(&#039;aaa&#039;, &#039;bbb&#039;, &#039;ccc&#039;, &#039;aaa&#039;, &#039;bbb&#039;, &#039;ccc&#039;);

foreach ( $my_array as $k =&gt; $v ) {

if ( $v == &#039;ccc&#039; ) {

$result[] = $v;

}

}

print_r($result);
</pre>
<p>The result of this code is: <strong>Array ( [0] =&gt; ccc [1] =&gt; ccc )</strong></p>
<p>Pretty simple. The key part is this:</p>
<p>$result[]</p>
<p>The brackets as the end of the variable set that variable as an array and results will then be looped into that array. This comes in very handy.</p>
<p>Enjoy! Let me know if you have any questions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnmorrisonline.com/how-to-loop-results-into-an-array-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Coder&#8217;s Credo</title>
		<link>http://www.johnmorrisonline.com/coders-credo-feedback/</link>
		<comments>http://www.johnmorrisonline.com/coders-credo-feedback/#comments</comments>
		<pubDate>Sun, 02 Oct 2011 23:31:13 +0000</pubDate>
		<dc:creator>John Morris</dc:creator>
				<category><![CDATA[career advice]]></category>
		<category><![CDATA[Web Design Resources]]></category>
		<category><![CDATA[web site design]]></category>
		<category><![CDATA[coders credo]]></category>
		<category><![CDATA[web design tips]]></category>

		<guid isPermaLink="false">http://www.johnmorrisonline.com/?p=1201</guid>
		<description><![CDATA[As you&#8217;ve probably seen from the front page of my blog, I have just released a new report called The Coder&#8217;s Credo. I won&#8217;t over hype it, but it&#8217;s something I&#8217;ve put a lot of thinking into to distill my experience as a Web Developer down into useful tips for what it takes to actually [...]]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://www.johnmorrisonline.com/wp-content/uploads/2011/10/coders-credo.png" width="240" />
		</p><p>As you&#8217;ve probably seen from <a href="http://www.johnmorrisonline.com">the front page of my blog</a>, I have just released a new report called The Coder&#8217;s Credo. I won&#8217;t over hype it, but it&#8217;s something I&#8217;ve put a lot of thinking into to distill my experience as a Web Developer down into useful tips for what it takes to actually be successful.</p>
<p>It&#8217;s short, concise, and hopefully impactful. Once you&#8217;ve read it, feel free to leave your comments here.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnmorrisonline.com/coders-credo-feedback/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Install a LAMP Web Server on Ubuntu</title>
		<link>http://www.johnmorrisonline.com/install-a-lamp-web-server-on-ubuntu/</link>
		<comments>http://www.johnmorrisonline.com/install-a-lamp-web-server-on-ubuntu/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 21:15:18 +0000</pubDate>
		<dc:creator>John Morris</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[phpmyadmin]]></category>
		<category><![CDATA[web server]]></category>

		<guid isPermaLink="false">http://www.johnmorrisonline.com/install-a-lamp-web-server-on-ubuntu/</guid>
		<description><![CDATA[Installing a web server using the Ubuntu operating system is not too difficult because most of the required packages don’t need a lot of configurations. In this tutorial we create a (power) user, we install Apache, PHP and MySQL, phpMyAdmin and several other services needed to run a powerful and secure web server. via web-development-blog.com [...]]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://www.johnmorrisonline.com/wp-content/uploads/2011/08/vmlinuz.png" width="240" />
		</p><div class="posterous_autopost">
<div class="posterous_bookmarklet_entry">
<blockquote class="posterous_medium_quote"><p>Installing a web server using the Ubuntu operating system is not too difficult because most of the required packages don’t need a lot of configurations. In this tutorial we create a (power) user, we install Apache, PHP and MySQL, phpMyAdmin and several other services needed to run a powerful and secure web server.</p></blockquote>
<div class="posterous_quote_citation">via <a href="http://www.web-development-blog.com/archives/how-to-install-a-linux-web-server-ubuntu/">web-development-blog.com</a></div>
<p>Even if you&#8217;ll never do this with your sites or on clients, it&#8217;s really good idea to learn how. It will give you very clear understanding of the environment that PHP operates within.</p>
<p>I did something like this awhile back and I can&#8217;t stress how much I learned from the experience, even though, the majority of the sites I work on and code for are shared hosting accounts with cPanel access.</p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.johnmorrisonline.com/install-a-lamp-web-server-on-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating an HTML Select Box From a MySQL Results Array Using PHP</title>
		<link>http://www.johnmorrisonline.com/creating-an-html-select-box-from-a-mysql-results-array-using-php/</link>
		<comments>http://www.johnmorrisonline.com/creating-an-html-select-box-from-a-mysql-results-array-using-php/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 00:01:23 +0000</pubDate>
		<dc:creator>John Morris</dc:creator>
				<category><![CDATA[html]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[dropdown]]></category>
		<category><![CDATA[hmtl]]></category>
		<category><![CDATA[select box]]></category>

		<guid isPermaLink="false">http://www.johnmorrisonline.com/?p=1123</guid>
		<description><![CDATA[This is a question I get quite a bit, so I figured I&#8217;d write a post on it: How do I create an HTML select box with options from data in my database? Here&#8217;s how: The Query First, let&#8217;s look at our query. Yours might look something like this: &#38;lt;?php $sql = &#38;quot;SELECT * FROM [...]]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://www.johnmorrisonline.com/wp-content/uploads/2011/08/dropdown-box.png" width="240" />
		</p><p>This is a question I get quite a bit, so I figured I&#8217;d write a post on it:</p>
<p><em><strong>How do I create an HTML select box with options from data in my database?</strong></em></p>
<p>Here&#8217;s how:</p>
<h3>The Query</h3>
<p>First, let&#8217;s look at our query. Yours might look something like this:</p>
<pre class="brush: php">
&amp;lt;?php
     $sql = &amp;quot;SELECT * FROM queried_table&amp;quot;;
     $query = mysql_query($sql);
     while ( $results[] = mysql_fetch_object ( $query ) );
     array_pop ( $results );
?&amp;gt;
</pre>
<p>That will select everything in our table and loop it into an array of objects containing the results. Now, we can take that array and create a HTML select box with it.</p>
<h3>The HTML Select Box</h3>
<p>Now, that we have our array of objects from our database we can use it to populate an HTML select box dynamically with PHP. Here&#8217;s how that might look:</p>
<pre class="brush: php">
&amp;lt;select name=&amp;quot;the_name&amp;quot;&amp;gt;
     &amp;lt;?php foreach ( $results as $option ) : ?&amp;gt;
          &amp;lt;option value=&amp;quot;&amp;lt;?php echo $option-&amp;gt;desired_value; ?&amp;gt;&amp;quot;&amp;gt;&amp;lt;?php echo $option-&amp;gt;desired_label; ?&amp;gt;&amp;lt;/option&amp;gt;
     &amp;lt;?php endforeach; ?&amp;gt;
&amp;lt;/select&amp;gt;
</pre>
<p>That&#8217;s it. The code above will loop through the array creating a new option for each element in the array&#8230; and populating each option with the desired values from your database. Of course, this is just sample code, you&#8217;ll need to work with your database structure and code to make it work for you&#8230; but, that should give you the framework for getting this kind of thing done.</p>
<p>Here&#8217;s a video walk-through of this, as well:</p>
<p><span style="text-align:center; display: block;"><a href="http://www.johnmorrisonline.com/creating-an-html-select-box-from-a-mysql-results-array-using-php/"><img src="http://img.youtube.com/vi/rSncrXP0HeU/2.jpg" alt="" /></a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnmorrisonline.com/creating-an-html-select-box-from-a-mysql-results-array-using-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>De-Mystifying Web Video</title>
		<link>http://www.johnmorrisonline.com/de-mystifying-web-video/</link>
		<comments>http://www.johnmorrisonline.com/de-mystifying-web-video/#comments</comments>
		<pubDate>Mon, 08 Aug 2011 14:00:25 +0000</pubDate>
		<dc:creator>John Morris</dc:creator>
				<category><![CDATA[web video]]></category>
		<category><![CDATA[h.264]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[webm]]></category>

		<guid isPermaLink="false">http://www.johnmorrisonline.com/?p=1100</guid>
		<description><![CDATA[Welcome to the Wild West. When it comes to web video, that&#8217;s exactly what it feels like. Web video is confusing, hard, and &#8220;tear-your-hair-out&#8221; frustrating&#8230; if you don&#8217;t know what you&#8217;re doing. On the flip side, if you DO know what you&#8217;re doing, it&#8217;s pretty straight-forward&#8230; well, kind of. At the very least, by the [...]]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://www.johnmorrisonline.com/wp-content/uploads/2011/08/conquering-web-video.png" width="240" />
		</p><p><strong><em>Welcome to the Wild West.</em></strong> When it comes to web video, that&#8217;s exactly what it feels like. Web video is confusing, hard, and &#8220;tear-your-hair-out&#8221; frustrating&#8230; if you don&#8217;t know what you&#8217;re doing. On the flip side, if you DO know what you&#8217;re doing, it&#8217;s pretty straight-forward&#8230; well, kind of.</p>
<p>At the very least, by the end of this article, you&#8217;ll have a good idea of where things stand, and what you need to do to get your video online&#8230; support the devices and browsers you want to support&#8230; and, do it without re-encoding your videos 100 different times (like I did).</p>
<p>So, let&#8217;s get started&#8230;</p>
<h3>Codecs</h3>
<p>Let&#8217;s start with codecs, because really the web video starts and ends with codecs&#8230; and, that&#8217;ll make sense in a minute. The word &#8220;codec&#8221; itself is a <a href="http://en.wikipedia.org/wiki/Portmanteau">portmanteau</a>&#8230; that is, a blend of two or more words into one word (kind of like &#8220;Bennifer&#8221; when Ben Affleck and Jennifer Lopez we&#8217;re dating&#8230; ya know!). In this case, the &#8220;two words&#8221; are &#8220;coder&#8221; and &#8220;decoder&#8221;, because that&#8217;s ultimately what a codec does. So, let&#8217;s talk about that:</p>
<h4><strong>Encoding</strong></h4>
<p>Encoding is the &#8220;coder&#8221; part of a codec and where this all begins, so let&#8217;s start there. So, there&#8217;s a couple things to get here:</p>
<p><strong>1. Computers talk in 1s and 0s.</strong> Everything you see on a computer is ultimately broken down into a string of 1s and 0s. It&#8217;s hard to believe, because computers can do so much these days, however, ultimately, everything you see is a series of 1s and 0s&#8230; to the computer. We typically refer to this as &#8220;digital&#8221;&#8230; i.e. computers operate in a digital format.</p>
<p><strong>2. The world is NOT comprised of 1s and 0s.</strong> Obvious, but the world&#8230; the one we record with our video cameras&#8230; does NOT break down to a series of 1s and 0s. So, by default, the world we want to record with a video camera and the computer we want to watch the video are NOT compatible, so we need&#8230;</p>
<p><strong>3. Something has to turn A into B.</strong> Something has to take the lightwaves and things that exist in the real world and &#8220;translate&#8221; them into code (1s and 0s) that a computer can understand.</p>
<p><strong>That&#8217;s what encoding is</strong>&#8230; it is taking the analog signals that exist in the world (lightwaves, sounds, etc.) and &#8220;coding&#8221; them into a digital format that a computer can understand.</p>
<p>Now, let&#8217;s try and make this a little more clear.</p>
<p>You remember, back in the day, the first types of camcorders we had. Those were considered &#8220;analog&#8221; camcorders, because they didn&#8217;t &#8220;digitize&#8221; (i.e. turn into code) video. Instead, those camcorders took a bunch of pictures and stored them on a &#8220;tape&#8221;. Very similar to taking a picture with real film&#8230; except camcorders did a bunch of them in succession really fast&#8230; 30 &#8220;frames&#8221; or pictures per second.</p>
<p>Then, computers came along and we developed ways to &#8220;digitize&#8221; our video. We could install a program on our computer, plug in our camera, and &#8220;encode&#8221; our video. At that time, the installed program (Windows Media Encoder, Pinnacle, Sony Vegas) handled the &#8220;encoding&#8221; part.</p>
<p>Today, however, we have digital camcorders which have hardware already in them that will encode the recorded video on the fly. So, now when we record with a digital camcorder, the video we get is already encoded in a computer-friendly format and we can simply plugin the camera and transfer the file to our computer.</p>
<p>BUT&#8230;</p>
<p>The encoding STILL has to happen. Very important to remember.</p>
<p>Now, if you&#8217;re like me when I started learning about all this, you probably have two questions at this point:</p>
<p><strong>1. How do video encoders ACTUALLY encode video?</strong></p>
<p>When I first learned about encoding and that all video had to be turned into code, it made complete sense (one of those DUH! moments), but I&#8217;m kind of a tech-head, so my first question was how?</p>
<p>So, here&#8217;s a general run-down of how it works. <a href="http://electronics.howstuffworks.com/camcorder.htm">Keep in mind, the process is more detailed than this</a>, but this will help you get your head around how it&#8217;s actually possible.</p>
<p>We already know that cameras and camcorders (even non-digital ones) have the ability to recognize color and put that onto some sort of medium. We won&#8217;t cover that really. But, what happens in a digital camcorder that&#8217;s different from an analog one?</p>
<p>A digital camcorder is still essentially &#8220;taking real fast pictures&#8221; and storing information about those pictures. Digital camcorders generally record at 30-60 frames (pictures) per second. What&#8217;s stored is the color information about each frame.</p>
<p>So, we know we have different &#8220;resolutions&#8221; for video. A video can be 1920&#215;1080, 1280&#215;720, 640&#215;360, and pretty much anything in between. But, what does that resolution actually mean?</p>
<p>It represents the number of pixels in the recording or playback area. So, for example, a 1920&#215;1080 video is 1920 pixels wide by 1080 pixels high. And, (this is key, so really pay attention here) each one of those pixels is a certain color. Think of a video as kind of a mosaic. Each pixel has it&#8217;s own unique color and those colors in combination form a picture.</p>
<p>So, what an encoder does is get the color information about the current frame of video and stores what color each and every pixel is for that particular frame&#8230; 30-60 times per second. And, of course, as something moves in the video&#8230; that color information changes&#8230; thus, the camcorder picks up and records the movement.</p>
<p>Pretty slick, if you ask me.</p>
<p>So, encoding is essentially about recording color information about the pixels in the frame of a video. At least, that&#8217;s the first step. That&#8217;s why videos recorded at 1920&#215;1080 resolution are much bigger than ones recorded at 1280&#215;720 resolution&#8230; there&#8217;s a LOT more pixels to store color information for.</p>
<p>But, that leads to our second question&#8230;</p>
<p><strong>2. How does an encoder know what to encode the video to?</strong></p>
<p>Now, that we know an encoder (whether it&#8217;s built-into your fancy HD camcorder or it&#8217;s a computer program for an analog camcorder) is simply recording and storing color information, you might wonder, like I did, is there some sort of language or standard for doing this kind of thing? Do all videos get encoded the same way?</p>
<p>And, this is where the codec wars begin&#8230;</p>
<p>Because, the answer is no&#8230; well, kind of. There is no ONE standard&#8230; there&#8217;s a series of standards.  And, these are the things you&#8217;ve probably heard of before&#8230; H.264, Theora, VP8, and so on. These are codecs. So, what exactly is a codec again?</p>
<p>A codec is a standard for HOW digital video will 1) be encoded and 2) be decoded. So, really smart people get together and think about how they can store that color information in a way that 1) maintains higher quality video, 2) compresses the video to smaller and smaller file sizes, and 3) use less CPU resources to do all of that.</p>
<p>Here&#8217;s something fun for you to try&#8230;</p>
<ol>
<li>Find a video on your computer</li>
<li>Open it with a text editor (NotePad works great!) instead of a video player</li>
<li>Wait for your computer to screech to a halt.</li>
</ol>
<p>What I&#8217;m getting at is video files are HUGE! Storing all the information takes up a lot of space. With my digital camcorder, I can record at full HD for 15-20 minutes and have  a raw file size in the gigabytes range. Try opening a 2GB text file on your computer and see what happens.</p>
<p>In comparison, all 1075 pages of War and Peace fit into a 2.4 MB PDF. I know, because I downloaded it just to see. And, I can open it in a couple seconds&#8230; no problem.</p>
<p>Actually, your computer will probably open it fine, but it will take awhile AND you&#8217;ll notice a few things:</p>
<ol>
<li>You CAN actually open the file in a text editor! Why? Because it&#8217;s code! That&#8217;s so hard for people to get, but a digital video file is code&#8230; just like a HTML web page, or PHP, or javascript&#8230; it&#8217;s code! It has to be really&#8230; otherwise, your computer wouldn&#8217;t be able to process it.</li>
<li>Again, it&#8217;s HUGE. It&#8217;ll probably take you minutes (several of them) to even scroll through the whole thing.</li>
</ol>
<p>So, video files are code&#8230; and the codec is what defines how that &#8220;encoding&#8221; process is done.</p>
<p>A couple points on encoding and how it&#8217;s done:</p>
<p><strong>1. FPS.</strong> One factor in file size and quality is Frames Per Second. Obviously, the more FPS, the larger the file size, because there&#8217;s more information to store. Some camcorders allow you to adjust that, but more often than not, you&#8217;ll adjust it in your video editing program (Sony Vegas, Adobe Premiere, etc).</p>
<p><strong>2. Key Frames.</strong> What exactly are key frames? One way we compress video to make file sizes smaller is by NOT recording ALL the color information of every particular frame. Instead, we use what are called key frames. Key frames are frames that DO record all the color information about that particular frame (every rotten pixel)&#8230; and we space key frames out, say every 5 frames. Then, we track the &#8220;changes&#8221; in color information in subsequent frames until the next key frame.</p>
<p>So, the first frame of a video is always a key frame. It grabs all the color information about that frame and stores it. For frames 2, 3, 4, and 5, we only track how the color information changed and store that (i.e less to store). Then, frame 6 we again grab all the color information for that frame and repeat the process.</p>
<p>This gives us much less information to have to store while, at the same time, ensuring our video doesn&#8217;t get too &#8220;wonky&#8221; or off track&#8230; by re-keying it every so many frames.</p>
<p>Again, obviously, the more key frames you have, the bigger the file.</p>
<p>So, that&#8217;s pretty much encoding. You take a bunch of really fast pictures, store the color information about each picture, and save it in a huge text file&#8230; kind of. We&#8217;ll talk more about that when we get to &#8220;containers&#8221;, but that&#8217;s a good way to look at it for now.</p>
<p>But, what about decoding? It&#8217;s a co-DEC&#8230; which implies decoding. What about that?</p>
<p>Ok.</p>
<h4><strong>Decoding</strong></h4>
<p>Do everything you just did in reverse. Ok, that&#8217;s decoding.</p>
<p>But, seriously, that&#8217;s kind of how it works. A decoder simply takes all the code in that huge text file and turns it back to into actual colored pixels on your computer screen.</p>
<p>How?</p>
<p>I don&#8217;t know. That&#8217;s what video players do. They decode the video and &#8220;play it back&#8221; using the stored color information. Exactly HOW they do that, I really don&#8217;t know, but you do need to keep a couple things in mind:</p>
<p><strong>1. Compatibility.</strong> Codecs are why a flash player can&#8217;t play a .wmv file. The .wmv file was encoded using a <a href="http://msdn.microsoft.com/en-us/library/gg153556(v=vs.85).aspx">Windows Media codec</a>, but a flash player only understands <a href="http://kb2.adobe.com/cps/402/kb402866.html">flash-compatible codecs</a> (H.264, VP6, Sorenson Spark, etc). So, the flash player doesn&#8217;t speak the same &#8220;language&#8221; as the video.</p>
<p>So, if you&#8217;re going to build a web site that uses a flash player, you&#8217;ll need to encode your video using a flash-compatible codec. Oh, and if you want it to be viewable on mobile devices, you&#8217;ll need to make sure it&#8217;s compatible with those, as well. Oh yeah, and also, don&#8217;t forget about HTML5&#8230; you&#8217;ll probably want video compatible for that, too.</p>
<p>Oh, but wait, since HTML5 is native to the browser, it depends what codecs that browser supports. Luckily, they all support the same codecs&#8230; oh wait, they don&#8217;t. <a href="http://searchenginewatch.com/article/2050186/HTML5-Codec-Support-New-Browser-War-Or-Google-Edict">They&#8217;re fighting right now</a> and if you want to use HTML5 video, you&#8217;ll probably have to encode your video into 2 maybe 3 different file formats and upload them all.</p>
<p>Yeah, it&#8217;s kind of a mess right now in terms of what will play on what. Hopefully soon, we&#8217;ll have a universally-compatible, open codec that we can rely on to play in every digital device known to man.</p>
<p>(Container formats also play a part in that, but we&#8217;ll get to that.)</p>
<p><strong>2. Stacking.</strong> Most &#8220;players&#8221; support what&#8217;s called a &#8220;stack&#8221;&#8230; that&#8217;s a combination of video codec, audio codec, and a container. For example, Adobe Flash supports video encoded using H.264 video, AAC audio, in an MP4 container. Each part of that matters!</p>
<p>If you encode your video using H.264 video, AC3 audio, in an MP4 container&#8230; that&#8217;s different! And, might not play in one or another browser or device (actually, my copy of Sony Vegas doesn&#8217;t even let me encode to AC3 audio when using the MP4 container, but you get my point).</p>
<p>There are common &#8220;stacks&#8221; that you can encode to in order to ensure your videos will play in what they&#8217;re supposed to. H.264 video, AAC audio, in an MP4 container is one of them. Of course, there&#8217;s also different &#8220;profiles&#8221; for each codec, as well. H.264 has 17 different profiles, the most common of which are the main, baseline, and high profiles.</p>
<p>Adobe Flash supports all profiles of H.264; however, the iPhone and Android phones only support the &#8220;baseline&#8221; profile. If you record a video in H.264 high profile&#8230; it won&#8217;t play in an iPhone.</p>
<p>Again, the &#8220;stack&#8221; you use is critical. You have to choices when it comes to supporting all the different browsers and devices:</p>
<p><strong>1. Cater to the lowest common denominator.</strong> This will typically be your mobile devices. You can create a video that has the right &#8220;specs&#8221; for say an iPhone 3GS, which are:</p>
<blockquote><p>H.264 video, up to 1.5 Mbps, 640 by 480 pixels, 30 frames per second, Low-Complexity version of the H.264 Baseline Profile with AAC-LC audio up to 160 Kbps, 48kHz, stereo audio in .m4v, .mp4, and .mov file formats</p></blockquote>
<p>That video will then play in Adobe&#8217;s Flash Player and browsers that support H.264 natively with HTML5. However, the video is 640&#215;480, so it&#8217;s not HD and won&#8217;t look the best when played full screen on an HD monitor.</p>
<p>So, it&#8217;s a trade-off.</p>
<p><strong>2. Use detection to serve the right video to the right device.</strong> There are both PHP and Javascript techniques you can use to detect what browser and/or device is accessing your site and you can serve up the correct video based on that.</p>
<p>So, you could create a version of your video for Apple and Android devices and encode it according to their specs. Then, create a version for browsers supporting H.264, and yet another version for browsers supportng WebM. You would, then, have all major browsers and devices supported.</p>
<p>Of course, you have to encode and upload 3 different versions of every video you make AND detection isn&#8217;t foolproof&#8230; so, again, it&#8217;s a trade-off.</p>
<p>(There is a way you can encode ONE video file and have it play in all major browsers and devices&#8230; but, I&#8217;ll save that for another article.)</p>
<p>So, as you can see, how a video is decoded depends heavily on how it&#8217;s encoded.</p>
<p>Oh, but it gets better, because we haven&#8217;t even talked about &#8220;containers&#8221;, yet.</p>
<h3>Containers</h3>
<p>If you&#8217;re like I was, you&#8217;re probably asking yourself right about now, &#8220;What the hell is a container?&#8221;. When I first heard about containers it didn&#8217;t make any sense to me what it even was. So, let me break it down:</p>
<p>When you watch a video online, you have your video playing on your screen and typically you have audio that accompanies it. Now, looking at it, you probably assume that the two (audio and video) are together&#8230; but, that&#8217;s not the case.</p>
<p>The video file and the audio file are just that&#8230; two SEPARATE files. When you encode a video that has audio, you&#8217;re actually doing three things:</p>
<ol>
<li>Encoding the video</li>
<li>Encoding the audio</li>
<li>Wrapping it in a container to hold BOTH files</li>
</ol>
<p>Think of the container like a .zip file. Inside it is a bunch of files, but the .zip itself is one file. That&#8217;s kind of how a container works. It takes the audio and video file and stores them together in one file&#8230; along with information about the files and how to play them.</p>
<p>But, unlike a .zip file, you can&#8217;t just throw any audio and video files into any container. Certain containers only support certain types of audio and video files&#8230; that is, codecs.</p>
<p>This goes back to the section on stacking.</p>
<p>The MP4 container supports H.264 video and AAC audio among others; the Ogg container supports Theora video and Vorbis audio; the WebM container supports VP8 video and Vorbis audio, and so on.</p>
<p>The container determines what audio and video codecs you can use&#8230; or, most likely, the other way around (what codecs you want to use will determine what container you can use).</p>
<p>The problem with this is most people use containers and codecs interchangeably and that&#8217;s not entirely accurate. And, in fact, it&#8217;s worse because most people use containers, codecs, and file extensions interchangeably&#8230; and, that is definitely not accurate.</p>
<p>So, let&#8217;s talk about that&#8230; where do file extensions fit in?</p>
<h3>File Extensions</h3>
<p>File extensions are the 3-4 character endings to the names of our video files, e.g. .mp4, .wmv, .webm, and so on. In fact, file extensions are what most people talk about when referring to what &#8220;type&#8221; of video they&#8217;re dealing with.</p>
<p>Ironically, file extensions are probably the least determinant factor of the three (codec, container, and extension) when it comes to determining what type of video you have.</p>
<p>What does that even mean?</p>
<p>This: the type of video you have is mostly determined by what codec you encode it with. The container deals more with how all the files necessary for the video to play are &#8220;packaged&#8221; together. And, the file extension is 1) determined by what container is used and 2) typically interchangeable among the container&#8217;s supported file extensions.</p>
<p>For example, you can record a H.264 video using the MP4 container, BUT give a file extension of .mp4, .m4a, .m4v, and more In fact, the &#8220;MP4&#8243; container supports 6 file extensions:</p>
<ol>
<li>.mp4</li>
<li>.m4a</li>
<li>.m4p</li>
<li>.m4b</li>
<li>.m4r</li>
<li>.m4v</li>
</ol>
<p>Any file with one of these extensions can be called an &#8220;MP4 video&#8221;&#8230; MP4 as in the container not the file extension. Even more, you can typically change the file extension of a video to another supported extension and the video still play.</p>
<p>For example, I&#8217;ve recorded videos using the .mp4 extension, then later changed the extension to .m4v&#8230; and, the video still played fine in Window Media Player and Adobe Flash.</p>
<p>Now, that&#8217;s not entirely universal or smart, so don&#8217;t go changing your file extensions willy-nilly, but it&#8217;s possible&#8230; and, more importantly, illustrates how little the file extension has to do with what &#8220;type&#8221; of video you have.</p>
<p>But, we&#8217;re all hung up on file extensions, because that&#8217;s what we see. We don&#8217;t see all the behind the scenes stuff with codecs and containers. So, it&#8217;s understandable. Just remember&#8230; the file extension is the least of your worries. Pay more attention to the container and codec you&#8217;re using&#8230; the file extension will be an natural &#8220;extension&#8221; (wow, that&#8217;s bad) of the choices you make there.</p>
<p>So, that&#8217;s web video. Clear as mud? Honestly, web video is a bit screwy right now, but hopefully this article will help you start making sense of it&#8230; and, hopefully, when you&#8217;re in Sony Vegas, or whatever video editing software you use, all the drop-downs and check-boxes will make a little more sense&#8230; and, you&#8217;ll be better equipped to encode your videos correctly to support the browsers, devices, and standards you want to support.</p>
<h3>Miscellaneous Topics About Web Video</h3>
<p>Here&#8217;s some miscellaneous discussions I felt were important when it comes to web video. These didn&#8217;t really fit into the main article, so I&#8217;m putting them here. I&#8217;ll add to them over time.</p>
<h4><strong>What&#8217;s the Big Deal With H.264 and Patents, Anyway?</strong></h4>
<p>At first, it might not seem like a big deal. Yeah, H.264 is patented&#8230; but, so what? MPEG LA, the licensors of the H.264 patent pool, laxed its restrictions on H.264 and essentially made it free to end-users. So, what&#8217;s the big deal?</p>
<p>It&#8217;s debatable, but the web has seen this before. Ever seen or used a GIF image? Until 2004, the main technique for encoding and decoding GIF images (yes, they&#8217;re encoded, too!) was patented. Initially, the patent was not enforced and GIFs became the de facto standard for images on the web.</p>
<p>Then, the company who developed the algorithm that was used to encode and decode GIF images decided to enforce the patents&#8230; hypothetically, having the right to charge any web site owner who displayed a GIF image on their web site.</p>
<p>Now imagine the same scenario today with video. Imagine YouTube suddenly being charged on a per-view basis for all of its videos&#8230; or, YOU being charged for all your videos on a per-view basis.</p>
<p>That&#8217;s the worry and that&#8217;s why Google is working on developing an open, royalty-free codec that anyone can use without ever having to pay a royalty&#8230; forever&#8230; guaranteed.</p>
<p>Obviously, Google has a vested interested, because of YouTube&#8230; and, nothing says MPEG LA ever would or &#8220;could&#8221; fully enforce its patent if it decided to change its mind; however, it&#8217;s possible. So, if you&#8217;re concerned about being able to create, upload, and share video online without ever having to worry about paying a royalty, it&#8217;s kind of a big deal.</p>
<p>(As a side note: <a href="http://www.theregister.co.uk/2011/02/11/mpeg_la_calls_for_patents_related_to_google_open_source_codec/">MPEG LA looks to be blocking the adoption of WebM</a> by creating doubt about the VP8 codec and whether or not it&#8217;s truly unencumbered by patents and royalty-free. Interestingly, Microsoft and Apple are both apart of MPEG LA&#8217;s H.264 patent pool (meaning, if royalties are charged for using H.264&#8230; they get paid!) and, none of Apple&#8217;s products support WebM&#8230; and IE9 will play WebM, but only if the user has the VP8 codec already installed&#8230; meaning, it doesn&#8217;t &#8220;natively&#8221; support it like Firefox, Opera, and Chrome.)</p>
<h4><strong>Conquering Web Video InfoGraphic</strong></h4>
<p>Here&#8217;s a little infographic I put together for web video. Hopefully, it&#8217;s useful for you:</p>
<p><img class="alignnone size-full wp-image-1113" title="conquering-web-video" src="http://www.johnmorrisonline.com/wp-content/uploads/2011/08/conquering-web-video.png" alt="" width="600" height="1650" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.johnmorrisonline.com/de-mystifying-web-video/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Integrate CubePoints With SimplePress and Boost Your Membership Site Retention Rates</title>
		<link>http://www.johnmorrisonline.com/how-to-integrate-cubepoints-with-simplepress-and-boost-your-membership-site-retention-rates/</link>
		<comments>http://www.johnmorrisonline.com/how-to-integrate-cubepoints-with-simplepress-and-boost-your-membership-site-retention-rates/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 13:56:32 +0000</pubDate>
		<dc:creator>John Morris</dc:creator>
				<category><![CDATA[plugin hacks]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[cubepoints]]></category>
		<category><![CDATA[retain members]]></category>
		<category><![CDATA[simplepress]]></category>

		<guid isPermaLink="false">http://www.johnmorrisonline.com/?p=1089</guid>
		<description><![CDATA[Retention is the name of the game when it comes to membership sites. It&#8217;s a well-known fact that members COME to a membership site for the content, but they STAY for the community. Your members will stay because their friends stay. But, how do you get your members to become friends with one another? A [...]]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://www.johnmorrisonline.com/wp-content/uploads/2011/07/integrate-cp-sp.png" width="240" />
		</p><p>Retention is the name of the game when it comes to membership sites. It&#8217;s a well-known fact that members COME to a membership site for the content, but they STAY for the community. Your members will stay because their friends stay.</p>
<p>But, how do you get your members to become friends with one another? A big key is to get your members to start interacting in the first place. And, a great way to encourage that interaction is to give your members a little reward for doing so.</p>
<p>In this video, we&#8217;ll talk about how to use two free WordPress plugins (<a href="http://www.cubepoints.com" target="_blank">CubePoints</a> and <a href="http://simple-press.com/" target="_blank">SimplePress</a>) to reward your members for interacting on your site, increase the activity and friendship-building that occurs, and ultimately boost your membership site&#8217;s retention rates.</p>
<div id="v-Vp3rwvnT-1" class="video-player"><embed id="v-Vp3rwvnT-1-video" src="http://s0.videopress.com/player.swf?v=1.03&amp;guid=Vp3rwvnT&amp;isDynamicSeeking=true" type="application/x-shockwave-flash" width="600" height="336" title="How to Integrate CubePoints With SimplePress and Boost Your Membership Site Retention Rates" wmode="direct" seamlesstabbing="true" allowfullscreen="true" allowscriptaccess="always" overstretch="true"></embed></div>
]]></content:encoded>
			<wfw:commentRss>http://www.johnmorrisonline.com/how-to-integrate-cubepoints-with-simplepress-and-boost-your-membership-site-retention-rates/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How to Write Your Own Easy-Administration WordPress Plugin</title>
		<link>http://www.johnmorrisonline.com/how-to-write-your-own-easy-administration-wordpress-plugin/</link>
		<comments>http://www.johnmorrisonline.com/how-to-write-your-own-easy-administration-wordpress-plugin/#comments</comments>
		<pubDate>Sat, 02 Jul 2011 23:15:31 +0000</pubDate>
		<dc:creator>John Morris</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wordpress administration panel]]></category>
		<category><![CDATA[wordpress plugin]]></category>

		<guid isPermaLink="false">http://www.johnmorrisonline.com/how-to-write-your-own-easy-administration-wordpress-plugin/</guid>
		<description><![CDATA[WordPress&#8217;s popularity owes much to it&#8217;s easy administration panels. Unfortunately, it can still be daunting for non-technical users such as your clients. At best they&#8217;ll require a little training, hand-holding and support. At worst, they&#8217;ll play around with plugin installation, edit some theme code, then expect you to clear up the mess. I&#8217;ve written a [...]]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://www.johnmorrisonline.com/wp-content/uploads/2011/07/wp-blue-1024x768.png" width="240" />
		</p><div class='posterous_autopost'>
<div class="posterous_bookmarklet_entry">
<blockquote class="posterous_long_quote">
<p>WordPress&#8217;s popularity owes much to it&#8217;s easy administration panels. Unfortunately, it can still be daunting for non-technical <a href="http://www.sitepoint.com/do-clients-use-cms/">users such as your clients</a>. At best they&#8217;ll require a little training, hand-holding and support. At worst, they&#8217;ll play around with plugin installation, edit some theme code, then expect you to clear up the mess.</p>
<p>I&#8217;ve written a number of &#8220;Make WordPress Easier for Clients&#8221; articles (see <a href="http://www.sitepoint.com/make-wordpress-easier-for-clients-branding/">part 1</a> and <a href="http://www.sitepoint.com/how-to-hide-menus-in-wordpress/">part 2</a>). In those examples, code was placed in the theme&#8217;s functions.php file. That&#8217;s still a viable solution if you have one WordPress installation per client or each is configured differently.</p>
<p>In this article, however, we&#8217;ll create a plugin. Plugins have a couple of advantages:</p>
<ol>
<li>Your code resides in one file which can make maintenance easier.</li>
<li>If you&#8217;re running a WordPress network with multiple sites (previously known as WordPress MU), you can activate a single plugin across the network so it&#8217;s applied to every site.</li>
</ol>
</blockquote>
<div class="posterous_quote_citation">via <a href="http://www.sitepoint.com/wordpress-easy-administration-plugin-1/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=wordpress-easy-administration-plugin-1">sitepoint.com</a></div>
<p>Pay attention to the advantages of using plugins vs a theme functions file that Craig mentions. To add to that, I would say another advantage (in my mind, the main advantage) of using a plugin vs a theme functions file is portability. </p>
<p>When you put your code in a plugin, it&#8217;s easy to transfer from site to site, which is super important if you&#8217;re coding for clients. Also, it forces you to think about making your plugin work on multiple platforms, setups, etc.</p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.johnmorrisonline.com/how-to-write-your-own-easy-administration-wordpress-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sorting Multi-Dimensional Arrays in PHP</title>
		<link>http://www.johnmorrisonline.com/sorting-multi-dimensional-arrays-in-php/</link>
		<comments>http://www.johnmorrisonline.com/sorting-multi-dimensional-arrays-in-php/#comments</comments>
		<pubDate>Sat, 02 Jul 2011 23:00:56 +0000</pubDate>
		<dc:creator>John Morris</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[array_multisort]]></category>
		<category><![CDATA[multi-dimensional array]]></category>
		<category><![CDATA[php sort]]></category>
		<category><![CDATA[usort]]></category>

		<guid isPermaLink="false">http://www.johnmorrisonline.com/sorting-multi-dimensional-arrays-in-php/</guid>
		<description><![CDATA[Every time I need to sort a multi-dimensional array in PHP, I have to look it up. It&#8217;s not quite as quick and easy to look up as most things, so I&#8217;m going to blog a quick example. via shiflett.org This is super handy! I&#8217;m the same way. I always used to end up looking [...]]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://www.johnmorrisonline.com/wp-content/uploads/2011/07/array_multisort.png" width="240" />
		</p><div class='posterous_autopost'>
<div class="posterous_bookmarklet_entry">
<blockquote class="posterous_short_quote">Every time I need to sort a multi-dimensional array in PHP, I have to look it up. It&#8217;s not quite as quick and easy to look up as most things, so I&#8217;m going to blog a quick example.</p></blockquote>
<div class="posterous_quote_citation">via <a href="http://shiflett.org/blog/2011/jun/sorting-multi-dimensional-arrays-in-php">shiflett.org</a></div>
<p>This is super handy! I&#8217;m the same way. I always used to end up looking up different examples of how to sort a multi-dimensional array. </p>
<p>I now have a class of different handy functions like this that I include in nearly every script I write. </p>
<p>Chris offers a couple different options. Pick the one you like best and and create a class with this in it. You&#8217;ll thank yourself down the road if you start collecting this kind of thing now.</p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.johnmorrisonline.com/sorting-multi-dimensional-arrays-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multiple GMail Account Logins</title>
		<link>http://www.johnmorrisonline.com/multiple-gmail-account-logins/</link>
		<comments>http://www.johnmorrisonline.com/multiple-gmail-account-logins/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 14:18:32 +0000</pubDate>
		<dc:creator>John Morris</dc:creator>
				<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://www.johnmorrisonline.com/multiple-gmail-account-logins/</guid>
		<description><![CDATA[The one thing that used to really bug me, was the fact that I could only access one webmail account at a time – and if I wanted to view some of the team email boxes, I had to log out of my account and log into that one.  Fairly frustrating and more often than [...]]]></description>
			<content:encoded><![CDATA[<p style="float:right; margin:0 0 10px 15px; width:240px;">
		<img src="http://www.johnmorrisonline.com/wp-content/uploads/2011/06/gmail-300x123.jpg" width="240" />
		</p><div class="posterous_autopost">
<div class="posterous_bookmarklet_entry">
<blockquote class="posterous_long_quote"><p>The one thing that used to really bug me, was the fact that I could only access one webmail account at a time – and if I wanted to view some of the team email boxes, I had to log out of my account and log into that one.  Fairly frustrating and more often than not, I would forget that I had swapped accounts…..</p>
<p>Recently (a by that, I mean over the last few months), Google introduced Multiple Sign In for Gmail account and have been transitioning all Google Apps accounts so that we can use this functionality!  I’ve been testing it out over the last couple of weeks.</p></blockquote>
<div class="posterous_quote_citation">via <a href="http://askcharlyleetham.com/podcast/productivity-multiple-gmail-account-logins?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+AskCharlyLeetham+%28Ask+Charly+Leetham%29">askcharlyleetham.com</a></div>
<p>I just set this up with my accounts and it&#8217;s pretty freakin&#8217; awesome! I have several Gmail accounts for various reasons and being able to switch between each with the click of a button is NICE!</p>
<p>Keep in mind, though. Protecting your passwords! Just had to change all mine, because somebody had hacked one of my accounts and was sending SPAM to my friends. NOT COOL!</p>
<p>I use this service to create random strings now that are pretty much impossible to guess. Highly suggest you use this and something like RoboForm or LastPass:</p>
<p><a href="http://www.random.org/strings/">http://www.random.org/strings/</a></p>
<p>Enjoy and be safe!</p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.johnmorrisonline.com/multiple-gmail-account-logins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

