<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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" version="2.0">

<channel>
	<title>michaelwales.com</title>
	
	<link>http://michaelwales.com</link>
	<description>PHP Freelancer</description>
	<pubDate>Thu, 17 Jul 2008 19:59:05 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/MichaelWales" type="application/rss+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">603781</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.feedburner.com</feedburner:feedburnerHostname><item>
		<title>One Hundred Push-ups</title>
		<link>http://michaelwales.com/asides/one-hundred-push-ups/</link>
		<comments>http://michaelwales.com/asides/one-hundred-push-ups/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 07:46:15 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://michaelwales.com/?p=67</guid>
		<description><![CDATA[While deployed to the desert the military always labels it as an opportunity to improve yourself. Whether it be college coursework (doing it), physical fitness, or a variety of other self-improvement options.
I&#8217;ve decided to take this time to complete the One Hundred Push-ups challenge. It&#8217;s a 6-week program for people of any skill level. You [...]]]></description>
			<content:encoded><![CDATA[<p>While deployed to the desert the military always labels it as an opportunity to improve yourself. Whether it be college coursework (doing it), physical fitness, or a variety of other self-improvement options.</p>
<p>I&#8217;ve decided to take this time to complete the <a href="http://hundredpushups.com/" title="One Hundred Push-ups">One Hundred Push-ups</a> challenge. It&#8217;s a 6-week program for people of any skill level. You start out with an initial test to see how many push-ups you can do right now (I did 50).</p>
<p>From there, each training week has 3 days in which you workout, with each workout taking about 7 minutes. On Week 1, Day 1 I&#8217;ll start out with the following sets of push-ups: 10, 10, 8, 6, max (at least 7). By the end of program I&#8217;ll be doing: 56, 45, 42, 40, max (at least 56).</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/MichaelWales?a=taMVAj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=taMVAj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=vMzMDJ"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=vMzMDJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=PYtiAj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=PYtiAj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=kf52qJ"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=kf52qJ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://michaelwales.com/asides/one-hundred-push-ups/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHPFour’s Extended CodeIgniter Model</title>
		<link>http://michaelwales.com/asides/phpfours-extended-codeigniter-model/</link>
		<comments>http://michaelwales.com/asides/phpfours-extended-codeigniter-model/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 19:31:46 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<category><![CDATA[CodeIgniter]]></category>

		<guid isPermaLink="false">http://michaelwales.com/?p=66</guid>
		<description><![CDATA[PHPFour has just posted an excellent extended model for CodeIgniter. It is definitely an impressive piece of code and I have already included it within my local application repository (meaning, it&#8217;s going to become an active part of all my future CodeIgniter applications).
I had been working on my own ORM solution but I think PHPFour&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.phpfour.com/" title="PHPFour">PHPFour</a> has just posted an excellent <a href="http://www.phpfour.com/blog/2008/07/12/extended-model-for-codeigniter/" title="PHPFour: Extended Model for CodeIgniter">extended model for CodeIgniter</a>. It is definitely an impressive piece of code and I have already included it within my local application repository (meaning, it&#8217;s going to become an active part of all my future CodeIgniter applications).</p>
<p>I had been working on my own ORM solution but I think PHPFour&#8217;s library has a much better approach - it feels more like CodeIgniter to me than my own solution. I&#8217;ve yet to dig through the code extensively but upon first glance I didn&#8217;t notice any relationship methods which would definitely be a worthy addition to this library.</p>
<p>Finally, I&#8217;d like to offer an errata to their installation instructions:</p>
<blockquote><p>1. Replace the system/libraries/Model.php file with the attached Model.php (CodeIgniter version 1.6.3)</p></blockquote>
<p>Should be:</p>
<blockquote><p>1. Rename the attached Model.php to MY_Model.php and place within your application/libraries directory.</p></blockquote>
<p>We all know you shouldn&#8217;t be hacking the core&#8230;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/MichaelWales?a=apkqlj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=apkqlj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=uKaf1J"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=uKaf1J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=mu62qj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=mu62qj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=LIpUMJ"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=LIpUMJ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://michaelwales.com/asides/phpfours-extended-codeigniter-model/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Give Rejected Concepts New Life</title>
		<link>http://michaelwales.com/blog/give-rejected-concepts-new-life/</link>
		<comments>http://michaelwales.com/blog/give-rejected-concepts-new-life/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 18:55:17 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://michaelwales.com/?p=65</guid>
		<description><![CDATA[Clever Andy just went live after an aggressive marketing campaign that had a lot of people curious.
The basic premise behind the service is simple and has been accomplished in the past. Designers usually present more than one concept to a client and when the client makes their final decision, the left over designs don&#8217;t have [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cleverandy.com/" title="Clever Andy">Clever Andy</a> just went live after an aggressive marketing campaign that had <a href="http://www.fuelyourcreativity.com/clever-marketing-or-what/" title="Fuel Your Creativity: Clever Marketing or What?">a lot of people curious</a>.</p>
<p>The basic premise behind the service is simple and has been accomplished in the past. Designers usually present more than one concept to a client and when the client makes their final decision, the left over designs don&#8217;t have anywhere to call home. Designers will often keep them around for future clients or personal projects, or even place them up for sale on template sites. Clever Andy, at first glance, is pretty much the same thing.</p>
<p>But - here&#8217;s the twist (and it&#8217;s a big one): Clever Andy doesn&#8217;t sell your design off to someone else. That wouldn&#8217;t do your design justice (plus, you wouldn&#8217;t make as much money). Clever Andy actually takes your design, turns it into a full-fledged operational <a href="http://expressionengine.com/" title="ExpressionEngine">ExpressionEngine</a> site, actively seeks out clients that need the applications, tweaks it for the specific client, and then sells the entire package to them.</p>
<p>What&#8217;s in it for you? A 20% commission off the sale of the entire sale price (not just the design portion, the entire application&#8217;s sale). Clever Andy also sets up a <a href="http://www.basecamphq.com/?referrer=MICHAELWALES" title="Basecamp">Basecamp</a> account, <a href="http://haveamint.com/" title="Mint">Mint</a> stats, email via <a href="https://www.google.com/a/" title="Google Apps for Domains">Google Apps for Domains</a>, and hosting on <a href="http://enginehosting.com/" title="EngineHosting">EngineHosting</a>.</p>
<p>Clever Andy definitely sounds like a great concept - for designers and customers alike. I&#8217;m definitely looking forward to seeing some of the work they release!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/MichaelWales?a=4yI6Dj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=4yI6Dj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=5slbEJ"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=5slbEJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=JH5Brj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=JH5Brj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=fxgKmJ"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=fxgKmJ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://michaelwales.com/blog/give-rejected-concepts-new-life/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Social Network I Use</title>
		<link>http://michaelwales.com/asides/a-social-network-i-use/</link>
		<comments>http://michaelwales.com/asides/a-social-network-i-use/#comments</comments>
		<pubDate>Sat, 12 Jul 2008 12:55:36 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://michaelwales.com/?p=62</guid>
		<description><![CDATA[There are literally hundreds of social networks out there each with their own niche and target audience. Rarely do I find one that I am actually interested in using - I have profiles at LinkedIn, Facebook, MySpace, and who knows how many others but I couldn&#8217;t tell you the last time I logged into any [...]]]></description>
			<content:encoded><![CDATA[<p>There are literally hundreds of social networks out there each with their own niche and target audience. Rarely do I find one that I am actually interested in using - I have profiles at <a href="http://www.linkedin.com/" title="LinkedIn">LinkedIn</a>, <a href="http://www.facebook.com/" title="Facebook">Facebook</a>, <a href="http://www.myspace.com/" title="MySpace">MySpace</a>, and who knows how many others but I couldn&#8217;t tell you the last time I logged into any of them (my wife uses the MySpace account religiously, to keep up with friends back home).</p>
<p>This practice of having a profile everywhere but rarely using it does not seem to exist only within my own little world - most people I have discussed with have done the same thing (made a profile everywhere but use very few). This is somewhat disconcerting, especially as I work on a <a href="http://michaelwales.com/clients/buzzact/" title="Michael Wales Client: Buzzact">social network for a client</a> and a personal project of mine geared towards poker players. Luckily, both of these projects have other motivations and goals behind them - not just the social networking aspects of the service.</p>
<p>Anyways&#8230;</p>
<p>I recently signed up for <a href="http://www.last.fm/" title="Last.fm">Last.fm</a> because I have difficult time remember the names of bands and songs I like. This service is absolutely awesome! I spent a few hours last week setting up foobar2000 exactly how I want, getting registered on last.fm, and now music recommendations hit my inbox once a week based directly off of what I have been listening to.</p>
<p>I know I&#8217;m not using the service to it&#8217;s full potential, though. I&#8217;m not very concerned with writing a blog about the music I listen to or finding concert tickets (not to many concerts on <a href="http://www.google.com/search?&#038;q=MSR+Tampa" title="Google: MSR Tampa">Dirty Tampa</a>, lol). But, as a music recommendation engine - last.fm is top-notch!</p>
<p>I&#8217;ve setup a <a href="http://www.last.fm/group/CodeIgniter" title="Last.fm: CodeIgniter Group">group for CodeIgniter developers</a> - if you are already a last.fm member feel free to join. If you are not a last.fm member but, like me, you&#8217;re listening to music if you are awake, I highly recommend joining. Finally, feel free to check out <a href="http://www.last.fm/user/walesmd/" title="My last.fm profile">my profile</a> and be amazed at my taste in music - everything from KoRn and Godsmack, to Britney Spears and Justin Timberlake, to Three 6 Mafia and Lil Wayne.</p>
<p>If it&#8217;s not country, I enjoy it and there are a few country songs I&#8217;ll even listen to as well (it must become more prominent with age).</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/MichaelWales?a=eiEkLj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=eiEkLj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=fwhxKJ"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=fwhxKJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=2y5boj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=2y5boj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=b4pV0J"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=b4pV0J" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://michaelwales.com/asides/a-social-network-i-use/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Skype is Awesome</title>
		<link>http://michaelwales.com/asides/skype-is-awesome/</link>
		<comments>http://michaelwales.com/asides/skype-is-awesome/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 19:12:44 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://michaelwales.com/?p=61</guid>
		<description><![CDATA[I&#8217;ve used Skype in the past - just for Skype-to-Skype calls.
I&#8217;ve been debating how to stay in contact with my wife without literally killing myself. With her in Alaska, the prime time to call her is around 10-11 PM my time. On top of that, I have to walk a mile and a half to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve used <a href="http://www.skype.com/" title="Skype">Skype</a> in the past - just for Skype-to-Skype calls.</p>
<p>I&#8217;ve been debating how to stay in contact with my wife without literally killing myself. With her in Alaska, the prime time to call her is around 10-11 PM my time. On top of that, I have to walk a mile and a half to the nearest phone, wait in line, deal with base operators, crossed phone connections (<em>I don&#8217;t want to hear about the crazy, sexy dream you had about your wife - I&#8217;m trying to tell my wife about the one I had of her</em>).</p>
<p>So, early today, it just clicked: Skype! I can even continue using my phone cards for free and when those run out, it&#8217;s only $0.056 per minute which is cheaper than any phone card I&#8217;ve seen around and about three times cheaper than the cell-phone places here. Plus, I can lay right in my bed and talk to her - whenever I want.</p>
<p>The sound quality is great which is saying a lot for their service because our connection sucks (average 10k/sec download). Expect to see Skype gracing the <strong>Recommended Products</strong> section in the sidebar. I&#8217;ve always enjoyed it for quick chats with my clients but I never really &#8220;got it&#8221; until now - I&#8217;m so excited.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/MichaelWales?a=iSgKUj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=iSgKUj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=yn3NqJ"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=yn3NqJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=Vutxqj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=Vutxqj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=qpPuCJ"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=qpPuCJ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://michaelwales.com/asides/skype-is-awesome/feed/</wfw:commentRss>
		</item>
		<item>
		<title>32 Sci-Fi Novels You Should Read</title>
		<link>http://michaelwales.com/asides/32-sci-fi-novels-you-should-read/</link>
		<comments>http://michaelwales.com/asides/32-sci-fi-novels-you-should-read/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 17:55:02 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://michaelwales.com/?p=60</guid>
		<description><![CDATA[How to Split an Atom just posted a list of 32 Sci-Fi novels everyone should read, amazingly - 4 of my favorite 5 books made the list: Animal Farm by George Orwell, Brave New World by Aldous Huxley, 1984 by George Orwell, and Fahrenheit 451 by Ray Bradbury.
My fifth book, which isn&#8217;t on the list [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://howtosplitanatom.com/" title="How to Split an Atom">How to Split an Atom</a> just posted a list of <a href="http://howtosplitanatom.com/news/32-sci-fi-novels-you-should-read/" title="How to Split an Atom: 32 Sci-Fi Novels You Should Read">32 Sci-Fi novels everyone should read</a>, amazingly - 4 of my favorite 5 books made the list: <em>Animal Farm</em> by George Orwell, <em>Brave New World</em> by Aldous Huxley, <em>1984</em> by George Orwell, and <em>Fahrenheit 451</em> by Ray Bradbury.</p>
<p>My fifth book, which isn&#8217;t on the list (since it&#8217;s not Sci-Fi) is <em>To Kill a Mockingbird</em> by Harper Lee.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/MichaelWales?a=RnaYlj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=RnaYlj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=1tEL6J"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=1tEL6J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=QdTUuj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=QdTUuj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=tNdppJ"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=tNdppJ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://michaelwales.com/asides/32-sci-fi-novels-you-should-read/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CodeIgniter vs. Zend Framework</title>
		<link>http://michaelwales.com/asides/codeigniter-vs-zend-framework/</link>
		<comments>http://michaelwales.com/asides/codeigniter-vs-zend-framework/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 06:40:26 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://michaelwales.com/?p=59</guid>
		<description><![CDATA[Avnet Labs has a few great articles in which they compare CodeIgniter to the Zend Framework. I have often been lured over to the Zend Framework, simply because it&#8217;s the &#8220;official&#8221; solution but I always come back over to CodeIgniter after a week or two of playing around in Zend. I simply can&#8217;t get things [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.avnetlabs.com/" title="Avnet Labs">Avnet Labs</a> has a few great articles in which they compare <a href="http://www.codeigniter.com/" title="CodeIgniter">CodeIgniter</a> to the <a href="http://framework.zend.com/" title="Zend Framework">Zend Framework</a>. I have often been lured over to the Zend Framework, simply because it&#8217;s the &#8220;official&#8221; solution but I always come back over to CodeIgniter after a week or two of playing around in Zend. I simply can&#8217;t get things accomplished in the Zend Framework as quickly as I can in CodeIgniter.</p>
<p>Based on a <a href="http://www.avnetlabs.com/php/php-framework-comparison-benchmarks" title="Avnet Labs: PHP Framework Comparison Benchmarks">Avnet Labs benchmarks</a>, it appears I have another reason to stick with CodeIgniter - it&#8217;s amazingly fast. This really comes as no surprise, it&#8217;s something we&#8217;ve known since the beginning.</p>
<p>Additionally, Avnet has posted a <a href="http://www.avnetlabs.com/php/php-frameworks-revisited-codeigniter-vs-zend-framework" title="Avnet Labs: PHP Frameworks Revisited - CodeIgniter vs. Zend">feature-by-feature breakdown</a> between the two frameworks (the precursor to the benchmarks).</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/MichaelWales?a=VSsewj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=VSsewj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=CV0wjJ"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=CV0wjJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=SqowFj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=SqowFj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=55WxCJ"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=55WxCJ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://michaelwales.com/asides/codeigniter-vs-zend-framework/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Microsoft Acquires Powerset</title>
		<link>http://michaelwales.com/blog/microsoft-acquires-powerset/</link>
		<comments>http://michaelwales.com/blog/microsoft-acquires-powerset/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 06:06:00 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
		
		<category><![CDATA[Blog]]></category>

		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://michaelwales.com/?p=58</guid>
		<description><![CDATA[This is a great opportunity for Powerset - they've yet to go public with their entire product (they currently only allow searches of Wikipedia content) and Microsoft is sure to benefit, but are they going about this the right way? Adding Powerset to Live Search is a waste of the technology!]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.powerset.com/" title="Powerset">Powerset</a> has been acquired by Microsoft, a move that has been <a href="http://www.techcrunch.com/2008/05/10/powersets-dilemma-go-for-it-or-sell/" title="TechCrunch: Powerset's Dilemma: Go For It or Sell It">rumored for a long time</a> and <a href="http://www.techcrunch.com/2008/06/26/microsoft-to-buy-powerset-not-just-yet/" title="Microsoft to Buy Powerset? Not Just Yet.">resurfaced this week</a>. Microsoft has plans to <a href="http://arstechnica.com/news.ars/post/20080701-microsoft-buys-powerset-gets-foot-in-semantic-search-door.html" title="Ars Technica: Microsoft Buys Powerset, Get's Foot in Semantic Search Door">integrate the company&#8217;s search and natural language features into Live Search</a>. Powerset&#8217;s employees will remain in San Francisco and become part of the Microsoft&#8217;s Search Relevance team.</p>
<p>This is a great opportunity for Powerset - they&#8217;ve yet to go public with their entire product (they currently only allow searches of Wikipedia content - it&#8217;s really good, too) and Microsoft is sure to benefit, but are they going about this the right way?</p>
<p>Google owns search. It&#8217;s been this way for a long time and <a href="http://www.theregister.co.uk/2006/08/15/google_brand_abuse/" title="The Register: Google Brand Abuse">despite Google&#8217;s best efforts</a> their brand has become synonymous with search (This branding leads to a &#8220;watering down&#8221; of the brand making it less powerful - think of Kleenex. How many of you have a different brand of <em>facial tissue</em> sitting around the house yet still call it Kleenex?).</p>
<p>So, Google&#8217;s been dominating the search market forever and as we all know - people are biased, prejudice, and come to every table with predisposed opinions in regards to the rest of those around the table.</p>
<blockquote><p>
<strong>Google:</strong> Best search engine their is - great bonuses (Apps for Domains, Mail, etc). Are they spreading themselves to thin? They have a bad habit of ignoring some of their bonuses.<br />
<strong>Yahoo:</strong> A portal - most of their stuff is easily replaced with newer, more engaging content. Flickr and del.icio.us are nice. Should have sold to Microsoft. How much are they really contributing to this Google/Yahoo search Flash content idea?<br />
<strong>Microsoft:</strong> uhh&#8230; probably better than Yahoo, I don&#8217;t know. My wife uses MSN Messenger to IM me (I use Pidgin). Microsoft/MSN/Live - can&#8217;t they pick a name and stick to it?
</p></blockquote>
<p>See what I mean? Adding Powerset to Live Search is a waste of the technology! I&#8217;m sorry Live but you will never become king of search - at least not apparently.</p>
<p>Here&#8217;s what should have happened: Microsoft acquires Powerset and leaves them alone. Let the team keep doing what they are doing, developing a technology that will surpass Google one day. I&#8217;m not saying Powerset is the company that will do this - especially not as Live Search - but the technology itself is the future of search.</p>
<p>Google was spread by word of mouth by a bunch of us nerds - I still remember when I first was told about it, on mIRC. I&#8217;ve used it at least 80 times every day since that first introduction - it was small, simple, and just a bunch of nerds making something better.</p>
<p>Powerset didn&#8217;t quite have the small, simple, and bunch of nerds parts down - it&#8217;s had quite a few highly publicized multi-million dollar rounds of financing. But, it easily could have taken the &#8220;word of mouth&#8221; tactic and spread like wildfire through the nerd community. That&#8217;s the key to search - the nerd community. When my wife/mom can&#8217;t find something on the Internet they ask me and I always reply, &#8220;Google this: [well formed search phrase].&#8221;</p>
<p>What if I would have started saying, &#8220;Powerset this: [natural language search].&#8221; It will never happen with Live in the header&#8230;</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/MichaelWales?a=nR6Iqj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=nR6Iqj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=AbUl6J"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=AbUl6J" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=CZMLdj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=CZMLdj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=DumbkJ"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=DumbkJ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://michaelwales.com/blog/microsoft-acquires-powerset/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Handle Passwords Securely: Storage</title>
		<link>http://michaelwales.com/tutorials/handle-passwords-securely-storage/</link>
		<comments>http://michaelwales.com/tutorials/handle-passwords-securely-storage/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 20:51:53 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
		
		<category><![CDATA[Tutorials]]></category>

		<category><![CDATA[CodeIgniter]]></category>

		<guid isPermaLink="false">http://michaelwales.com/?p=57</guid>
		<description><![CDATA[Mathew Davies was recently featured on Community Voice (Elliot Haughin and myself were featured in past articles) where he discusses some of the security features within his Redux Authentication library. In his Community Voice he even took the opportunity to mention an article I wrote before the crash of 2008, referencing how to handle a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mathew-davies.co.uk/" title="Mathew Davies">Mathew Davies</a> was recently <a href="http://codeigniter.com/blog/codeigniter_community_voice_mathew_davies/" title="CodeIgniter Blog: Community Voice - Matthew Davies">featured on Community Voice</a> (<a href="http://codeigniter.com/blog/codeigniter_community_voice_elliot_haughin/" title="CodeIgniter Blog: Community Voice - Ellior Haughin">Elliot Haughin</a> and <a href="http://codeigniter.com/blog/codeigniter_community_voice_michael_wales/" title="CodeIgniter Blog: Community Voice - Michael Wales">myself</a> were featured in past articles) where he discusses some of the security features within his <a href="http://code.google.com/p/reduxauth/" title="Google Code: Redux Authentication Library">Redux Authentication library</a>. In his Community Voice he even took the opportunity to mention an article I wrote before the <a href="http://michaelwales.com/blog/yes-its-crazy-here/" title="Michael Wales: Yes, It's Crazy Here">crash of 2008</a>, referencing how to handle a user&#8217;s forgotten password.</p>
<p>I&#8217;ve taken this as a note to rewrite that article as well as to extend it a bit&#8230;</p>
<p>Computer systems in general and your web application especially, never store passwords in plain-text. This is a very basic concept - if you don&#8217;t quite grasp the reason behind not storing passwords as plain-text I&#8217;ll take the stance of security expert <a href="http://www.matasano.com/log/958/enough-with-the-rainbow-tables-what-you-need-to-know-about-secure-password-schemes/" title="Matasano Chargen: Enough With the Rainbow Tables - What You Need to Know About Secure Password Schemes">Matasano Chargen</a> and advise you to use someone else&#8217;s security system (Redux, for instance).</p>
<p>I&#8217;m sure we are all aware of the fact we should not be storing passwords at all; rather, we should be storing a hashed string representing that password. By hashing the password, we theoretically create a one-way encryption mechanism whereby the original password can not be restored. We then validate users by using the same hashing algorithm on their input and check if the two hash strings match.</p>
<p>Let&#8217;s look at the following code for example:</p>
<pre class="syntax-highlight:php">
function password_check($password) {
  // This is the valid password hash - let&#039;s pretend it came from a database
  $v_password = &#039;af2c41eb4e034ed0a417d1ec637082072a4d3aae&#039;;

  // Load our security helper, so we can use the sha1() function
  // if our server doesn&#039;t have it already.
  $this-&gt;load-&gt;helper(&#039;security&#039;);

  // Check if the hash of the passed password === the valid password hash
  if (sha1($password) === $v_password)) {
    return TRUE;
  }
  return FALSE;
}
</pre>
<p>Now, I bet you are looking at that string <em>af2c41eb4e034ed0a417d1ec637082072a4d3aae</em> and thinking, &#8220;Man, that&#8217;s pretty secure! There&#8217;s no way I could guess what that password is.&#8221;</p>
<p>Let me show you a little trick, thanks to our good friend Google. A quick search for that hash string returned this <a href="http://mina.naguib.ca/dist/digest/digest-844.txt">text file</a>, that has loads of hash strings for a variety of English words. One of those words happens to be <em>wizard</em>, which also happens to be our password.</p>
<p>So, if we can&#8217;t hash a string and be safe - what are we to do?</p>
<p>The most common method of securing a user&#8217;s password is by adding a little salt. By assigning each user a random string (the salt) and appending that to the password string, prior to hashing it, we have significantly improved our security.</p>
<p>Using the same code example as above, but now adding in the salt:</p>
<pre class="syntax-highlight:php">
function password_check($password) {
  // This is the user&#039;s salt - which we pulled from a database
  $salt = &#039;Pr8Qm7ahY&#039;;
  // This is the valid salt + password hash - let&#039;s pretend it came from a database
  $v_password = &#039;2dab11e9958c2e785ec6dbaaa4fc461969531b01&#039;;

  // Load our security helper, so we can use the sha1() function
  // if our server doesn&#039;t have it already.
  $this-&gt;load-&gt;helper(&#039;security&#039;);

  // Check if the hash of the passed password === the valid password hash
  if (sha1($salt . $password) === $v_password)) {
    return TRUE;
  }
  return FALSE;
}
</pre>
<p>The first thing you should have noticed is our valid password hash changed - significantly. I invite you to Google that string - you won&#8217;t come up with any results (well, maybe this page after the GoogleBot pays me a visit - but nothing worthwhile).</p>
<p>So, is it unstoppable? Absolutely not - by no means. I think it&#8217;s safe to say that any string that is encrypted can eventually be decrypted. Security isn&#8217;t a practice in making an unstoppable algorithm, you simply need to create an algorithm in which the return is not worth the time invested in cracking it.</p>
<p>The password within this system could easily be cracked by simply hashing every possibly combination of characters. Using our salt + password (which is 15 characters) and our character set ([a-zA-Z0-9]) there are 2.40656038 × 10<sup>73</sup> possible combinations.</p>
<p>I ran the following code on my laptop 5 times, within the CodeIgniter framework, to come up with an estimation as to how many 15-character SHA1 hashes your average computer could process. Please bare with me, I realize this is a fairly arbitrary number that could be astronomically improved by changing any of the included variables (compiled low-level language, dedicated system, more RAM, faster processor, etc). Additionally, I am hashing a randomized string each pass rather than incrementing one of the character positions in a structured manner (which is the preferred method of a brute-force attack of this nature).</p>
<pre class="syntax-highlight:php">
function time_sha1($loops = 10000) {
  $this-&gt;load-&gt;helpers(array(&#039;security&#039;, &#039;string&#039;));

  $this-&gt;benchmark-&gt;mark(&#039;loop_start&#039;);
  for ($i = 0; $i &lt; $loops; ++$i) {
    sha1(random_string(&#039;alnum&#039;, 15));
  }
  $this-&gt;benchmark-&gt;mark(&#039;loop_end&#039;);
  echo $this-&gt;benchmark-&gt;elapsed_time(&#039;loop_start&#039;, &#039;loop_end&#039;);
}
</pre>
<p>This gave me an average of 0.65142 seconds per 10,000 hashes, or 15,351 per second. So&#8230; on my little laptop I would only make it through 484,430,371,026 after <strong>a year</strong> of searching! It would take 4.96781483 × 10<sup>61</sup> years to test out every combination (and that is assuming I knew the length of the hash and password together was 15 characters).</p>
<p>There are definitely some good conversations discussing the merits of slower encryption methods (mcrypt and bcrypt, for instance). The slower your encryption method the more secure your application is from a brute-force attack of this nature, but (and take this for what it is worth) in my experience and in my past projects, I have had little need to go beyond the salt + password hash algorithm. Of course, this all depends on the application you are working with - banks, government agencies, corporate intranets? Sure, you have the horsepower and the need for a higher level of encryption than most of us will ever need.</p>
<p>Next time: What to do when a user forgets their password.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/MichaelWales?a=3tnWdj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=3tnWdj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=E9ZGPJ"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=E9ZGPJ" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=CrUhdj"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=CrUhdj" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=A0izCJ"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=A0izCJ" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://michaelwales.com/tutorials/handle-passwords-securely-storage/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Internet for Everyone</title>
		<link>http://michaelwales.com/asides/internet-for-everyone/</link>
		<comments>http://michaelwales.com/asides/internet-for-everyone/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 04:26:18 +0000</pubDate>
		<dc:creator>Michael Wales</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://michaelwales.com/?p=56</guid>
		<description><![CDATA[I came across an interesting statistic today while perusing the Internet for Everyone homepage.
Alaska, my state of residence, is second only to New Hampshire in regards to broadband adoption rate. 62.5% of homes in Alaska use a broadband connection, compared to New Hampshire&#8217;s 64.9% (data was taken from the U.S. Census Bureau&#8217;s 2007 Current Population [...]]]></description>
			<content:encoded><![CDATA[<p>I came across an interesting statistic today while perusing the <a href="http://www.internetforeveryone.org/" title="Internet for Everyone">Internet for Everyone</a> homepage.</p>
<p>Alaska, my state of residence, is second only to New Hampshire in regards to broadband adoption rate. 62.5% of homes in Alaska use a broadband connection, compared to New Hampshire&#8217;s 64.9% (data was taken from the U.S. Census Bureau&#8217;s 2007 Current Population Survey).</p>
<p>I definitely encourage everyone to look over the Internet for Everyone website, a lot of good information there and hopefully they can get something accomplished in Washington.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~f/MichaelWales?a=PtPuXi"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=PtPuXi" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=lVtgaI"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=lVtgaI" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=O3o6Ci"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=O3o6Ci" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/MichaelWales?a=oFDEyI"><img src="http://feeds.feedburner.com/~f/MichaelWales?i=oFDEyI" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://michaelwales.com/asides/internet-for-everyone/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
