<?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>St. John Johnson</title>
	<atom:link href="http://www.stjohnjohnson.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.stjohnjohnson.com</link>
	<description>This is a place for me to post my ideas, projects, tutorials, and resume for all to see</description>
	<lastBuildDate>Mon, 16 Jan 2012 05:14:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Login over Unsecure Channels</title>
		<link>http://www.stjohnjohnson.com/blog/login-over-unsecure-channels</link>
		<comments>http://www.stjohnjohnson.com/blog/login-over-unsecure-channels#comments</comments>
		<pubDate>Tue, 27 Apr 2010 21:05:39 +0000</pubDate>
		<dc:creator>St. John</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[MD5]]></category>

		<guid isPermaLink="false">http://www.stjohnjohnson.com/blog/login-over-unsecure-channels</guid>
		<description><![CDATA[Yesterday I talked about securing stored passwords in a database.&#160; That is helpful in preventing an attacker from reversing user&#8217;s password information assuming they got access to your database.&#160; But what good is protecting that information if your users login by passing their username/passwords over plaintext. Now this whole process is assuming you use email [...]]]></description>
		<wfw:commentRss>http://www.stjohnjohnson.com/blog/login-over-unsecure-channels/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Storing Passwords in a Database</title>
		<link>http://www.stjohnjohnson.com/blog/storing-passwords-in-database</link>
		<comments>http://www.stjohnjohnson.com/blog/storing-passwords-in-database#comments</comments>
		<pubDate>Mon, 26 Apr 2010 15:48:00 +0000</pubDate>
		<dc:creator>St. John</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[MD5]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.stjohnjohnson.com/blog/storing-passwords-in-database</guid>
		<description><![CDATA[The other day, a friend of mine was asking for the best practice regarding stored passwords in a SQL database.&#160; His first idea was a simple hash (SHA1 in his case).&#160; While this is significantly better than plaintext and even MD5, it is still computationally feasible to reverse/guess the values if the server was compromised.&#160; [...]]]></description>
		<wfw:commentRss>http://www.stjohnjohnson.com/blog/storing-passwords-in-database/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recent Work</title>
		<link>http://www.stjohnjohnson.com/blog/recent-work</link>
		<comments>http://www.stjohnjohnson.com/blog/recent-work#comments</comments>
		<pubDate>Sat, 24 Apr 2010 02:06:56 +0000</pubDate>
		<dc:creator>St. John</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Teaching]]></category>

		<guid isPermaLink="false">http://www.stjohnjohnson.com/blog/recent-work</guid>
		<description><![CDATA[Sorry for the huge gaps between posts.&#160; I&#8217;m trying to find time to prepare and write up posts about my various projects.&#160; The big one, that I hope can benefit lots of people, is my MySQL Advanced Class.&#160; It&#8217;s basically a PHP class that allows static one-line access to MySQL with proper parameter binding and [...]]]></description>
		<wfw:commentRss>http://www.stjohnjohnson.com/blog/recent-work/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Math CAPTCHAs</title>
		<link>http://www.stjohnjohnson.com/blog/math-captchas</link>
		<comments>http://www.stjohnjohnson.com/blog/math-captchas#comments</comments>
		<pubDate>Sun, 11 Apr 2010 18:02:18 +0000</pubDate>
		<dc:creator>St. John</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[CAPTCHA]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.stjohnjohnson.com/blog/math-captchas</guid>
		<description><![CDATA[A few years ago, when I was sitting at my moving sale, I came up with some crazy variations on the basic word/letter based CAPTCHA for my senior project, SHUGamer.com.&#160; Most of the ideas I had were either impossible to implement or difficult to answer.&#160; I eventually decided to implement a system based on a [...]]]></description>
		<wfw:commentRss>http://www.stjohnjohnson.com/blog/math-captchas/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook Puzzles</title>
		<link>http://www.stjohnjohnson.com/blog/facebook-puzzles</link>
		<comments>http://www.stjohnjohnson.com/blog/facebook-puzzles#comments</comments>
		<pubDate>Fri, 09 Apr 2010 19:45:30 +0000</pubDate>
		<dc:creator>St. John</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.stjohnjohnson.com/blog/facebook-puzzles</guid>
		<description><![CDATA[Hey, it&#8217;s been a while since I posted last.&#160; After getting certified, I felt like I needed to push my programming skill further.&#160; That&#8217;s where the Facebook Engineering Puzzles came into play.&#160; I completed the first two training ones last August (&#34;Hoppity Hop!&#34; and &#34;Meep meep!&#34;).&#160; I also worked on the first easy puzzle, &#34;Liar, [...]]]></description>
		<wfw:commentRss>http://www.stjohnjohnson.com/blog/facebook-puzzles/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>PASSED ZEND CERTIFICATION!</title>
		<link>http://www.stjohnjohnson.com/blog/passed-zend-certification</link>
		<comments>http://www.stjohnjohnson.com/blog/passed-zend-certification#comments</comments>
		<pubDate>Wed, 20 Jan 2010 20:58:32 +0000</pubDate>
		<dc:creator>St. John</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Zend PHP Certification]]></category>

		<guid isPermaLink="false">http://www.stjohnjohnson.com/?p=448</guid>
		<description><![CDATA[That&#8217;s right. I finished the 90 minute test in 30 minutes and passed with flying colors!  It was a really hard test, but I got through it! For anyone who wants to go for it, remember to spend a lot of time studying!!]]></description>
		<wfw:commentRss>http://www.stjohnjohnson.com/blog/passed-zend-certification/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Day 27 &#8211; Advanced Streams</title>
		<link>http://www.stjohnjohnson.com/zend-php-certification/day-27-advanced-streams</link>
		<comments>http://www.stjohnjohnson.com/zend-php-certification/day-27-advanced-streams#comments</comments>
		<pubDate>Sun, 17 Jan 2010 04:07:00 +0000</pubDate>
		<dc:creator>St. John</dc:creator>
				<category><![CDATA[Zend PHP Certification]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.stjohnjohnson.com/zend-php-certification/day-27-advanced-streams</guid>
		<description><![CDATA[Yesterday, I was explaining basic built-in streams.&#160; Today I&#8217;ll be covering the advanced modes.&#160; The first thing is basic network access (http, ftp, etc).&#160; Normally, you would just use fopen() or file_get_contents().&#160; Well what would happen if you wanted to provide additional parameters to that call, like user agent?&#160; Meet stream_context_create(): $http_options = stream_context_create(array( &#160; [...]]]></description>
		<wfw:commentRss>http://www.stjohnjohnson.com/zend-php-certification/day-27-advanced-streams/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Day 26 &#8211; Directory Operations</title>
		<link>http://www.stjohnjohnson.com/zend-php-certification/day-26-directory-operations</link>
		<comments>http://www.stjohnjohnson.com/zend-php-certification/day-26-directory-operations#comments</comments>
		<pubDate>Sat, 16 Jan 2010 04:15:00 +0000</pubDate>
		<dc:creator>St. John</dc:creator>
				<category><![CDATA[Zend PHP Certification]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.stjohnjohnson.com/zend-php-certification/day-26-directory-operations</guid>
		<description><![CDATA[Now that we&#8217;ve talked about files, it&#8217;s time to talk about directory access.&#160; PHP has a whole variety of functions designed just for this!&#160; Here are the important ones: chdir($dir): Change working directory $dir = getcwd(): Get working directory mkdir($dir, [$permission], [$recursive]): Create a new directory with permission model (in octal) $permission is_dir($directory): Check if [...]]]></description>
		<wfw:commentRss>http://www.stjohnjohnson.com/zend-php-certification/day-26-directory-operations/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Day 25 &#8211; File Streams (cont.)</title>
		<link>http://www.stjohnjohnson.com/zend-php-certification/day-25-file-streams-cont</link>
		<comments>http://www.stjohnjohnson.com/zend-php-certification/day-25-file-streams-cont#comments</comments>
		<pubDate>Fri, 15 Jan 2010 04:05:00 +0000</pubDate>
		<dc:creator>St. John</dc:creator>
				<category><![CDATA[Zend PHP Certification]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.stjohnjohnson.com/zend-php-certification/day-25-file-streams-cont</guid>
		<description><![CDATA[Yesterday, I kind-of neglected to show you an example of how perform basic file access.&#160; Today I will remedy that!&#160; File access can be done various ways and each has its own reasons.&#160; Here is an example of a CSV read: $name = &#8220;news.csv&#8221;; &#160; if &#40;!is_file&#40;$name&#41;&#41; &#160; die &#40;&#34;File is missing!&#34;&#41;; &#160; $file = [...]]]></description>
		<wfw:commentRss>http://www.stjohnjohnson.com/zend-php-certification/day-25-file-streams-cont/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Day 24 &#8211; Streams</title>
		<link>http://www.stjohnjohnson.com/zend-php-certification/day-24-streams</link>
		<comments>http://www.stjohnjohnson.com/zend-php-certification/day-24-streams#comments</comments>
		<pubDate>Thu, 14 Jan 2010 03:37:00 +0000</pubDate>
		<dc:creator>St. John</dc:creator>
				<category><![CDATA[Zend PHP Certification]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.stjohnjohnson.com/zend-php-certification/day-24-streams</guid>
		<description><![CDATA[I only have one week before my certification exam!&#160; I&#8217;m shivering in my boots (if I had boots)!&#160; Well, the important part is not to worry and keep studying.&#160; Here is today&#8217;s topic (and the last chapter of the book): The streams layer is a series of classes/methods in PHP that manage the reading and [...]]]></description>
		<wfw:commentRss>http://www.stjohnjohnson.com/zend-php-certification/day-24-streams/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
