<?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>Derek Gathright</title>
	<atom:link href="http://www.derekville.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.derekville.net</link>
	<description>Scribbles &#38; Bits</description>
	<lastBuildDate>Fri, 18 Jun 2010 17:36:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Return to Sunnyvale</title>
		<link>http://www.derekville.net/2010/return-to-sunnyvale/</link>
		<comments>http://www.derekville.net/2010/return-to-sunnyvale/#comments</comments>
		<pubDate>Sat, 24 Apr 2010 01:26:48 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Career]]></category>
		<category><![CDATA[Yahoo]]></category>
		<category><![CDATA[Sunnyvale]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=702</guid>
		<description><![CDATA[So right now I&#8217;m sitting in a booth on the Yahoo! campus, the same booth where I set a goal 20 months ago that one day I&#8217;d work for Yahoo! and&#8230;. [Wavy distorted omg we're going into a flashback. Begin &#8230; <a href="http://www.derekville.net/2010/return-to-sunnyvale/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div align="center"><img src="http://s89997654.onlinehome.us/screencaps/Flickr_Photo_Download__yahoo-sunnyvale-04-20100618-083757.jpg" /></div>
<p>So right now I&#8217;m sitting in a booth on the Yahoo! campus, the same booth where I set a goal 20 months ago that one day I&#8217;d work for Yahoo! and&#8230;.</p>
<p>[Wavy distorted omg we're going into a flashback.  Begin narration]</p>
<p>My first experience on the Yahoo campus was for Y! HackDay 2008.  I remember coming to the campus, being totally lost, and overwhelmed, almost like your first day of High School or College.  I wasn&#8217;t an employee or anything.  I was just a dumb programmer who wanted a taste of what Silicon Valley was really like. Seriously, I come from the startup world in Kansas City, I was in absolute awe of the place.  This is where the Internet happens.  Holy shit.</p>
<p>I came to HackDay armed with an idea for a hack to build, but was totally unable to focus, so I just sat around, tweeting, talking, and having fun.  The music, the hacks, the food, the beer. I was totally awestruck when I talked to someone who worked at Yahoo!, especially the ones working on products I had used.  I knew at that moment this was a place I&#8217;d always strive to work at.  I knew I just *had* to work here, and be the person on the other end of that conversation.</p>
<p>Through the course of that weekend, I met <a href="http://twitter.com/ShawnRecruits4u">a recruiter</a> who for one reason or another took interest in my skills and said he&#8217;d follow up with me.  I didn&#8217;t expect he would and he was just being nice.  A couple weeks later I got a call from him stating he was interested in setting up an interview.  I was shocked.  &#8220;Ok, yeah, umm.. sure, anytime&#8221;  I was so nervous before that first call.  I reviewed just about every book I owned on programming, and I own a lot.  I got the call and was speaking with an engineering manager who started asking me all sorts of questions about web development.  In retrospect, I totally bombed it, and knew it.  Rejected.</p>
<p>Down, but not out, I was focused, I knew it was attainable, but I just needed more time.  So, over the next year I did just about everything I could to get my skills up to the level they needed to be for another crack at an interview, always keeping that original interview experience in mind.  I had a blueprint.  A plan.</p>
<p>A year later I got an email&#8230; &#8220;I&#8217;m back at Yahoo! Want another interview?&#8221;  It was the original recruiter.  &#8220;Yeah, absolutely.&#8221;  The only goal I had this time was getting further than the first.  I wouldn&#8217;t be totally bummed out if I didn&#8217;t get the job, but I at least wanted an on-site interview, just as validation I was making progress.  Off I went, studying my ass off for about a week straight, so focused on the lone objective of nailing that phone-screen.  The phone rang, and we started chatting.  These questions were totally different from the first time.  But that&#8217;s ok, I knew them.  Apparently I did well, and I got an on-site.</p>
<p>The on-site (at the Santa Monica office) went well, and I got an offer.  It was a big step leaving Kansas City, but one that I&#8217;d always regret if I stayed.  So off I went, off to sunny SoCal.  I started at the Santa Monica office working with the Entertainment team in November.  Due to some mix-ups, I never did make it up here to Sunnyvale for training &amp; orientation.  Beyond that, there was never much need for me to be up here in person as we have tele-conferencing equipment galore, and these virtual meetings are in our DNA because we have offices around the country, and around the world.</p>
<p>So 5 months go by and I finally get up here for my first time.  I&#8217;m actually glad I didn&#8217;t get up here before.  I get to experience my first day at Yahoo, twice.  I knew it was going to be weird, a good weird, and I knew that first time I came here was going to start flashing back.  So here I am, sitting in the same booth, sipping my (free) mocha cappucino, admiring the courtyard, the weather, and the conversations going on around me.  This is awesome.  I have somewhere to be right now.  But, nope&#8230;</p>
<p>If you haven&#8217;t set goals for yourself, do it.  Set big ones.  Set life-changing ones.  When you achieve those, set higher ones, and just keep rolling.  If you don&#8217;t have goals, find them.  I stumbled across this one because I saw a tweet about HackDay, thought it sounded fun, and stepped on a plane to fly out here almost 2 years ago.  Random.  Lucky&#8230;  Bold.</p>
<p>It&#8217;s feelings like this that you wish you could just bottle up and relive whenever you want.</p>
<p>So, I guess that&#8217;s the reason I&#8217;m writing this. A 30 minute slice of awesomeness, carved into this blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2010/return-to-sunnyvale/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>My Birthday Gift to Twitter – I Quit</title>
		<link>http://www.derekville.net/2010/my-birthday-gift-to-twitter-i-quit/</link>
		<comments>http://www.derekville.net/2010/my-birthday-gift-to-twitter-i-quit/#comments</comments>
		<pubDate>Sun, 21 Mar 2010 20:59:24 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Unsorted]]></category>
		<category><![CDATA[tweenky]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=678</guid>
		<description><![CDATA[As Twttr (sic) celebrates its 4th birthday, I figure it&#8217;s as good of time as any to blog about something I&#8217;ve been thinking for a while.  No, don&#8217;t worry, I&#8217;m not going to quit tweeting, but I will quit competing. &#8230; <a href="http://www.derekville.net/2010/my-birthday-gift-to-twitter-i-quit/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As Twttr (sic) <a href="http://mashable.com/2009/03/21/happy-birthday-twitter/">celebrates its 4th birthday</a>, I figure it&#8217;s as good of time as any to blog about something I&#8217;ve been thinking for a while.  No, don&#8217;t worry, I&#8217;m not going to quit tweeting, but I will quit competing.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://tctechcrunch.files.wordpress.com/2010/02/al.png?w=630&amp;h=453" alt="" width="458" height="329" /></p>
<p>Twitter engineer Alex Payne sent out a prophetic tweet last month.  In this message to the Twittersphere, he basically says that Twitter.com is going to be so badass and feature-rich that you&#8217;ll soon rethink your need for 3rd party Twitter clients.  This caused an uproar in the developer community as many (over-reacting) people took his comments to mean Twitter was going to try &amp; kill off the alternative clients.  <a href="http://twitter.com/al3x">@Al3x</a> and the rest of Twitter HQ went into damage control mode to explain that Twitter wasn&#8217;t attacking alternative clients and that they were still supportive of the developer community. Hugs all around, right? No.  I think most people saw the writing on the wall at that point.</p>
<p>I know I have.  So, after 2 years of developing my own Twitter clients, I&#8217;ve decided that I&#8217;m finally throwing in the towel.  Twitter has built a great web app, so there&#8217;s little need for me to continue.  There&#8217;s part of me that is sad, but mostly I&#8217;m really happy for Twitter.  Also, I&#8217;m relieved as I can now focus on something else.</p>
<p>A little background&#8230; It wasn&#8217;t up until recently that Twitter&#8217;s own web client (Twitter.com) lacked most of the features that I wanted, so I was forced to build them on my own.  I began building <a href="http://tweenky.com">Tweenky</a> almost 2 years ago and the goal was simple&#8230; create a Twitter web client that had the following features:<br />
A) A friendly Ajax interface<br />
B) Integrated searching<br />
C) Groups<br />
D) Saved searches<br />
E) Fixed the @reply problem where replies were not visible to your replies feed unless it started with &#8220;@username&#8221;<br />
F) Had other basic shortcut features (like retweet links)</p>
<p>When it was ready in the summer of &#8217;08, I released it to the wild with the help of <a href="http://techcrunch.com/2008/07/24/tweenky-brings-gmails-good-looks-to-twitter/">TechCrunch</a> and other tech blogs, who all praised its set of features.  I&#8217;m not going to claim I was the only one working on such features.  Most of them were just obvious extensions to how people really wanted to use the Twitter service.  They would have been implemented by Twitter themselves had the service been stable enough to add feature development resources.  It&#8217;s funny to think that between 2006 and 2009 Twitter.com remained largely unchanged. Why? Because they were generating too many failwhales and fixing those was the #1 priority.</p>
<p>By 2009, the engineering team had rebuilt Twitter into a stable platform and they were finally able to let the front-end developers loose and start working on features.  First came some ajaxy goodness, then integrated searching the replies/mentions fix.  Later in the year they added Lists and the Retweet feature.  At that point, I noticed Tweenky started to become less &amp; less useful.  Others did too and the userbase started to decrease.</p>
<p>Enter 2010&#8230; The front-end team is beginning to crank out features &amp; tweaks at a fast pace.  So far this year we&#8217;ve seen hovercards, location dectection, and integrated maps.  It&#8217;s finally at the point where the speed of innovative features is out-pacing what the developer community will be able to keep up with.  There are still some major clients, such as Tweetie (on the desktop) that haven&#8217;t even integrated Lists yet.  I&#8217;m not going to attempt to work on the hovercards or integrated maps, not because I can&#8217;t do them, but because what&#8217;s the point? I&#8217;ve actually begun using the Twitter.com web client more than my own client because it simply lacks essential features.  Sure I can add them, but once I&#8217;ve completed that, the larger-than-1-person-front-end team at Twitter will have rolled out a couple more slick features, and I will always be playing catch-up.</p>
<p>So here&#8217;s the point of this post&#8230; I&#8217;m done.  From here on out I suspect the majority of my Twitter time will be spent on the Twitter.com web client.  Don&#8217;t take this the wrong way, I&#8217;m actually really happy for Twitter and the awesome front-end/UX team they&#8217;ve assembled (which includes a number of ex-Yahoo&#8217;s =D ).  They&#8217;ve implemented most of the &#8220;must-have&#8221; features that 3rd party developers have been working on for years.  This is a good thing because those features are now available to the majority of the Twitter userbase instead of a small portion.  I suspect over the course of 2010 and beyond, the pace that we see new features will continue to increase, and with every new release, more &amp; more 3rd party developers will cease working on their own clients.  This will be a bitter pill for some in the developer community to swallow but the side-effect is they&#8217;ll be spending less time on simple, basic features that Twitter.com should have, and instead hopefully on innovative non-client apps or things completly unrelated to Twitter.</p>
<p>I&#8217;m happy with this direction. The main reason I&#8217;ve developed Twitter clients is to geek around and gain experience in areas I feel my knowledge is lacking. I&#8217;ve never approached my client development as &#8220;OMG, I have to get as many people as possible to use this thing so I can make money and/or sell it!&#8221;  I&#8217;ve never attempted to monetize my work.  I&#8217;ve just approached it as there&#8217;s a certain user experience I want to have with Twitter, and if anyone else wants to join the fun, cool. No? That&#8217;s cool too.  Work hard and good things will come.  Having converted the original Tweenky client from mostly PHP to all JavaScript, I&#8217;ve been able to gain valuable experience with jQuery, YUI3, &amp; JS in general.  To me, that is satisfying enough.  All the JS, REST 	API, and scaling knowledge I gained through this process is one of the reasons I now have a job at Yahoo.</p>
<p>So what&#8217;s next? I dunno. If I&#8217;m spending X less hours per week trying to replace Twitter.com, I can now spend X hours working on something else.  I&#8217;ll most certainly work on some non-client Twitter apps, but I&#8217;m hoping to spend the majority of my time on non-related Twitter projects.  Maybe some much needed <a href="http://nodejs.org/">Node.js</a> hacking?  Maybe some WebOS apps?  Hmmm&#8230; Stay tuned.</p>
<p>P.S. Tweenky has always been an open-source project.  You can find the source code <a href="http://github.com/drgath/tweenky/">on GitHub</a>. You can also find Tweenky&#8217;s cousin &#8220;Tweetanium&#8221; (a YUI3 rewrite) <a href="http://github.com/drgath/Tweetanium">on GitHub</a> as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2010/my-birthday-gift-to-twitter-i-quit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Node-YQL</title>
		<link>http://www.derekville.net/2010/node-yql/</link>
		<comments>http://www.derekville.net/2010/node-yql/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 20:29:04 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[node]]></category>
		<category><![CDATA[yql]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=676</guid>
		<description><![CDATA[The more I play around with Node.js, the more I love server-side JavaScript. Once you get over the weirdness of writing JavaScript outside of the browser, it feels very natural. And the bonus is that it is blazing fast. Also, &#8230; <a href="http://www.derekville.net/2010/node-yql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div align="center" style="float:left; padding:20px;"><img src="http://farm3.static.flickr.com/2601/3858500752_9c3a39e4af.jpg" height="200" /></div>
<p>The more I play around with <a href="http://nodejs.org/">Node.js</a>, the more I love server-side JavaScript.  Once you get over the weirdness of writing JavaScript outside of the browser, it feels very natural.  And the bonus is that it is blazing fast.  </p>
<p>Also, as I&#8217;ve been playing around with <a href="http://developer.yahoo.com/yql/">YQL</a> (Yahoo Query Language) more lately, I realized I wanted to be able to access YQL data from within my Node app.  So, I created a <a href="http://github.com/drgath/node-yql">node-yql </a> module.  </p>
<p>Now you can do something like&#8230;</p>
<div style="clear:both"></div>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">YQL.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;SELECT * FROM weather.forecast WHERE location=90066&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>response<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> location  <span style="color: #339933;">=</span> response.<span style="color: #660066;">query</span>.<span style="color: #660066;">results</span>.<span style="color: #660066;">channel</span>.<span style="color: #660066;">location</span><span style="color: #339933;">,</span>
	    condition <span style="color: #339933;">=</span> response.<span style="color: #660066;">query</span>.<span style="color: #660066;">results</span>.<span style="color: #660066;">channel</span>.<span style="color: #000066; font-weight: bold;">item</span>.<span style="color: #660066;">condition</span><span style="color: #339933;">;</span>
&nbsp;
	sys.<span style="color: #660066;">puts</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;The current temperature in &quot;</span> <span style="color: #339933;">+</span> location.<span style="color: #660066;">city</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; is &quot;</span> <span style="color: #339933;">+</span> condition.<span style="color: #660066;">temp</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; degrees&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">// Output: The current temperature in Los Angeles is 57 degrees</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2010/node-yql/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jsFiddle: A JavaScript playground</title>
		<link>http://www.derekville.net/2010/jsfiddle-a-javascript-playground/</link>
		<comments>http://www.derekville.net/2010/jsfiddle-a-javascript-playground/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 05:59:24 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jsfiddle]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=669</guid>
		<description><![CDATA[Ajaxian had a story yesterday about a brand-new JavaScript playground called jsFiddle. A write and execute web-based JavaScript IDE is nothing new, but this is much, much more than that. The real power of jsFiddle is that you have the &#8230; <a href="http://www.derekville.net/2010/jsfiddle-a-javascript-playground/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ajaxian had <a href="http://ajaxian.com/archives/jsfiddle" target="_blank">a story</a> yesterday about a brand-new JavaScript playground called <a href="http://jsfiddle.net">jsFiddle</a>. A write and execute web-based JavaScript IDE is nothing new, but this is much, much more than that.</p>
<p><a href="http://s89997654.onlinehome.us/screencaps//YQL_YUI3_Twitter_example_-_jsFiddle_-_Online_Editor_for_the_Web_%28JavaScript%2C_MooTools%2C_jQuery%2C_Prototype%2C_YUI%2C_Glow_and_Dojo%2C_HTML%2C_CSS%29-20100224-215440.jpg"><img width="100%" src="http://s89997654.onlinehome.us/screencaps//YQL_YUI3_Twitter_example_-_jsFiddle_-_Online_Editor_for_the_Web_%28JavaScript%2C_MooTools%2C_jQuery%2C_Prototype%2C_YUI%2C_Glow_and_Dojo%2C_HTML%2C_CSS%29-20100224-215440.jpg"></a></p>
<p>The real power of jsFiddle is that you have the option to include any of the most popular JS libraries, including; Mootools, jQuery, Prototype, YUI2.8, YUI3, Glow, Vanilla, Dojo, Processing.js, &#038; ExtJS.  This feature gives anyone the ability to try out any of these libraries without going through the task of downloading, extracting, and coded up some examples.  With a few mouse-clicks you can view example snippets from any of the major JS libraries, and start editing them to see how they work.</p>
<p>As if that wasn&#8217;t enough, jsFiddle also includes social features that give you the ability to write a snippet, save it, and share the URL.  As I was hanging out in various JavaScript IRC chatrooms tonight, I continually found myself using jsFiddle to code up snippets to answer questions.  In the past, everyone would always just use Pastebin.com, but that lacks any interactive features.  Now you can use jsFiddle as a replacement to Pastebin for any JS, HTML, or CSS snippets and the user will have the ability to actually edit, execute, and view the output.</p>
<p>As icing on the cake, you can take your snippets, copy the embed code, and paste them anywhere.  Here&#8217;s a snippet that I was able to code up in about 15 minutes (writing this blog post took longer than that!) to demonstrate the power of YUI3, YQL, and the Twitter API.  In this iframe, you&#8217;ll find all the JS, CSS, and HTML you need to create a simple little Twitter widget.</p>
<p>In all, this is an amazing product that I&#8217;ll likely find myself using on a daily basis.</p>
<p><iframe style="width: 100%; height: 500px" src="http://jsfiddle.net/derek/Vjxt2/embedded/"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2010/jsfiddle-a-javascript-playground/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Crockford on JavaScript: Part 1</title>
		<link>http://www.derekville.net/2010/crockford-on-javascript-part-1/</link>
		<comments>http://www.derekville.net/2010/crockford-on-javascript-part-1/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 08:08:46 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Unsorted]]></category>
		<category><![CDATA[crockford]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=665</guid>
		<description><![CDATA[I just finished watching Part 1 of Douglas Crockford&#8217;s ongoing lecture series on JavaScript, and it&#8217;s fascinating stuff. A must watch for any programmer. Even if you don&#8217;t code in JS, it&#8217;s worth watching simply because this first part is &#8230; <a href="http://www.derekville.net/2010/crockford-on-javascript-part-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div><object width="576" height="324"><param name="movie" value="http://d.yimg.com/m/up/ypp/default/player.swf"></param><param name="flashVars" value="vid=17880750&#038;"></param><param name="allowfullscreen" value="true"></param><param name="wmode" value="transparent"></param><embed width="576" height="324" allowFullScreen="true" src="http://d.yimg.com/m/up/ypp/default/player.swf" type="application/x-shockwave-flash" flashvars="vid=17880750&#038;"></embed></object></div>
<p>I just finished watching Part 1 of Douglas Crockford&#8217;s ongoing lecture series on JavaScript, and it&#8217;s fascinating stuff.  A must watch for any programmer.  Even if you don&#8217;t code in JS, it&#8217;s worth watching simply because this first part is all about the history of programming. (video of talk is below)</p>
<p>As web developers, we spend anywhere from a little bit of our time to the majority of it coding in JavaScript, but few know the history behind the language.  I&#8217;m not talking about just reading the Wikipedia article and knowing that it was created by Brenden Eich at Netscape in &#8217;95, I&#8217;m talking about the history of where the ideas behind the language came from and everything that influenced it.  Like most every language, JavaScript&#8217;s syntax and style didn&#8217;t appear out of nowhere, it was influenced by a number of different languages, and those influencers were in turn also influenced by a slew of languages.  </p>
<p>It&#8217;s easy for those of us that started programming with C (or anything after) to just look at it as the &#8220;Alpha&#8221; language and ignore everything that happened before it, but that&#8217;s missing a lot of really important history, that we, as professionals, should know.  It&#8217;s like a politician in the United States just ignoring everything that happened before 1776.  Learn from the mistakes of the past and spot the trends going forward and pave the best path.  Crockford shows us snippets of languages that were created in the 60&#8242;s and 70&#8242;, dissects them, and explains why certain people thought they were good ideas at the time.  It&#8217;s amazing to think that there was a time before modules or functions, or before we had figured out the best way to format a <em>for</em> loop.  The history of programming languages is littered with a ton of bad ideas, but occasional brilliant ideas.  Those brilliant ideas are what get refined, and lay the foundation in the next generation of languages.</p>
<p>Finally, one concept he goes back to over and over that I found really interesting is that programmers are a <strong>very</strong> stubborn breed.  We all know this.  There&#8217;s little point to all our flame wars on which language or framework is better, and most of it comes from either insecurity or ignorance.  He says it takes a long time for us to evolve, and he&#8217;s right.  It&#8217;s not because new ideas aren&#8217;t coming along all the time, but it&#8217;s because the adoption of new ideas only take place at each generation shift, when  the &#8220;old&#8221; thinkers get replaced those with few preconceived notions.  The world didn&#8217;t wake up one day and realize that GOTO statements were bad, it&#8217;s that those who supported GOTO and argued for it for a decade finally retired.  Out with the old, in with the new.  That&#8217;s evolution.</p>
<p>Anyways, I could go on and on about all the &#8220;Ah hah!&#8221; moments in this talk, but you really need to watch it for yourself. I&#8217;ll probably chime in again after part 2, which I&#8217;m probably going to watch right now.  I&#8217;m excited.  It&#8217;s like a sequel.  &#8220;Ooo! What happens now?!&#8221;</p>
<p>Also, here&#8217;s the &#8220;Mother of all Demos&#8221; video he mentions about halfway through.</p>
<div align="center">
<embed id=VideoPlayback src=http://video.google.com/googleplayer.swf?docid=-8734787622017763097&#038;hl=en&#038;fs=true style=width:400px;height:326px allowFullScreen=true allowScriptAccess=always type=application/x-shockwave-flash></embed></div>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2010/crockford-on-javascript-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Amazon and Lala: What could have been</title>
		<link>http://www.derekville.net/2010/amazon-and-lala-what-could-have-been/</link>
		<comments>http://www.derekville.net/2010/amazon-and-lala-what-could-have-been/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 20:36:31 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Music]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[lala]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=656</guid>
		<description><![CDATA[It&#8217;s now been about 6 weeks since Apple bought Lala and I&#8217;ve spent some time reflecting on the acquisition. When I first heard the news, it sounded like a good fit. After-all, Lala is essentially a web-based version iTunes and &#8230; <a href="http://www.derekville.net/2010/amazon-and-lala-what-could-have-been/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div style="float:right;padding:20px;"><img src="http://www.derekville.net/wp-content/uploads/2010/01/lala.jpeg" alt="lala.jpeg" border="0" width="169" height="112" /></div>
<p>It&#8217;s now been about 6 weeks since <a href="http://www.techcrunch.com/2009/12/04/apple-acquires-lala/">Apple bought Lala</a> and I&#8217;ve spent some time reflecting on the acquisition.  When I first heard the news, it sounded like a good fit.  After-all, Lala is essentially a web-based version iTunes and has some great technology powering it.  It makes sense that Apple would  want to buy the next best thing and get some great engineers in the process.   However, I didn&#8217;t think at the time that Apple&#8217;s strategy would become so clear, so soon.  Apple&#8217;s acquisitions usually take years to come to fruition.  Not this time though. TechCrunch recently reported that Apple is planning on transforming iTunes into a cloud-based iTunes.com service, and Lala&#8217;s technology is the quickest way to do that. (&#8220;<a href="http://www.techcrunch.com/2010/01/19/apples-secret-cloud-strategy-and-why-lala-is-critical/">Apple’s Secret Cloud Strategy And Why Lala Is Critical</a>&#8220;).</p>
<p>Seeing the immediate impact Lala&#8217;s technology can have, I began to think about who else was in the bidding war for Lala?  Most reports say there were multiple companies interested, so you have to assume the a few of the typical parties were involved; Google, Amazon, Microsoft, Yahoo, AOL, Facebook, &#038; MySpace.  Only a couple of those companies stand out as a great fit, Amazon &#038; MySpace.  Right now MySpace has too many problems to deal with, so that leaves just one likely suitor&#8230; Amazon.</p>
<p>Amazon&#8217;s entry into the digital music download space has been game-changing.  Prior to <a href="http://www.amazon.com/mp3">Amazon.com/mp3</a>, music lovers had no where to go to purchase non-DRM&#8217;d MP3s.  We were stuck in the world of buying CDs to rip, buying DRM&#8217;d tracks from iTunes, or of course&#8230; pirating music.  When Amazon came into the market in 2008, their impact was immediately felt as prices began to drop and DRM began to die.  This opened the floodgates to other services who also began selling non-DRM&#8217;d MP3s, and music streaming became a sustainable business model.  Without Amazon&#8217;s entry, I suspect little would have changed over the past 2 years.  Having competition for Apple is vitally important to the evolution of the media industry.  Apple is an amazingly innovative company, but like most companies, they grow content &#038; less innovative without anyone breathing down their back.</p>
<p>As painless as Amazon has tried to make the downloading process when you purchase tracks from their MP3 store, it is still not as smooth and elegant as iTunes.   To add insult to injury, once the download is complete, Amazon&#8217;s user experience is then transfered over to iTunes (for most users) where the user must import the purchased files to begin listening.  Amazon clearly needs to do something about this.  Transferring a customer into your rival&#8217;s product at the end of the transaction process is a giant flaw in product design.  They need to provide their customers a way to stay in an Amazon environment throughout the Purchase->Download->Listen->Manage cycle.  This is where their acquisition of Lala would have been perfect. </p>
<p>Had Amazon bought Lala, they would have obtained the engineering team that is hands-down the best at building a web-based media manager.  After integrating Amazon MP3 with Lala, they could then integrate the Amazon Video &#038; Kindle management interfaces into the Lala-based manager.  Beyond music, video, and books, Amazon could then begin to expand into other areas, perhaps buy a company like Roku and make their streaming video experience end-to-end Amazon as well.  We could have had a real competitor to iTunes.  Sadly though, Amazon dropped the ball with Lala, especially since the acquisition only cost Apple $17 million.  That&#8217;s nothing for a company that just spent over a billion dollars to purchase Zappos.  </p>
<p>We&#8217;re clearly approaching a time where our music devices are going to have constant wireless broadband connections.  You won&#8217;t have to worry about locally storing music, it can all be hosted in the cloud and streamed to you on demand.  This isn&#8217;t a brand new concept, but the timing is right for it to finally become mainstream.  If Apple is successful in transforming iTunes into iTunes.com, unchallenged, they will likely be able to declare &#8220;game over&#8221; with music delivery in the US.</p>
<p>Hopefully Amazon sees the writing on the wall and steps up their game to provide a challenge.  Is Spotify our only hope?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2010/amazon-and-lala-what-could-have-been/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On: Programmable Twitter Clients</title>
		<link>http://www.derekville.net/2009/on-programmable-twitter-clients/</link>
		<comments>http://www.derekville.net/2009/on-programmable-twitter-clients/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 16:51:31 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Social Media]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[seesmic]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=600</guid>
		<description><![CDATA[Loic Lemuer (CEO of Seesmic) recently announced at Microsoft&#8217;s Developer Conference that he&#8217;ll be releasing a new version of Seesmic that supports plugins. This is huge for developers, as well as users. Up until now the Twitter developer ecosystem has &#8230; <a href="http://www.derekville.net/2009/on-programmable-twitter-clients/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Loic Lemuer (CEO of Seesmic) recently announced at Microsoft&#8217;s Developer Conference that he&#8217;ll be <a href="http://www.loiclemeur.com/english/2009/11/more-on-seesmics-vision-of-programmable-twitter-clients.html">releasing a new version of Seesmic</a> that supports plugins.  This is huge for developers, as well as users.  </p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Ql_PR6WtbGw&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/Ql_PR6WtbGw&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></embed></object></p>
<p>Up until now the Twitter developer ecosystem has been very closed.  Sure the Twitter APIs are as open as possible, but all the clients out there are largely closed platforms.  There are a few exceptions, including <a href="http://code.google.com/p/spaz/">Spaz</a> and <a href="http://github.com/drgath/tweenky/">Tweenky</a> (my client) which are open-source.  It is great to have a starting point (aside from raw libraries) that gives developers a place to start with when building a Twitter application.  With Seesmic Desktop invading Windows with a programmable version that you can write plugins for, this is a huge step that hopefully will push other developers/companies towards the same model.  </p>
<p>When I launched Tweenky about 18 months ago, I hadn&#8217;t event thought about making it programmable, but pretty quickly afterwards I realized the potential it could have if it were programmable, and so I began a rewrite, and coded it in 99% JavaScript with two plugins out of the box, Twitter and Identi.ca.  I had plans for other plugins (Facebook), but the problem with developing a platform, and not just an application, is that it takes a loooot of time.  For one guy working in his spare time, it just wasn&#8217;t going to be possible to abstract out a platform and develop a community around it.  So, I started with another rewrite and only focused support for Twitter.  I still think it was the right move given the limited amount of time I can spend developing it.</p>
<p>What I&#8217;m really waiting for is an easy way for Twitter developers to monetize their applications.  We&#8217;ve all seen what the Apple has accomplished with the App Store and the ecosystem they created overnight.  While most iPhone developers have made very little, others have won the lottery and struck it rich.  While Twitter (the company) has been very supportive of the developer community, they should really look at giving it a push and figuring out a way to monetarily reward Twitter developers.  Nothing gets developers going like a big, fat, diamond crusted carrot dangling in front of their noses.  Afterall, Twitter wouldn&#8217;t be Twitter if it weren&#8217;t for the developers.  The various clients are what made the service usable for the hard-core Twitter users that create most of the valuable content.</p>
<p>P.S. You can still view the programmable version at <a href="http://beta.tweenky.com">beta.tweenky.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2009/on-programmable-twitter-clients/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Last Day</title>
		<link>http://www.derekville.net/2009/last-day/</link>
		<comments>http://www.derekville.net/2009/last-day/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 21:09:34 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Career]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=594</guid>
		<description><![CDATA[It&#8217;s my last day at Catholic Content. It&#8217;s been a great 3 year ride and is certainly going out with a bang. When we started planning for NCYC 2009 (National Catholic Youth Conference) 18 months ago, I never would have &#8230; <a href="http://www.derekville.net/2009/last-day/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s my last day at Catholic Content.  It&#8217;s been a great 3 year ride and is certainly going out with a bang.  When we started planning for NCYC 2009 (National Catholic Youth Conference) 18 months ago, I never would have guessed it would be my last weekend.  But here I am, working behind the scenes with the production crew to stream the event out to thousands of people around the world.  The fun part? I&#8217;ve never done live event streaming before, so it&#8217;s been a hectic, but adventurous weekend.  In a way, it&#8217;s almost a culmination of the last three years.  Lots of stuff I&#8217;ve never done before, but having a blast learning.</p>
<p>Coming into this job as the lead developer for MyCatholicVoice.com, I had zero experience running a project the size of where we have taken this.  I had never built a web server this size from scratch (software-wise).  But along the way, I&#8217;ve had to tackle hundreds, or heck&#8230; likely thousands of problems along the way, and I&#8217;ve learned something at every step.  It&#8217;s been such an incredible learning experience as I&#8217;ve gained a bit of knowledge about so many different areas.  These new skills include everything from cloud computing, systems architecture, to Linux administration, all the way to the front-end with JavaScript libraries.  Then of course, that middle layer of PHP where my skills and knowledge have improved an unmeasurable amount.</p>
<p>When I started my career after graduation 5 years ago, I had a gameplan, a very iterative gameplan:</p>
<ul>
<li><strong>Step 1</strong>: Get a job, anything.</li>
<li><strong>Step 2</strong>: Find a web development job, maybe it would be something that I wasn&#8217;t thrilled about or didn&#8217;t pay well, but it was at least enough to get me in the door as a programmer. </li>
<li><strong>Step 3</strong>: Find a job that paid a decent amount, but didn&#8217;t have to be a project I was passionate about.  </li>
<li><strong>Step 4</strong>: Now that everything else is taken care of, find a project I was passionate about. </li>
</ul>
<p>Beyond those 4 steps, I wasn&#8217;t sure exactly what came next.  Perhaps it was starting my own company? Maybe moving out to the west coast?  Maybe it wasn&#8217;t even in web development?  In fact, mid-step 3, I considered changing careers because my job was just so unfulfilling.  I enjoy cooking, so maybe Culinary school? Then I remembered I don&#8217;t like anything outside 10 foods, so nevermind that.  I loved doing <a href="http://www.derekville.net/2005/06/06/high-school-animation-projects/">3D animations in high school</a>, but never pursued it because I can&#8217;t draw.  So&#8230; I stuck it out and realized it was just my job, not my career choice, that was unsatisfying.  Boom.  Reenergized.</p>
<p>Well, tomorrow is the transition between from Step 4 to Step 5. This year I realized the next step for me was going to be moving to LA, SF, or Seattle.  I needed to get to a tech hub where there were thousands of jobs, with companies large &#038; small.  But, there was also something from this last step that I was missing, that &#8220;passionate about the project&#8221; part.  While I&#8217;m incredibly proud of the platform we&#8217;ve built at MyCatholicVoice, I&#8217;ve never been able to have much of a connection with our users.  Why?  I&#8217;m a non-Catholic working on a Catholic project.  While I think the purpose of the project is a noble one and I agree with bringing &#8220;web 2.0&#8243; to the Catholic church, it ultimately doesn&#8217;t effect me faith-wise.  That&#8217;s a little bit of a bummer sometimes.  I want to be a user of the product, as well as a developer.  </p>
<p>Well, enter Yahoo. Talking about being a user of a product&#8230; Y! is one of the oldest services I still use from my first days on the internet in the mid-90s.  Check out my <a href="http://www.derekville.net/2009/11/13/onward-and-upward/">last post</a> for all the reasons I&#8217;m thrilled to have this opportunity.</p>
<p>So, what&#8217;s after what&#8217;s next? Hmmm&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2009/last-day/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Onward and Upward</title>
		<link>http://www.derekville.net/2009/onward-and-upward/</link>
		<comments>http://www.derekville.net/2009/onward-and-upward/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 02:47:09 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Career]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=585</guid>
		<description><![CDATA[When I attended Yahoo&#8217;s HackDay &#8217;08 at their Sunnyvale headquarters, I was so impressed with the people, the event, the technology, and the culture at Yahoo, that I made working for Yahoo one of my career goals. Well, it came &#8230; <a href="http://www.derekville.net/2009/onward-and-upward/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;"><img src="http://www.derekville.net/wp-content/uploads/2009/10/yahoo_purple_small.GIF" alt="yahoo_purple_small.GIF" border="0" width="438" height="83" /></div>
<p>When I attended Yahoo&#8217;s HackDay &#8217;08 at their Sunnyvale headquarters, I was so impressed with the people, the event, the technology, and the culture at Yahoo, that I made working for Yahoo one of my career goals.  Well, it came a little sooner than I expected, and I&#8217;m thrilled to say that starting Nov 23rd, 2009, I can scratch &#8220;A career with Yahoo&#8221; off my <a href="http://www.usatoday.com/news/religion/2008-01-14-bucket-list_N.htm">bucket list</a>.</p>
<h2>Why Yahoo?</h2>
<p>There are a number of reasons why Yahoo is so appealing to me at this point in my career.</p>
<p><strong>The Scale</strong>: As a developer, there is a lot of satisfaction in knowing that millions of people are happily using your products.  With billions of pageviews per day across the Yahoo network of sites, there are only a handful of companies that can offer similar challenges as Yahoo (Google, Facebook, Microsoft, and maybe a few others).  At Yahoo, I expect to learn what it takes to code and assemble massively scalable web applications.  Not many developers get a chance to work on products this large, and it is certainly an opportunity I find invaluable.</p>
<p><strong>The Collective</strong>: Yahoo employs roughly 15,000 people, and thousands of those are software engineers working on some of the largest products used on the web.  I&#8217;m confident that whatever problems I may run into on a daily basis, there is someone at Yahoo that has the knowledge to help me out.  I can name dozens of current and former Yahoo employees that have inspired me in one way or another during my career, and I&#8217;m sure I&#8217;ll meet dozens more.</p>
<p><strong>The Products</strong>: Yahoo certainly has its fair-share of best of breed products on the internet.  The jewels are of course the Yahoo portal, Yahoo Mail, and Flickr.  Beyond that, there are some other very successful products throughout the years, including; Yahoo Games, GeoCities, Messenger, Music, Movies, News, and Sports.  All of which I&#8217;ve used extensively at one point or another.  My first Yahoo account I created when I was 15, and I am now 28.  There&#8217;s certainly a sense of pride and satisfaction knowing that I&#8217;ve been a happy customer of my future employer for 13 years.</p>
<p><strong>The Culture</strong>: Yahoo puts an enormous amount of resources into their <a href="http://developer.yahoo.com/">Developer Network</a> and open-source technologies.  As an advocate of open-source software, it&#8217;s a thrill to know I&#8217;m working for a company that values it as much as I do.  It&#8217;s a shame that some of the neatest tools Yahoo has to offer are still unknown or unused by many developers (<a href="http://developer.yahoo.com/yql/">YQL</a>, <a href="http://pipes.yahoo.com">Pipes</a>, &#038; <a href="http://developer.yahoo.com/yui/">YUI</a>), and I will certainly do my best to evangelize the incredible tools Yahoo has offered to the community.</p>
<p><strong>The Location</strong>: Having lived in/near Kansas City my whole life, I love it here, but between October and March sometimes you wish you could take a vacation to Hell just so you can warm up a little bit. I&#8217;ve been to Southern California probably a dozen times throughout my life, and it doesn&#8217;t take more than a few minutes of the ocean breeze, the palm trees, and the sunshine before you don&#8217;t want to ever leave.</p>
<p>Since I signed the paperwork and this whole thing became a reality, it has certainly taken a while to sink in.  I still don&#8217;t think it has fully sunk in, and even after my going away party this weekend, boarding that flight to LA on the 22nd, it still may even take sitting down at my desk before I finally realize what just happened.  So needless to say, I&#8217;m thrilled with the opportunity Yahoo has presented, and during my time there I will do my best to ensure it is as rewarding for them as it is for me.</p>
<p>Finally, I wanted to thank Fred &#038; Mary Kay Fosnacht for sharing their dream with me over the last 3 years.  Working for Catholic Content has been an amazing experience and certainly has been life-changing.  I can safely say that my career wouldn&#8217;t have been the same without their confidence and encouragement and I will always be grateful for the opportunities they&#8217;ve given me.</p>
<p>Onward and upward.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2009/onward-and-upward/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP: A Better Random String Function</title>
		<link>http://www.derekville.net/2009/php-a-better-random-string-function/</link>
		<comments>http://www.derekville.net/2009/php-a-better-random-string-function/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 20:57:25 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=570</guid>
		<description><![CDATA[Often times you&#8217;ll come across the need to generate a random string. When you search for something like &#8220;PHP random string function&#8221; which will probably just be cut &#038; pasted into your code, you&#8217;ll typically find something like this function: &#8230; <a href="http://www.derekville.net/2009/php-a-better-random-string-function/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Often times you&#8217;ll come across the need to generate a random string.  When you search for something like &#8220;PHP random string function&#8221; which will probably just be cut &#038; pasted into your code, you&#8217;ll typically find something like this function:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> genRandomString<span style="color: #009900;">&#40;</span><span style="color: #000088;">$length</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$characters</span> <span style="color: #339933;">=</span> ‘0123456789abcdefghijklmnopqrstuvwxyz’<span style="color: #339933;">;</span>
    <span style="color: #000088;">$string</span> <span style="color: #339933;">=</span> ”<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$p</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$p</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$length</span><span style="color: #339933;">;</span> <span style="color: #000088;">$p</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$string</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$characters</span><span style="color: #009900;">&#91;</span><span style="color: #990000;">mt_rand</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$characters</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$string</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>While that&#8217;s great and all, don&#8217;t you just feel like there&#8217;s some better, simpler way to generate a random string?  Preferably something done all in one line, so you don&#8217;t even need a function inside your code?</p>
<p>There is a way.  Actually, there are lots of ways.  There are numerous functions in PHP that can be used to generate a string of random characters, and the one I typically use here is something you&#8217;ve probably used quite a bit&#8230; md5().  </p>
<p>If you aren&#8217;t familiar with it, <a href="http://en.wikipedia.org/wiki/MD5">MD5</a> is a commonly used hashing technique that can be used to generate a unique 32-character &#8220;fingerprint&#8221; of a string. While it has been shown to have some security holes and not be collision proof, that isn&#8217;t really a concern the majority of the time you need to generate a random string.  So, we&#8217;ll go ahead and use it here.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #990000;">MD5</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// PHP Warning:  md5() expects at least 1 parameter, 0 given</span></pre></div></div>

<p>So, we need to pass in something, anything, but try to be unique.  microtime() is a good choice.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #990000;">MD5</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 5959e4c551ee3a91d89449437b681ead</span></pre></div></div>

<p>Great, now we have a random 32 character string.  But what if you only want a slice of that, like 5 characters?  substr() is your answer.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">MD5</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 5959e</span></pre></div></div>

<p>If you are concerned about security and making this string as random as possible, just shuffle it with str_shuffle().</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">str_shuffle</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">MD5</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">microtime</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// 6c468</span></pre></div></div>

<p>Now wasn&#8217;t that easy?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2009/php-a-better-random-string-function/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google&#8217;s Vision of the Web in 2015</title>
		<link>http://www.derekville.net/2009/googles-vision-of-the-web-in-2015/</link>
		<comments>http://www.derekville.net/2009/googles-vision-of-the-web-in-2015/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 06:54:41 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Social Media]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=568</guid>
		<description><![CDATA[Marshall Kirkpatrick of ReadWriteWeb had an interesting post today recapping an interview with Google&#8217;s CEO Eric Schmidt at last week&#8217;s Gartner Symposium. In a short, 6 minute segment out of the full 45 minute interview (video below), Schmidt hinted at &#8230; <a href="http://www.derekville.net/2009/googles-vision-of-the-web-in-2015/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Marshall Kirkpatrick of ReadWriteWeb had an <a href="http://www.readwriteweb.com/archives/google_web_in_five_years.php">interesting post</a> today recapping an interview with Google&#8217;s CEO Eric Schmidt at last week&#8217;s Gartner Symposium.  In a short, 6 minute segment out of the full 45 minute interview (video below), Schmidt hinted at what the future of the internet will bring.</p>
<p>Via RWW: <a href="http://www.readwriteweb.com/archives/google_web_in_five_years.php">Google&#8217;s Eric Schmidt on What the Web Will Look Like in 5 Years</a></p>
<blockquote><ul>
<li>Five years from now the internet will be dominated by Chinese-language content.</li>
<li>Today&#8217;s teenagers are the model of how the web will work in five years &#8211; they jump from app to app to app seamlessly.</li>
<li>Five years is a factor of ten in <a href="http://en.wikipedia.org/wiki/Moore's_law">Moore&#8217;s Law</a>, meaning that computers will be capable of far more by that time than they are today.</li>
<li>Within five years there will be broadband well above 100MB in performance &#8211; and distribution distinctions between TV, radio and the web will go away.</li>
<li>&#8220;We&#8217;re starting to make significant money off of Youtube&#8221;, content will move towards more video.</li>
<li>&#8220;Real time information is just as valuable as all the other information, we want it included in our search results.&#8221;</li>
<li>There are many companies beyond Twitter and Facebook doing real time.</li>
<li>&#8220;We can index real-time info now &#8211; but how do we rank it?&#8221;</li>
<li>It&#8217;s because of this fundamental shift towards user-generated information that people will listen more to other people than to traditional sources.  Learning how to rank that &#8220;is the great challenge of the age.&#8221; Schmidt believes Google can solve that problem.</li>
</ul>
</blockquote>
<div align="center"><object width="425" height="344"><param name="movie" value="http://swf.tubechop.com/tubechop.swf?vurl=lHxub_yQfig&#038;start=1392&#038;end=1762&#038;cid=32815"></param><embed src="http://swf.tubechop.com/tubechop.swf?vurl=lHxub_yQfig&#038;start=1392&#038;end=1762&#038;cid=32815" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></div>
<p>It&#8217;s hard to argue with any of those, really.  The one I&#8217;m looking forward to most of all is the convergence of media platforms as the lines between TV, Radio, and Web become more and more blurry.  As those lines become blurred, more innovation will occur between the gaps and the old-time revenue models based mostly on distribution begin to fall apart.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2009/googles-vision-of-the-web-in-2015/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dynamic function names in JavaScript</title>
		<link>http://www.derekville.net/2009/dynamic-function-names-in-javascript/</link>
		<comments>http://www.derekville.net/2009/dynamic-function-names-in-javascript/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 01:48:13 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=553</guid>
		<description><![CDATA[If you are doing some more advanced JavaScript applications, you&#8217;ll likely run into the problem at one point or another when you need to dynamically generate the name of a function you wish to call. This is the equivalent of &#8230; <a href="http://www.derekville.net/2009/dynamic-function-names-in-javascript/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you are doing some more advanced JavaScript applications, you&#8217;ll likely run into the problem at one point or another when you need to dynamically generate the name of a function you wish to call. This is the equivalent of PHP&#8217;s <a href="http://php.net/manual/en/function.call-user-func.php" target="_blank">call_user_func()</a>.  </p>
<p>Here&#8217;s how you can do it.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// Define some vars</span>
<span style="color: #003366; font-weight: bold;">var</span> foo <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;hello&quot;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> bar <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;world&quot;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> function_name <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;say_&quot;</span> <span style="color: #339933;">+</span> foo <span style="color: #339933;">+</span> bar<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// Since its name is being dynamically generated, always ensure your function actually exists</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span><span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#91;</span>function_name<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> <span style="color: #3366CC;">&quot;function&quot;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	window<span style="color: #009900;">&#91;</span>function_name<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot; World!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000066; font-weight: bold;">else</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">throw</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Error.  Function &quot;</span> <span style="color: #339933;">+</span> function_name <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; does not exist.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> say_helloworld<span style="color: #009900;">&#40;</span>the_word<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Hello &quot;</span> <span style="color: #339933;">+</span> the_word<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">// Browser will alert &quot;Hello World!&quot;</span></pre></div></div>

<p>When you think about it, it makes a lot of sense considering all global objects in JavaScript are actually properties of the &#8220;window&#8221; object.  Take a look at this example to understand that concept a bit more.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> foo <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;apple&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> foobar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> foo <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;orange&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;foo&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// alerts &quot;apple&quot;</span>
	<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>foo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// alerts &quot;orange&quot;</span>
	<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;foobar&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// alerts the foobar function</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
foobar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Here&#8217;s another example of when using a string to call a function could come in handy.  This time we&#8217;re calling the property of an object we&#8217;ve created.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> Person<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">message</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Hello World!&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">say_hello</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>to<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">message</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> Derek <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Person<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
function_name <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;say_hello&quot;</span><span style="color: #339933;">;</span>
Derek<span style="color: #009900;">&#91;</span>function_name<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>See how it looks pretty much the same as the method above using a global function?  </p>
<p>Hope that shed some light on your problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2009/dynamic-function-names-in-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Opacity supports &#8220;Export to Canvas&#8221;</title>
		<link>http://www.derekville.net/2009/opacity-supports-export-to-canvas/</link>
		<comments>http://www.derekville.net/2009/opacity-supports-export-to-canvas/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 19:38:21 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=549</guid>
		<description><![CDATA[Looks like I may be able to soon replace Adobe Fireworks as my image editing tool of choice for the web. Ajaxian recently featured a new tool called Opacity, and if you follow through to their website, you&#8217;ll find a &#8230; <a href="http://www.derekville.net/2009/opacity-supports-export-to-canvas/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Looks like I may be able to soon replace Adobe Fireworks as my image editing tool of choice for the web. Ajaxian <a href="http://ajaxian.com/archives/opacity-fancy-a-design-tool-with-save-as-canvas">recently featured a new tool</a> called <a href="http://likethought.com/opacity/">Opacity</a>, and if you follow through to their website, you&#8217;ll find a great video tutorial that shows how you can create great looking icons and simple images.  </p>
<p>But, the best feature in my eyes could be their JavaScript export option that can be dumped inside HTML5&#8242;s <a href="http://en.wikipedia.org/wiki/Canvas_%28HTML_element%29">&lt;canvas&gt;</a> tag to render &#038; animate the image. I haven&#8217;t yet seen the source code this generates, but it seems logical that you could translate layer based vector art into JavaScript.  </p>
<div style="text-align:center;"><img src="http://www.derekville.net/wp-content/uploads/2009/09/opacity-export.jpg" alt="opacity-export.jpg" border="0" width="304" height="214" /></div>
<p>Another feature I also love is the integration with the various OSX FTP clients like CyberDuck and Transmit, as well as the dynamic web preview option.</p>
<p>With &lt;canvas&gt; being relatively new on the scene, a tool like this could really bridge the gap between designers &#038; developers and accelerate the adoption of another open standard that can help push the &#8220;open web&#8221; forward.  </p>
<p>You can read more about Opacity at <a href="http://www.webmonkey.com/blog/Turn_Your_Vector_Art_Into_Canvas-based_Animations_With_Opacity">WebMonkey&#8217;s review</a> or check out Opacity&#8217;s <a href="http://likethought.com/opacity/"> product page</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2009/opacity-supports-export-to-canvas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Daily Tip: Chrome for OSX</title>
		<link>http://www.derekville.net/2009/daily-tip-chrome-for-osx/</link>
		<comments>http://www.derekville.net/2009/daily-tip-chrome-for-osx/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 21:25:05 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=546</guid>
		<description><![CDATA[If you can&#8217;t wait to get your hands on Chrome for OSX, go download a Chromium nightly build, unzip, and copy to your Applications folder. At first glance, it doesn&#8217;t appear much different from Safari, which isn&#8217;t too surprising since &#8230; <a href="http://www.derekville.net/2009/daily-tip-chrome-for-osx/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;"><img src="http://www.derekville.net/wp-content/uploads/2009/09/chromium-icon.png" alt="chromium-icon.png" border="0" width="128" height="128" /></div>
<p>If you can&#8217;t wait to get your hands on Chrome for OSX, go download a <a href="http://build.chromium.org/buildbot/continuous/mac/LATEST/">Chromium nightly build</a>, unzip, and copy to your Applications folder.  </p>
<p>At first glance, it doesn&#8217;t appear much different from Safari, which isn&#8217;t too surprising since they&#8217;re both based off the the same layout engine (<a href="http://en.wikipedia.org/wiki/WebKit">WebKit</a>).  The real differences are just going to come in the skin (which is pretty similar) and the JavaScript engine (Chromium = V8, Safari = Nitro, formerly &#8220;Squirrelfish&#8221;).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2009/daily-tip-chrome-for-osx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Reason RSS Cloud Can Work Now</title>
		<link>http://www.derekville.net/2009/the-reason-rss-cloud-will-catch-on/</link>
		<comments>http://www.derekville.net/2009/the-reason-rss-cloud-will-catch-on/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 04:23:23 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[pubsubhubbub]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[rsscloud]]></category>
		<category><![CDATA[syndication]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=515</guid>
		<description><![CDATA[Rogers Cadenhead recently wrote a post &#8220;The Reason RSS Cloud Failed to Catch On&#8220;. In this he argues that RSS Cloud is not sustainable when it begins to scale to thousands of users needing to receive pings every time a &#8230; <a href="http://www.derekville.net/2009/the-reason-rss-cloud-will-catch-on/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div style="text-align:center;"><img src="http://www.derekville.net/wp-content/uploads/2009/09/cloud.jpg" alt="cloud.jpg" border="0" width="506" height="275" /></div>
<p>Rogers Cadenhead recently wrote a post &#8220;<a href="http://workbench.cadenhead.org/news/3555/theres-reason-rsscloud-failed-catch/0">The Reason RSS Cloud Failed to Catch On</a>&#8220;.  In this he argues that RSS Cloud is not sustainable when it begins to scale to thousands of users needing to receive pings every time a post is made.  While he has a point, I believe his argument is much more accurate when put into the context of 1999 as opposed to 2009, and it is even more irrelevant a few years from now.  This points to one thing&#8230; <strong>RSS Cloud was ahead of its time</strong>.</p>
<p>Today, supporting RSS Cloud is cheap.  Bandwidth is a fraction of a percent now compared to what is was 10 years ago along with cloud based virtual servers available for ~$10 / month.  I&#8217;d suspect a properly tweaked VPS at the Rackspace Cloud or EC2 could handle millions of pings / day without issue.  Unlike PubSubHubBub, the content of the post is not delivered with RSS Cloud, it is just a body-less ping, so bandwidth isn&#8217;t even an issue.  A server supporting these types of capabilities back in 1999 would have cost thousands of dollars per month.  Now?  Just a few bucks.  5 years from now I suspect it will be free (example: Google App Engine is currently free and could be configured for this service).</p>
<p>Let&#8217;s go ahead and take into consideration the dream scenario with RSS Cloud, and that is that we have completely replaced Twitter.  In this scenario Ashton Kutcher will have 5 million followers and will need to notify each of those followers when he tweets out 100 mundane posts / day.  Let&#8217;s not kid ourselves and <strong>not</strong> think there is a middle man in there somewhere.  These services are the &#8220;Cloud&#8221; portion of whole term.  Just like Feedburner and Google Reader are proxies between publisher and reader now (by storing local caches of RSS feeds), there will be many services that would be happy to host the feeds, providing a web client to the reader and analytics to the publisher in turn receiving all the statistics they chew on.  Proof?  Twitter purchased Summize (search.twitter.com) and Google bought FeedBurner because they saw the value of this type of service.  Afterall, the analytics portion of that is the whole business model that Twitter is rumored to be building.</p>
<p>But ok&#8230; let&#8217;s assume those &#8220;Cloud&#8221; services never pop up because, hell&#8230; I don&#8217;t see any reason why they wouldn&#8217;t, but let&#8217;s just imagine they don&#8217;t exist.  Solution? TURN OFF THE NOTIFICATIONS!  That&#8217;s the beauty of RSS Cloud feeds, it&#8217;s completely backwards compatible with non-Cloud enabled feeds.  If the Cloud server fails to send out notifications, then their subscribers will simply revert back to the old method of routine polls looking for new content.  But, failing to notify your subscribers of new content in a sea of real-time has drastic consequences.  Even if you are the first to report information, you will always be &#8220;scooped&#8221; by others because the lag caused by your inability to notify your subscribers.  That alone will be enough to even the playing field.  As a compromise, you could get away with just notifying a few dozen RSS aggregators (Google, Yahoo, Feedburner) to take care of the majority of your subscribers, and those using readers you don&#8217;t notify will revert to polls.</p>
<p>So as you can see, RSS Cloud is currently gaining traction because it wasn&#8217;t until now that it was a viable service for the masses.  Even now there is very little support within the client portion of RSS Cloud, but I suspect that will be a battleground many will fight for in the next couple years.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2009/the-reason-rss-cloud-will-catch-on/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Cloud Enabled</title>
		<link>http://www.derekville.net/2009/cloud-enabled/</link>
		<comments>http://www.derekville.net/2009/cloud-enabled/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 03:23:30 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[rsscloud]]></category>
		<category><![CDATA[syndication]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=503</guid>
		<description><![CDATA[Today WordPress.com announced RSS Cloud support for all their hosted blogs. Not to be left out of the party, I also installed the RSS Cloud plugin on this blog. RSS Cloud is an ancient RSS element (in web 2.0 years) &#8230; <a href="http://www.derekville.net/2009/cloud-enabled/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Today WordPress.com <a href="http://en.blog.wordpress.com/2009/09/07/rss-in-the-clouds/">announced RSS Cloud support</a> for all their hosted blogs.  Not to be left out of the party, I also installed the <a href="http://wordpress.org/extend/plugins/rsscloud/">RSS Cloud plugin</a> on this blog.</p>
<p><a href="http://rsscloud.org/">RSS Cloud</a> is an ancient RSS element (in web 2.0 years) that has been given new life recently as the &#8220;realtime web&#8221; in exploding (thanks to Twitter and Facebook).  Basically, it allows RSS readers the ability to be notified when a feed has been updated instead of waiting minutes, hours, or days before that client has a chance to check the feed.  Now, an RSS Cloud supported reader that is subscribed to an RSS Cloud enabled feed can be notified within seconds that the feed has been updated.  RSS now has a realtime element.</p>
<p>RSS Cloud support is still in it&#8217;s infancy with only 1 RSS reader supporting RSS Cloud notifications (<a href="http://newsriver.org/river2">River2</a>), but within the coming year, it could become a game-changing technology that can give rise to self hosted Twitter-like publishing platforms.  There&#8217;s a number of people (myself included) that are working on such platforms, and hopefully I&#8217;ll be able to make an announcement in the coming weeks.  My feeling is, as great as WordPress is for blogging, it&#8217;s not the ideal platform for micro-blogging.  What the community needs is a microblog version of WordPress that has a real-time element, and I think this RSS Cloud element fits the bill.</p>
<h3>Related Articles</h3>
<ul>
<li>WordPress: <a href="http://en.blog.wordpress.com/2009/09/07/rss-in-the-clouds/">RSS in the Clouds</a></li>
<li>TechCrunch: <a href="http://www.techcrunch.com/2009/09/07/wordpress-enables-rsscloud-in-post-feeds/">WordPress.com Enables RSSCloud In Post Feeds</a></li>
<li>ReadWriteWeb: <a href="http://www.readwriteweb.com/archives/wordpress_just_made_millions_of_blogs_real-time_wi.php">WordPress Just Made Millions of Blogs Real-Time With RSSCloud</a></li>
<li>Scripting.com: <a href="http://www.scripting.com/stories/2009/09/07/teaseTeaseTease.html">Tease! Tease! Tease!</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2009/cloud-enabled/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Auto-versioning JavaScript &amp; CSS files</title>
		<link>http://www.derekville.net/2009/auto-versioning-javascript-and-css-files/</link>
		<comments>http://www.derekville.net/2009/auto-versioning-javascript-and-css-files/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 16:45:26 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[versioning]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=438</guid>
		<description><![CDATA[As JavaScript becomes a more integral part to the core functionality of websites, ensuring that a user has a fresh copy of the latest code is as important as ever. Normally a browser will cache certain filetypes (CSS, JS, JPG, &#8230; <a href="http://www.derekville.net/2009/auto-versioning-javascript-and-css-files/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As JavaScript becomes a more integral part to the core functionality of websites, ensuring that a user has a fresh copy of the latest code is as important as ever.  Normally a browser will cache certain filetypes (CSS, JS, JPG, etc&#8230;) for an indefinite period of time.  If the code within one of these cached files is updated, sometimes a browser will not know to reload that file.  So, if those changes are important for the functionality of your website, your users may run into issues and not be able to use your site properly.  Worse, they likely won&#8217;t have any idea what the issue is and will eventually give up and go elsewhere. But have no fear, there&#8217;s a solution to this problem&#8230; versioning your static files.</p>
<p>By &#8220;versioning&#8221; these files, I&#8217;m referring to changing their filenames from &#8220;my_styles.css&#8221; to &#8220;my_styles.version274.css&#8221; for example.  The problem with that example is it relies on you renaming the file and updating your includes <strong>every time</strong> you make a change.  That sounds like an nightmare, right?  Luckily there&#8217;s a neat tactic you can you to make it appear to the browser to be a new file, but it will actually be the same file and will require no effort on your part.  This variation of the versioning tactic is often referred to as &#8220;Auto-versioning&#8221;.  Here&#8217;s an example&#8230;</p>
<p>First, we use the following rewrite rule in .htaccess:</p>

<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;">RewriteEngine on
RewriteCond %<span style="">&#123;</span>REQUEST_FILENAME<span style="">&#125;</span> !-s # Make the file doesn't actually exist
RewriteRule ^<span style="">&#40;</span>.*<span style="">&#41;</span>\.<span style="color: #000066; font-weight:bold;"><span style="">&#91;</span>\d<span style="">&#93;</span>+\.<span style="">&#40;</span>css|js<span style="">&#41;</span>$ $1.$<span style="">2</span> <span style="">&#91;</span>L<span style="">&#93;</span></span> # Strip out the version number</pre></div></div>

<p>Now, we write the following PHP fuction:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009933; font-style: italic;">/**
 *  Given a file, i.e. /css/base.css, replaces it with a string containing the
 *  file's mtime, i.e. /css/base.1221534296.css.
 *  
 *  @param $file  The file to be loaded.  Must be an absolute path (i.e.
 *                starting with slash).
 */</span>
<span style="color: #000000; font-weight: bold;">function</span> auto_version<span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'/'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!==</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> <span style="color: #339933;">!</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'DOCUMENT_ROOT'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$file</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000088;">$mtime</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filemtime</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'DOCUMENT_ROOT'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'{\\.([^./]+)$}'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;.<span style="color: #006699; font-weight: bold;">$mtime</span>.<span style="color: #000099; font-weight: bold;">\$</span>1&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Now, wherever you include your CSS, change it from this:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;link rel=&quot;stylesheet&quot; href=&quot;/css/base.css&quot; type=&quot;text/css&quot; /&gt;</pre></div></div>

<p>To this:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;link rel=&quot;stylesheet&quot; href=&quot;&lt;?=auto_version('/css/base.css')?&gt;&quot; type=&quot;text/css&quot; /&gt;</pre></div></div>

<p>And when rendered, will appear as:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;link rel=&quot;stylesheet&quot; href=&quot;/css/base.1251992914.css&quot; type=&quot;text/css&quot; /&gt;</pre></div></div>

<p>How does this work?  Because that mod_rewrite rule above will strip out the timestamp, your server will deliver /css/base.css as the requested file.  But to the user&#8217;s browser, it will appear as a different file whenever it is updated.</p>
<p>Neat!</p>
<p></p>
<hr />
</p>
<p><strong>Note</strong>: Some strategies to fix this caching issue is to append a version # onto the end of the css or JavaScript file with a querystring, such as:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;link rel=&quot;stylesheet&quot; href=&quot;/css/base.css?version=1234&quot; type=&quot;text/css&quot; /&gt;</pre></div></div>

<p>This method will actually prevent the file from being cached, period!  This is bad.  You want the benefits of caching.  You don&#8217;t want to make your users pull down 100k of JavaScript &#038; CSS files on every page load.  More importantly, your servers could start to strain under the additional load.</p>
<p>Why is it not cached?  See <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html">Section 13 from the HTTP Specification</a>, in particular Section 13.9</p>
<blockquote><p>
<strong>13.9 Side Effects of GET and HEAD</strong></p>
<p>Unless the origin server explicitly prohibits the caching of their responses, the application of GET and HEAD methods to any resources SHOULD NOT have side effects that would lead to erroneous behavior if these responses are taken from a cache. They MAY still have side effects, but a cache is not required to consider such side effects in its caching decisions. Caches are always expected to observe an origin server&#8217;s explicit restrictions on caching.</p>
<p>We note one exception to this rule: since some applications have traditionally used GETs and HEADs with query URLs (those containing a &#8220;?&#8221; in the rel_path part) to perform operations with significant side effects, caches MUST NOT treat responses to such URIs as fresh unless the server provides an explicit expiration time. This specifically means that responses from HTTP/1.0 servers for such URIs SHOULD NOT be taken from a cache. See section 9.1.1 for related information.
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2009/auto-versioning-javascript-and-css-files/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Crowdsourcing Music Videos</title>
		<link>http://www.derekville.net/2009/crowdsourcing-music-videos/</link>
		<comments>http://www.derekville.net/2009/crowdsourcing-music-videos/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 22:18:35 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Music]]></category>
		<category><![CDATA[Social Media]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=477</guid>
		<description><![CDATA[I just came across one of the coolest music videos I&#8217;ve ever seen, and the beauty of it? It was made by a fan, just for the fun of it. Incredible. Link: Two Weeks &#8211; Grizzly Bear from Gabe Askew. &#8230; <a href="http://www.derekville.net/2009/crowdsourcing-music-videos/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I just came across one of the coolest music videos I&#8217;ve ever seen, and the beauty of it? It was made by a fan, just for the fun of it.  Incredible.</p>
<p>Link: <a href="http://vimeo.com/5904993">Two Weeks &#8211; Grizzly Bear</a> from <a href="http://vimeo.com/user1904617">Gabe Askew</a>.</p>
<div align="center"><object width="400" height="220"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5904993&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5904993&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="220"></embed></object></div>
<p>One of the first things I thought about while watching Gabe&#8217;s video was whether this would be yet another take-down viral video because of copyright infringement?  But, a group like Grizzly Bear (or their record label) would be crazy to complain about the soundtrack because of the attention it generates for the song.</p>
<p>You could either be a band that removes the soundtrack from someone&#8217;s artistic work, infuriating them and accomplishing nothing.  Or, you could capitalize off it, much like Chris Brown&#8217;s (or his record label&#8217;s) decision to <strong>not</strong> remove the soundtrack from the &#8220;JK Wedding Dance&#8221; video that ended up boosting him to #4 on the iTunes charts and <a href="http://www.eonline.com/uberblog/b137057_could_viral_wedding_dance_video_save.html">possibly saved his career</a>.</p>
<div align="center"><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/4-94JhLEiN0&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/4-94JhLEiN0&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></div>
<p>Another recent example is the use of Barcelona&#8217;s &#8220;Please Don&#8217;t Go&#8221; song in a tranquil aquarium video that has been 1.8 million views at the times of this posting.  The band was so pleased that they posted a <a href="http://www.youtube.com/watch?v=Xqlpa3EWsok&#038;feature=response_watch">video response</a> to introduce themselves to their new fans and credited the video towards increased albums sales and concert attendance.  Instead of saving a career (as in Brown&#8217;s case), this very well could make a career for these guys, and all because they lucked out and had a passionate, artistic fan that wanted to showcase both their works, together.</p>
<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/u7deClndzQw&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/u7deClndzQw&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p>Gabe&#8217;s video is yet another great example of how music artists (and any celebrities) for that matter can use their fans to crowdsource ideas and content.  Instead of spending thousands or millions to produce a video, you can get really high quality content for next to nothing, all because your fans are passionate about your work and want to be more involved.  So get them involved, they want to be, and they&#8217;ll reward you for the opportunity.</p>
<p>As a final example, here&#8217;s a video from Tilly &#038; The Wall which was completely crowdsourced by their fans.  All they did was ask users to send in clips of them singing their song &#8220;Rainbows in the Dark&#8221; and spliced them all together, making an awesome, fun, and cheap video.  Imagine a progressive band like Nine Inch Nails or Radiohead saying they weren&#8217;t going going to make a video for their latest single and instead were holding a contest for a fan to make an &#8220;official video&#8221; for that song and awarding $20k?  Contests like that can become a breeding crowd for viral videos, something all musicians are dying for nowdays.</p>
<div align="center"><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/8LUCC4HSb-c&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/8LUCC4HSb-c&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true"  width="425" height="344"></embed></object></div>
<p>
Related reading:</p>
<ul>
<li><a href="http://torrentfreak.com/pirated-youtube-clip-boosts-bands-album-sales-090727/">‘Pirated’ Youtube Clip Boosts Band’s Album Sales</li>
<li><a href="http://www.eonline.com/uberblog/b137057_could_viral_wedding_dance_video_save.html">Could Viral Wedding Dance Video Save Chris Brown&#8217;s Career?</li>
<li><a href="http://vray.info/interviews/gabeaskew/">Interview with Gabe Askew</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2009/crowdsourcing-music-videos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5 of the Worst Songs, Ever</title>
		<link>http://www.derekville.net/2009/5-of-the-worst-songs-ever/</link>
		<comments>http://www.derekville.net/2009/5-of-the-worst-songs-ever/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 06:27:13 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=367</guid>
		<description><![CDATA[So a co-worker of mine introduced me to Shakira&#8217;s &#8220;She Wolf&#8221; song today, and wow is it horrid. It got me thinking&#8230; What other awful songs are out there polluting the pop charts? Well, here&#8217;s 5 that are probably somewhere &#8230; <a href="http://www.derekville.net/2009/5-of-the-worst-songs-ever/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>So a co-worker of mine introduced me to Shakira&#8217;s &#8220;She Wolf&#8221; song today, and wow is it horrid.  It got me thinking&#8230; What other awful songs are out there polluting the pop charts?  Well, here&#8217;s 5 that are probably somewhere in my top 50.  Maybe someday I&#8217;ll post the other 45.</p>
<h2>#1 Shakira &#8211; She Wolf (2009)</h2>
<p>I can&#8217;t help but crack up everytime the chorus kicks in, it&#8217;s just horrible.  And the &#8220;Ah-ooooo&#8221; 1:35 into the song? What hack producer though that was a good touch?</p>
<p><a href="http://www.youtube.com/watch?v=4aEW_Z5Va5s" target="_blank"><img src="http://s89997654.onlinehome.us/screencaps/ab5c194470c7dfb0c35f50e033a7a0d8.png" width="500"></a><br />
</p>
<hr />
<h2>#2 Black Eyed Peas &#8211; I Gotta Feelin&#8217; (2009)</h2>
<p>This song is such a crock of shit.  Not that I expected amazingly creative lyrics from the Black Eyed Peas, but c&#8217;mon, this song isn&#8217;t even trying.  Here&#8217;s a great review from Cracked.com, <a href="http://www.cracked.com/video_17618_black-eyed-peas-have-officially-written-worst-song-ever.html">Black Eyed Peas Have Officially Written The Worst Song Ever</a></p>
<div><object type="application/x-shockwave-flash" data="http://cdn-i.dmdentertainment.com/DMVideoPlayer/player.swf" id="player" height="311" width="500" ><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="movie" value="http://cdn-i.dmdentertainment.com/DMVideoPlayer/player.swf" /><param name="wmode" value="transparent" /><param name="flashVars" value="demand_preroll_source=http%3A//cdn-www.cracked.com/sites/cracked2/images/videoplayer/Pre-Roll1b.swf&#038;skin=http%3A//cdn-i.dmdentertainment.com/DMVideoPlayer/playerskin.swf&#038;DESC=%3Cstrong%3EVisit%20%3Ca%20href%3D%22http%3A//www.kafkamaine.com%22%3EGladstone%27s%20site%3C/a%3E.%20Or%20follow%20him%20on%20%3Ca%20href%3D%22http%3A//twitter.com/WGladstone%22%3ETwitter%20%3C/a%3Eand%20stalk%20him%20on%20%3Ca%20href%3D%22http%3A//www.facebook.com/people/Wayne-Gladstone/628252421%23/profile.php%3Fid%3D628252421%26ref%3Dprofile%22%3EFacebook%3C/a%3E.%20%3C/strong%3E&#038;video_title=Black%20Eyed%20Peas%20Have%20Officially%20Written%20The%20Worst%20Song%20Ever&#038;demand_content_sourcekey=cracked.com&#038;demand_preroll=true&#038;demand_report_url=http%3A//www.cracked.com/update.aspx&#038;adPartner=Adap&#038;COMPANION_DIV_ID=adaptv_ad_companion_div&#038;KEYWORDS=the%20black%20eyed%20peas&#038;KEY=DemandMediacracked&#038;v=2.2.0&#038;demand_iconlink=http%3A//www.cracked.com/&#038;sitename=Cracked.com&#038;demand_page_url=http%3A//www.cracked.com/video_17618_black-eyed-peas-have-officially-written-worst-song-ever.html&#038;demand_related_feed=http%3A//www.cracked.com/relatedvideo_17618_black-eyed-peas-have-officially-written-worst-song-ever.xml&#038;CATEGORIES=Entertainment%2CNews%2CLifestyle&#038;demand_icontext=Watch%20more%20videos%20at%20Cracked.com%2C%20America%27s%20only%20humor%20site.&#038;demand_content_id=17618&#038;demand_related=1&#038;demand_autoplay=0&#038;URL=http%3A//cdn-i.dmdentertainment.com/funpages/cms_content/17618/video_17618_608x342.flv&#038;height=37&#038;ID=17618&#038;TITLE=Black%20Eyed%20Peas%20Have%20Officially%20Written%20The%20Worst%20Song%20Ever&#038;demand_show_replay=true&#038;demand_iconurl=http%3A//cdn-www.cracked.com/sites/cracked2/images/favicon.gif&#038;source=http%3A//cdn-i.dmdentertainment.com/funpages/cms_content/17618/video_17618_608x342.flv" /></object></div>
<p></p>
<hr />
<h2>#3 Rednex &#8211; Cotton Eye Joe (1995)</h2>
<p>Whoever the hell though mixing techno and country would be a good idea needs to be shot.  Oh, and don&#8217;t forget about the group&#8217;s chartbusting 2002 follow-up, <a href="http://www.youtube.com/watch?v=XDdlHmzIdn8">Cotton Eye Joe 2002</a></p>
<div align="Center">
<object width="500" height="404"><param name="movie" value="http://www.youtube.com/v/RRy5uLItG_w&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/RRy5uLItG_w&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></div>
<p></p>
<hr />
<h2>#4 Toby Keith &#8211; The Angry American (2002)</h2>
<p>On the topic of rednecks&#8230; </p>
<p>Outraged by the 9/11 terrorist attacks, Toby Keith enlisted in the Air Force — no, sorry, he wrote a fight anthem so vengeful, it makes “The Star-Spangled Banner” sound like “Give Peace a Chance.” Though right-wing radio hosts and politicians called him a hero, Keith (who hadn’t had a hit in years) moaned, “It sucks ass that I have to defend myself for being patriotic.” Wrong. You have to defend yourself for celebrating violence and bloodlust.</p>
<p><a href="http://www.youtube.com/watch?v=cSWuA-RttGU"><img src="http://s89997654.onlinehome.us/screencaps/58b087508e943e2a735fdc669106d723.png" width="500"></a></p>
<hr />
<h2>#5 &#8211; Billy Ray Cyrus &#8211; Achy Breaky Heart (1991)</h2>
<p>As if line-dancing really needed a comeback.  This is a song that gets stuck in your head, and won&#8217;t leave for at least a couple days.  So go ahead, click the image, I dare you.</p>
<p><a href="http://www.youtube.com/watch?v=3EebObs-vC0" target="_blank"><img src="http://s89997654.onlinehome.us/screencaps/8152789ac8ec2e14eee0a98653dcebf6.png" width="500"></a></p>
<hr />
<div align="center">
<h3>What are some songs you&#8217;d add to the list?  <a href="#respond">Add a comment</a>.</h3>
</div>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2009/5-of-the-worst-songs-ever/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tech Support</title>
		<link>http://www.derekville.net/2009/tech-support/</link>
		<comments>http://www.derekville.net/2009/tech-support/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 23:29:15 +0000</pubDate>
		<dc:creator>Derek</dc:creator>
				<category><![CDATA[Humor]]></category>

		<guid isPermaLink="false">http://www.derekville.net/?p=356</guid>
		<description><![CDATA[This has been blowing up on Twitter today, so figured it was worthy of a blog post. =D]]></description>
			<content:encoded><![CDATA[<p>This has been blowing up on Twitter today, so figured it was worthy of a blog post. =D</p>
<p><a href="http://imgs.xkcd.com/comics/tech_support_cheat_sheet.png"><img src="http://imgs.xkcd.com/comics/tech_support_cheat_sheet.png" alt="Tech Support" width="420" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.derekville.net/2009/tech-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
