<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>The Drunken Epic - The Drunken Ramblings Of A Code Monkey</title>
    <link>http://www.thedrunkenepic.com/home</link>
    <description>Latest 10 Articles</description>
    <language>en-us</language>
    <generator>Symphony 1.5</generator>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/thedrunkenepicarticles" type="application/rss+xml" /><item>
      <title>All work and no play makes Wil a dull boy.</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/1cdm_iOQTKA/</link>
      <pubDate>Mon, 06 Apr 2009 06:01:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/all-work-and-no-play-makes-wil-a-dull-boy/</guid>
      <description>&lt;p&gt;All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy.&lt;/p&gt;&lt;p&gt;All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy. All work and no play makes Wil a dull boy.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/1cdm_iOQTKA" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/all-work-and-no-play-makes-wil-a-dull-boy/</feedburner:origLink></item>
    <item>
      <title>MySQL: Sorting records by order they were requested ...</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/CJn3B7RNDzg/</link>
      <pubDate>Mon, 06 Apr 2009 00:19:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/mysql-sorting-records-by-order-they-were-requeste/</guid>
      <description>&lt;p&gt;Ok, probably not the best title for this article, but it's Monday, so you'll just have to make due. Hopefully, it will make sense by the end of this entry and you will have walked away with a neat trick to hide up your sleeve.&lt;/p&gt;

&lt;p&gt;When working with &lt;strong&gt;insert language here&lt;/strong&gt; and MySQL, have you ever had a collected list of record ids that needed the rest of their corresponding record data? Probably. If you've been doing &lt;strong&gt;insert language here&lt;/strong&gt; and MySQL development for more than a few months, it's likely you've done something like the following:&lt;/p&gt;&lt;h5&gt;PHP:&lt;/h5&gt;

&lt;pre&gt;&lt;code&gt;$ids = array(33, 22, 545, 234, 6, 343, 99);

$result = $this-&amp;gt;db-&amp;gt;query
("
    SELECT
        `id`,
        `name`,
        `email`,
        `password`
    FROM `members`
    WHERE `id` IN (" . implode(',', $ids) . ")
    ORDER BY `id` DESC
");
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In this example, the above should return the corresponding data assigned to each id provided, if the record exists, that is. The results are sorted by id in descending order.&lt;/p&gt;

&lt;p&gt;Well, that's great, but what if you want the database to return the data in the exact order you requested it? Not possible by any normal means outside of using &lt;strong&gt;insert language here&lt;/strong&gt; to manually sort the returned data for you.&lt;/p&gt;

&lt;p&gt;Lucky for us, the big swiging dicks over at MySQL have added an indispensable tool to the massive list of the database server's intrinsic functions. Let me introduce to you a little secret; the FIELD() function. Using the FIELD() function in place of the column name within the ORDER BY clause, you can force MySQL to return the data in the order you requested.&lt;/p&gt;

&lt;p&gt;Using a modified version of the example above:&lt;/p&gt;

&lt;h5&gt;PHP:&lt;/h5&gt;

&lt;pre&gt;&lt;code&gt;$ids = array(33, 22, 545, 234, 6, 343, 99);

$result = $this-&amp;gt;db-&amp;gt;query
("
    SELECT
        `id`,
        `name`,
        `email`,
        `password`
    FROM `members`
    WHERE `id` IN (" . implode(',', $ids) . ")
    ORDER BY FIELD(id, " . implode(',', $ids) . ")
");
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Et viola! All the requested records are returned in the same order as the ids within the &lt;code&gt;$ids&lt;/code&gt; array. How neat is that? I wish I knew about this a few years ago.&lt;/p&gt;

&lt;p&gt;Well, that's it for this article. Enjoy.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/CJn3B7RNDzg" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/mysql-sorting-records-by-order-they-were-requeste/</feedburner:origLink></item>
    <item>
      <title>DomQuery Alpha Released!</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/wbcHxU2r05o/</link>
      <pubDate>Sat, 14 Mar 2009 04:27:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/domquery-alpha-released/</guid>
      <description>&lt;p&gt;Well, I did some cleaning up of the code and appropriately commented everything. I'll be adding this to a Google Code repository very soon and get a wiki going. The documentation is pretty poor, but there are inline comments to help you for the interim; this project is only a few days old, mind you.&lt;/p&gt;&lt;p&gt;I added another method I mentioned in the previous DomQuery article. There was an issue with implementing a jQuery-like 'each()' method. I wanted users to be able to pass a runtime-generated callback function as an argument to be applied to all members of an xpath result. I found the solution to this problem by using PHP's 'create_function' function.&lt;/p&gt;

&lt;p&gt;So, you can now do stuff like the following.&lt;/p&gt;

&lt;h5&gt;The Xml:&lt;/h5&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;root&amp;gt;
    &amp;lt;item&amp;gt;Item One&amp;lt;/item&amp;gt;
    &amp;lt;item&amp;gt;Item Two&amp;lt;/item&amp;gt;
    &amp;lt;items&amp;gt;
        &amp;lt;subitem&amp;gt;Sub-Item One&amp;lt;/subitem&amp;gt;
        &amp;lt;subitem&amp;gt;Sub-Item Two&amp;lt;/subitem&amp;gt;
        &amp;lt;subitem&amp;gt;Sub-Item Three&amp;lt;/subitem&amp;gt;
    &amp;lt;/items&amp;gt;
    &amp;lt;item&amp;gt;Item Four&amp;lt;/item&amp;gt;
    &amp;lt;item&amp;gt;Item Five&amp;lt;/item&amp;gt;
&amp;lt;/root&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h5&gt;The Code:&lt;/h5&gt;

&lt;pre&gt;&lt;code&gt;$Xml = new DomQuery;

$lambda = 'echo $context['element']-&amp;gt;nodeValue;'
        . 'echo ' ' . $param1 . $param2 . '&amp;lt;br/&amp;gt;';';

$Xml-&amp;gt;load($xml)
    -&amp;gt;path('//item/*')
    -&amp;gt;each($lambda, 'foo', 'bar');

header('Content-Type: text/xml');

die($Xml-&amp;gt;saveXml());
&lt;/code&gt;&lt;/pre&gt;

&lt;h5&gt;The Result:&lt;/h5&gt;

&lt;pre&gt;&lt;code&gt;Item One foo bar
Item Two foo bar
Item Four foo bar
Item Five foo bar
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The 'walk' method is still quite useful as you can apply a previously defined function or class method to each member of an xpath result. This allows you to create plugins on-the-fly that allow you to manipulate your DOM in anyway you please!&lt;/p&gt;

&lt;p&gt;Again, I'm always open to suggestions and critisms. This is a work-in-progress, so please keep that in mind! I'll be adding massive amounts of documentation and examples as I have time.&lt;/p&gt;

&lt;p&gt;Download: &lt;a href="http://www.thedrunkenepic.com/goodies/domquery/domquery.zip"&gt;Latest Version&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/wbcHxU2r05o" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/domquery-alpha-released/</feedburner:origLink></item>
    <item>
      <title>Introducing DomQuery!!!</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/u4t-IL6qEX8/</link>
      <pubDate>Fri, 13 Mar 2009 06:15:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/introducing-domquery/</guid>
      <description>&lt;p&gt;I'v been doing a great deal of work on the latest version of my XML/XSL-based framework, Sauc'd, and came to the conclusion that the DOMDocument class, and others related to the PHP library, while VERY useful, are fucking terrible to work with. By themselves, it takes a serious amount of code to iterate across an xml document just to find a node, or group of nodes, that you're looking for. And when you finally find what you need, you have to implement migraine-inducing logic just to manipulate the resulting nodes.&lt;/p&gt;

&lt;p&gt;There's gotta be an easier way and, guess what, THERE IS! It's called XPath. XPath allows you to traverse over a DOM with ease and select only the data you want with a simple querying language. Think of XPath as the CSS selectors you use with popular javascript frameworks like jQuery, Mootools or Prototype. PHP 5.x comes with another library that you can use along side DOMDocument that makes applying XPath to your DOM possible.&lt;/p&gt;&lt;p&gt;DOMXPath, apparently, was the answer I was looking for. Using it is simple enough:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$DOM = new DOMDocument();
$DOM-&amp;gt;loadXml('&amp;lt;root&amp;gt;&amp;lt;item&amp;gt;one&amp;lt;/item&amp;gt;&amp;lt;item&amp;gt;two&amp;lt;/item&amp;gt;&amp;lt;/root&amp;gt;');
$XPath = new DOMXPath($DOM);

$results = $XPath-&amp;gt;query('//root/item[2]');
&lt;/code&gt;&lt;/pre&gt;

&lt;ol&gt;
&lt;li&gt;Create an instance of the DOMDocument class&lt;/li&gt;
&lt;li&gt;Feed it some XML&lt;/li&gt;
&lt;li&gt;Create an instance of DOMXPath and feed it the instance of DOMDocument&lt;/li&gt;
&lt;li&gt;Query the XML document with an XPath expression. The one above returns the second 'item' node.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;See? Simple. Now you can iterate through &lt;code&gt;$results&lt;/code&gt; like you would any array.&lt;/p&gt;

&lt;p&gt;But still, while it makes searching through XML documents much easier, it's still be lacking in simplicity and ease of use. There is definitely a learning curve. There aren't a whole lot of convenience methods included and the poorly contrived documentation in the PHP manual pretty much leaves a newbie in the dark. You REALLY have to know what you're doing when it comes to playing with PHP's native DOM functionality.&lt;/p&gt;

&lt;p&gt;So, long story short, I thought of how cool it would be if there was a utility that mimicked the functionality and usability of jQuery. So, last night I created the &lt;code&gt;DomQuery&lt;/code&gt; library. It functions almost exactly like jQuery does even with chainable commands!&lt;/p&gt;

&lt;p&gt;Here is a small example of what it can do:&lt;/p&gt;

&lt;h5&gt;The XML:&lt;/h5&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;root&amp;gt;
    &amp;lt;item&amp;gt;Item One&amp;lt;/item&amp;gt;
    &amp;lt;item&amp;gt;Item Two&amp;lt;/item&amp;gt;
    &amp;lt;item test="omg"&amp;gt;Item Three&amp;lt;/item&amp;gt;
    &amp;lt;item&amp;gt;Item Four&amp;lt;/item&amp;gt;
    &amp;lt;item&amp;gt;Item Five&amp;lt;/item&amp;gt;
    &amp;lt;parent&amp;gt;
        &amp;lt;child&amp;gt;omg&amp;lt;/child&amp;gt;
        &amp;lt;child&amp;gt;
            &amp;lt;test/&amp;gt;
        &amp;lt;/child&amp;gt;
        &amp;lt;child test="hai"&amp;gt;omg&amp;lt;/child&amp;gt;
    &amp;lt;/parent&amp;gt;
    &amp;lt;copy&amp;gt;
        &amp;lt;default/&amp;gt;
    &amp;lt;/copy&amp;gt;
&amp;lt;/root&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h5&gt;The Code:&lt;/h5&gt;

&lt;pre&gt;&lt;code&gt;$Xml = new DomQuery;

$Xml-&amp;gt;load($xml)
    -&amp;gt;path('//*[@test]')
    -&amp;gt;removeAttr('test')
    -&amp;gt;path('//root/parent/child[3]')
    -&amp;gt;attr('foo', 'bar')
    -&amp;gt;replicate('//root/copy/default');

header('Content-Type: text/xml');

die($Xml-&amp;gt;saveXml());
&lt;/code&gt;&lt;/pre&gt;

&lt;h5&gt;The Result:&lt;/h5&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;root&amp;gt;
    &amp;lt;item&amp;gt;Item One&amp;lt;/item&amp;gt;
    &amp;lt;item&amp;gt;Item Two&amp;lt;/item&amp;gt;
    &amp;lt;item&amp;gt;Item Three&amp;lt;/item&amp;gt;
    &amp;lt;item&amp;gt;Item Four&amp;lt;/item&amp;gt;
    &amp;lt;item&amp;gt;Item Five&amp;lt;/item&amp;gt;
    &amp;lt;parent&amp;gt;
        &amp;lt;child&amp;gt;omg&amp;lt;/child&amp;gt;
        &amp;lt;child&amp;gt;
            &amp;lt;test/&amp;gt;
        &amp;lt;/child&amp;gt;
        &amp;lt;child foo="bar"&amp;gt;omg&amp;lt;/child&amp;gt;
    &amp;lt;/parent&amp;gt;
    &amp;lt;copy&amp;gt;
        &amp;lt;default&amp;gt;
            &amp;lt;child foo="bar"&amp;gt;omg&amp;lt;/child&amp;gt;
        &amp;lt;/default&amp;gt;
    &amp;lt;/copy&amp;gt;
&amp;lt;/root&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h5&gt;What The?&lt;/h5&gt;

&lt;p&gt;Yes, it does exactly what it looks like it's doing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Instantiate an instance of &lt;code&gt;DomQuery&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Feed it some XML (HTML too!)&lt;/li&gt;
&lt;li&gt;Search for all nodes who have attributes entitled 'test'&lt;/li&gt;
&lt;li&gt;REMOVE THEM!&lt;/li&gt;
&lt;li&gt;Get the 3rd 'child' node within 'parent'&lt;/li&gt;
&lt;li&gt;Give it the attribute of 'foo' with the value of 'bar'&lt;/li&gt;
&lt;li&gt;Copy the last used result and move it to '/root/copy/default/'&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;How's About This:&lt;/h4&gt;

&lt;p&gt;Unfortunately, PHP &amp;lt; 5.3.x doesn't support lambda functions or closures like javascript does, so we can't do something fancy like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$Xml-&amp;gt;load($xml)-&amp;gt;path('//root/item/*')-&amp;gt;each(function(&amp;amp;$Element){ echo $Element-&amp;gt;nodeName; });
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In PHP 5.3.x this would apply a callback function to each of the results, allowing you to modify them in any way you wish. Since 99% of the people out there who would be using this don't have that version of PHP in production, I had to lower the functionality a bit to accommodate the most popular setups. So, instead of the above, you can do this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$Xml-&amp;gt;load($xml)-&amp;gt;path('//root/item/*')-&amp;gt;walk('function_name', 'param1', 'param2');
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This will apply a callback to every matched node. Simply put, this works by invoking &lt;code&gt;call_user_func_array&lt;/code&gt;, executing the function and passing along any parameter you included within the execution of the 'walk' method. Walk also passes through the current result's context by reference so you can manipulate the current state of the document, the entire result set of the last pattern and the currently matched element:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$context = array
(
    'results' =&amp;gt; &amp;amp;$this-&amp;gt;results,
    'element' =&amp;gt; &amp;amp;$Element,
    'context' =&amp;gt; &amp;amp;$this
)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;$context&lt;/code&gt; will always be the first parameter included in your callback. All other passed arguments will be included after.&lt;/p&gt;

&lt;h4&gt;What Else?&lt;/h4&gt;

&lt;p&gt;This library is still in development, but a ton of functionality is already included. Here is a list of fully supported functions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;after()&lt;/code&gt;  Insert content after each of the matched elements.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;append()&lt;/code&gt;  Append content to the inside of every matched element.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;appendTo()&lt;/code&gt;  Append all of the matched elements to another, specified, set of elements.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;attr()&lt;/code&gt;  Returns, adds and edits the specified attributes of a matched element.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;before()&lt;/code&gt;  Insert content before each of the matched elements&lt;/li&gt;
&lt;li&gt;&lt;code&gt;clear()&lt;/code&gt;  Clears the contents of a matched element.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;path()&lt;/code&gt;  Apply an XPath pattern to a DOM and save the results.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prepend()&lt;/code&gt;  Prepend content to the inside of every matched element.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prependTo()&lt;/code&gt;  Prepend all of the matched elements to another, specified, set of elements.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;remove()&lt;/code&gt;  Removes a matched element&lt;/li&gt;
&lt;li&gt;&lt;code&gt;removeAttr()&lt;/code&gt;  Removes a specified attribute from a matched element.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;replace()&lt;/code&gt;  Replaces a matched element with another one.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;replicate()&lt;/code&gt;  Copies a set of matched elements to a destination represented by another path.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;walk()&lt;/code&gt;  Apply a user-defined callback function to a matched element.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I'll be posting more examples and tutorials down the road. Hopefully, I'll get this library to the point where I'll release it for all to use in the next few weeks. It's been a while since I released something fun and useful. I hope you guys will enjoy it.&lt;/p&gt;

&lt;p&gt;If you're interested in testing this thing out with me or if you have any suggestions, post them in the comment area of this article.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/u4t-IL6qEX8" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/introducing-domquery/</feedburner:origLink></item>
    <item>
      <title>School SUCKS and here is why ...</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/f3SSIxR6zmA/</link>
      <pubDate>Mon, 09 Mar 2009 05:37:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/school-sucks-and-here-is-why/</guid>
      <description>&lt;p&gt;I usually post tech-related stuff on this blog, but I've recently read an article about the modern school system that, literally, made my jaw drop to the floor. This is something I feel everybody should read, especially those of you that have children attending public schools. It will give you a greater understanding of how the system was originally meant to work.&lt;/p&gt;

&lt;p&gt;Even if you think it's complete hogwash it's definitely a VERY interesting read.&lt;/p&gt;&lt;h4&gt;The 6 Basic Functions of Modern Schooling&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The adjustive or adaptive function. Schools are to establish fixed habits of reaction to authority. This, of course, precludes critical judgment completely. It also pretty much destroys the idea that useful or interesting material should be taught, because you can't test for reflexive obedience until you know whether you can make kids learn, and do, foolish and boring things.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The integrating function. This might well be called "the conformity function," because its intention is to make children as alike as possible. People who conform are predictable, and this is of great use to those who wish to harness and manipulate a large labor force.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The diagnostic and directive function. School is meant to determine each student's proper social role. This is done by logging evidence mathematically and anecdotally on cumulative records. As in "your permanent record." Yes, you do have one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The differentiating function. Once their social role has been "diagnosed," children are to be sorted by role and trained only so far as their destination in the social machine merits - and not one step further. So much for making kids their personal best.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The selective function. This refers not to human choice at all but to Darwin's theory of natural selection as applied to what he called "the favored races." In short, the idea is to help things along by consciously attempting to improve the breeding stock. Schools are meant to tag the unfit - with poor grades, remedial placement, and other punishments - clearly enough that their peers will accept them as inferior and effectively bar them from the reproductive sweepstakes. That's what all those little humiliations from first grade onward were intended to do: wash the dirt down the drain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The propaedeutic function. The societal system implied by these rules will require an elite group of caretakers. To that end, a small fraction of the kids will quietly be taught how to manage this continuing project, how to watch over and control a population deliberately dumbed down and declawed in order that government might proceed unchallenged and corporations might never want for obedient labor.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Read the rest here: &lt;a href="http://www.wesjones.com/gatto1.htm"&gt;http://www.wesjones.com/gatto1.htm&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/f3SSIxR6zmA" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/school-sucks-and-here-is-why/</feedburner:origLink></item>
    <item>
      <title>Facelift incoming ...</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/qw4qx4JoVaM/</link>
      <pubDate>Wed, 25 Feb 2009 02:41:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/facelift-incoming/</guid>
      <description>&lt;p&gt;Just a quick note to everyone. I'll be upgrading this site from the first iteration of Symphony to the latest and greatest version of the worlds greatest publishing platform. With the upgrade will come a slightly modified theme with a bit more content and integration with other services. I have already moved all of my articles over to the new platform. A pretty time-consuming task considering the fact that the design of the new version is so far apart from the one we're using, there is no upgrade path for content.&lt;/p&gt;

&lt;p&gt;I 'might' be moving over the comments as well if I have time and placing redirects so search engines won't have to reindex everything.&lt;/p&gt;

&lt;p&gt;Also, the forum will get a matching design; the default Vanilla install is just too boring for me... and everyone else.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/qw4qx4JoVaM" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/facelift-incoming/</feedburner:origLink></item>
    <item>
      <title>So long old friend ...</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/FVe2U_AVzp4/</link>
      <pubDate>Fri, 20 Feb 2009 05:39:35 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/so-long-old-friend/</guid>
      <description>&lt;p&gt;For those of us in the know, we all saw it coming a mile away for a while now. Today I finally decided to pull the plug on my first real webventure; &lt;a href="http://www.jaia-interactive.com"&gt;Jaia Interactive&lt;/a&gt;. For a good few years now, this site was host to my very first open source project, MyTopix. An open source PHP-base discussion board solution. It had a great following for a while until our hosting provider went monkey shit and decided to lose all our data.&lt;/p&gt;&lt;p&gt;Due to personal issues, it took a good month to get the site up and running again. I didn't even have the time to get to all our users to explain what was going on with the site. This was probably the first death blow to the project. It was young at the time and was starting to pick up a serious following. We were in position to compete against some of the bigger discussion board solutions out there and this disaster couldn't have come at a worse time.&lt;/p&gt;

&lt;p&gt;The loss of data coupled with the amount of time it took to get back on our own feet was a serious blow to the project's credibility. We ended up having to start our community from a very old backup dated a year or so before the crash. The project's momentum never picked up again to the same level that it was.&lt;/p&gt;

&lt;p&gt;Some time later I just lost complete interest in the site and wanted to move on to other things. Since then, I've been far too busy with other projects to even look at the site. Now, the old forum is a ghost town. Only a few of the regulars pop by every now and again.&lt;/p&gt;

&lt;p&gt;All these factors brought me to the conclusion that it was time to take the site off life support. Everything will be removed and the domain will be redirected to this site. The data from the old support boards has all been saved and converted to a &lt;a href="http://forums.thedrunkenepic.com/"&gt;new Vanilla install&lt;/a&gt; on this site. I want to start the community up again, but take it in a different direction.&lt;/p&gt;

&lt;p&gt;If you are a member of the MyTopix support boards and would like to stick around, just go to the new forums (via the link at the top of the page) and go through the password recovery process. Due to the differences in the way Vanilla and MyTopix store passwords, there is no simple way to transfer them across. Resetting your password is the only viable option at this point.&lt;/p&gt;

&lt;p&gt;For the members of the board who were a part of the 'Mod Squad', you still retain your positions in the new forum install.&lt;/p&gt;

&lt;p&gt;As soon as I get a chance, I'll go ahead and publish the MyTopix to Vanilla converter as I'm sure I won't be the only one who wants to move on.&lt;/p&gt;

&lt;p&gt;I have quite a few things in store for this site within the next few months and this is only the first step. I hope that you will join me in taking this site to new places.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/FVe2U_AVzp4" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/so-long-old-friend/</feedburner:origLink></item>
    <item>
      <title>jQuery: Plugin qTips</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/9ZyeSfxbWS4/</link>
      <pubDate>Fri, 20 Feb 2009 04:29:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/jquery-plugin-qtips/</guid>
      <description>&lt;p&gt;Hey guys! I've been trying to be a bit more active lately and provide you all with some decent articles. So, because of this, I took some time off my busy schedule last night to sit down and teach myself how to create jQuery plugins. I was trying to figure out what I could develop that would be useful when I was reminded of how many times I tried to implement a javascript-based tooltip solution.&lt;/p&gt;

&lt;p&gt;There are plenty of these plugins out there that are dedicated to display tooltips, but I wanted a dirt-simple implementation that didn't require me to mull about CSS code and compatibility issues.&lt;/p&gt;

&lt;p&gt;So, I wrote a little plugin that addresses all these inconvenient issues; qTips.&lt;/p&gt;

&lt;p&gt;Why 'qTips'? Well, you can quickly add tooltips. So, it's actually quick tips, but qTips sounds catchier.&lt;/p&gt;&lt;h4&gt;A Demonstration&lt;/h4&gt;

&lt;p&gt;Actions speak louder than words, so before I go into this plugin's details, I thought I'd show you all a &lt;a href="http://www.thedrunkenepic.com/dev/jquery/qtips/"&gt;proof-of-concept demonstration&lt;/a&gt;. Just hover your mouse pointer over the boxes and you'll see what happens. A pretty little tooltip will fade in and out with your mouse movements.&lt;/p&gt;

&lt;p&gt;For more people, this is all they need.&lt;/p&gt;

&lt;h4&gt;Implementation&lt;/h4&gt;

&lt;p&gt;First, you might want to &lt;a href="http://www.thedrunkenepic.com/goodies/qtips/qtips-100a.zip"&gt;download&lt;/a&gt; the plugin package. You'll notice that it comes with the same demo page that I previously linked to.&lt;/p&gt;

&lt;p&gt;This plugin is implemented like any other. After you link to your jQuery library's location, you place the following immediately after:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;script src="/path/to/plugin/jquery.qtips.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Since we need to style the basic implementation of the tooltip, we should add the following CSS to one of your stylesheets:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;div.qtip-wrapper {
    z-index: 999;
    text-align: center;
    position: absolute;
    font-size: .9em;
    width: 250px;
    background: transparent url(arrow.png) no-repeat scroll center bottom;
    color: #fff;
    padding-bottom: 5px;
    display: none
}    

    div.qtip-wrapper div {
        background: #333 none;
        padding: 5px;
        font: normal normal .9em/1em "Arial", verdana, sans-serif;
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can substitute the above background image with anything you want, so long as the position information is still intact.&lt;/p&gt;

&lt;p&gt;Next, you just implement the plugin and assign it to a selection of some kind. Take the following markup located within the &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; element of a document, for instance:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;body&amp;gt;
    &amp;lt;img src="/path/to/an/image.jpg" alt="" id="product-image-5" /&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Simple enough, but you'd like to include a tooltip that displays some image meta data when someone hovers their mouse over the image. To do this, you just add the following within your document:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;script type="text/javascript"&amp;gt;

    $(document).ready(function()
    {
        $('img#product-image-5').qtip({content:'Here is some image info...'});
    });

&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This tooltip is now applied to every element within your document that matches the specified selector. Of course, while using jQuery, you can apply a tooltip to just about anything within your page with a single line of code.&lt;/p&gt;

&lt;h4&gt;Configuration&lt;/h4&gt;

&lt;p&gt;While this plugin may be a simple tooltip implementation that doesn't mean it lacks functionality. There are several configuration options that you can choose from to fine-tune your tooltips so they display exactly how you want them to. Here is a quick breakdown of the &lt;em&gt;current&lt;/em&gt; configuration items and their default values:&lt;/p&gt;

&lt;h5&gt;container&lt;/h5&gt;

&lt;p&gt;&lt;em&gt;default: 'qtip'&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;usage: $(selector).qtip({container:'qtip'});&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This allows you to specify a default prefix for the ids assigned to the tooltip elements themselves. Since there may be multiple tooltips displayed at any given time, an incrementor is used and suffixed to the end of the &lt;code&gt;container&lt;/code&gt; name to prevent naming conflicts.&lt;/p&gt;

&lt;h5&gt;content&lt;/h5&gt;

&lt;p&gt;&lt;em&gt;default: blank&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;usage: $(selector).qtip({content:'Why, good DAY to you, sir!'});&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is the content you want to display within your tooltip. It can be a string, html markup or even a DOM object.&lt;/p&gt;

&lt;h5&gt;position&lt;/h5&gt;

&lt;p&gt;&lt;em&gt;default: 'center'&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;usage: $(selector).qtip({position:'center'});&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;choices: left, right, center, bottom&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This setting defines the position of the tooltip relative to the matched element.&lt;/p&gt;

&lt;h5&gt;nudge_top&lt;/h5&gt;

&lt;p&gt;&lt;em&gt;nudge_top: 10&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;usage: $(selector).qtip({nudge_top:5});&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;How many pixels &lt;em&gt;above&lt;/em&gt; the matched element you'd like the tooltip to be displayed.&lt;/p&gt;

&lt;h5&gt;nudge_left&lt;/h5&gt;

&lt;p&gt;&lt;em&gt;nudge_left: 0&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;usage: $(selector).qtip({nudge_left:5});&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;How many pixels &lt;em&gt;to the left&lt;/em&gt; of the matched element you'd like the tooltip to be displayed.&lt;/p&gt;

&lt;h4&gt;Callback Functions&lt;/h4&gt;

&lt;p&gt;qTips comes with 4 built-in callback functions that are triggered during various phases of the tooltip display. All functions pass the object of the currently matched element as well as the object of the current tooltip.&lt;/p&gt;

&lt;h5&gt;preRender(e, tip)&lt;/h5&gt;

&lt;p&gt;&lt;em&gt;usage: $(selector).qtip({preRender:function(e, tip){}});&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is triggered immediately after your mouse enters the boundaries of the matched element, but before anything is actually processed for display.&lt;/p&gt;

&lt;h5&gt;postRender(e, tip)&lt;/h5&gt;

&lt;p&gt;&lt;em&gt;usage: $(selector).qtip({postRender:function(e, tip){}});&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is triggered last in the tooltip process; immediately after the tooltip fades away.&lt;/p&gt;

&lt;h5&gt;onShow(e, tip)&lt;/h5&gt;

&lt;p&gt;&lt;em&gt;usage: $(selector).qtip({onShow:function(e, tip){}});&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is triggered when the tooltip is pushed out for display.&lt;/p&gt;

&lt;h5&gt;onHide(e, tip)&lt;/h5&gt;

&lt;p&gt;&lt;em&gt;usage: $(selector).qtip({onHide:function(e, tip){}});&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is triggered when the tooltip disappears.&lt;/p&gt;

&lt;h4&gt;Conclusion&lt;/h4&gt;

&lt;p&gt;This is my very FIRST jQuery plugin, so please, be gentle. I could always use some suggestions and bug reports. I'd like this to be useful for everyone and not just me, so if you'd like to see something that can easily be implemented or you find an instance where it's not working properly, just send me an email or post a comment here.&lt;/p&gt;

&lt;p&gt;This has actually been quite a pleasant experience. You don't fully realize the potential of jQuery until you actually take the time to build something off of the framework. Good stuff all around!&lt;/p&gt;

&lt;p&gt;I hope you enjoy using it just as much as I did writing it!&lt;/p&gt;

&lt;h4&gt;qTips for all images:&lt;/h4&gt;

&lt;p&gt;Thanks to Nick for his lovely comment below, I have decided to post a quick snippet on how you can add a qTip to every image on a page. Just use the following code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$('img').qtip(
{
    wrapper: 'body',
    position: 'right',
    onShow: function(e, tip)
    {
        $('div', tip).empty().append('&amp;lt;img src="' + $(e).attr('src') +'" alt=""/&amp;gt;');

        $('div', tip).css('width', $('img', tip).width());
    }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;See, Nick? The plugin isn't as "useless" as you say it is!&lt;/p&gt;

&lt;h4&gt;Download&lt;/h4&gt;

&lt;p&gt;In case you missed it, &lt;a href="http://www.thedrunkenepic.com/goodies/qtips/qtips-100a.zip"&gt;here is the download link&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;You can also find the official qTips project page &lt;a href="http://plugins.jquery.com/project/qtips"&gt;here&lt;/a&gt; on jQuery's plugin repository.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/9ZyeSfxbWS4" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/jquery-plugin-qtips/</feedburner:origLink></item>
    <item>
      <title>Fuck my life. What a horrible day ...</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/3FzMuxORs3U/</link>
      <pubDate>Wed, 18 Feb 2009 00:12:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/fuck-my-life-what-a-horrible-day/</guid>
      <description>&lt;p&gt;Everybody has them. Some more often than others. Today is that day for me. The kind of day where the very instant you wake up, the world takes a massive shit right on your face. The funny thing is that it's only 9:30 in the morning. That's right, I've only been awake for 3 hours and this is, officially, the worst day of the year.&lt;/p&gt;&lt;h4&gt;6:00 am&lt;/h4&gt;

&lt;p&gt;Alarm goes off. I know this because I turned it off and went back to sleep.&lt;/p&gt;

&lt;h4&gt;7:00 am&lt;/h4&gt;

&lt;p&gt;Gf and I wake up and I'm an hour behind. Not only that, I must have slept on something I shouldn't have because my fucking neck is so jacked up I can barely move it.&lt;/p&gt;

&lt;h4&gt;7:30 am&lt;/h4&gt;

&lt;p&gt;I'm ready. I even had a light breakfast. I head out to catch my bus. It's been raining in Sydney now for the past week and a half, but at the moment it's only a light drizzle. I think to myself, "Meh. I'll get to the stop before it gets too bad. I should probably buy an UMBRELLA-ELLA-ELLA today.".&lt;/p&gt;

&lt;h4&gt;7:40 am&lt;/h4&gt;

&lt;p&gt;Halfway to the bus stop and it begins to PISS DOWN. I am now drenched and smell like worms. Thank you, God!&lt;/p&gt;

&lt;h4&gt;7:50 am&lt;/h4&gt;

&lt;p&gt;Well, at least my bus is on time. I hop on to find the only seat free is situated at the beginning of the bus. On this particular model of bus, the first series of seats face eachother. There's some chick who decided to stretch out her legs UNDER my seat. So, by this time we're at the next stop. People want to get on and sit next to me. I try and scootch over, but the bitch won't move her legs.&lt;/p&gt;

&lt;p&gt;Now I'm sitting at the most awkward angle imaginable. Not only that, the emergency kit is situated right by my head, forcing me to bend my neck in the most uncomfortable position.&lt;/p&gt;

&lt;h4&gt;8:40 am&lt;/h4&gt;

&lt;p&gt;Yeah, you read that right. I had to sit in that position for a FUCKING HOUR.&lt;/p&gt;

&lt;p&gt;Anyway, time to get off and catch the other bus that'll take me straight to bum-fuck Sydney; where I now work. It's a good 30 minute commute from Railway Square. This, normally, is a pleasant ride, except today it's jam packed with a certain group of people that don't understand the concept of personal hygiene.&lt;/p&gt;

&lt;p&gt;So, now I can barely move my neck. I now have headache. I'm tired, hungry, hot and soaked. There's a mixture of rain, hair product and sweat trickling down into my fucking eyes. I'm thinking I'm going to be late for work and NOW there's an old foreign dude standing right next to me and his fucking armpits smell like 50 of my Grandpas combined.&lt;/p&gt;

&lt;h4&gt;9:25 am&lt;/h4&gt;

&lt;p&gt;Woohoo! I'm pretty much on time and have enough time left over to get my morning coffee! I jump off the bus, my bag gets snagged on the door and tears open the zipper.&lt;/p&gt;

&lt;p&gt;All my shit is now scatterred to the four winds... in the fucking rain.&lt;/p&gt;

&lt;h4&gt;9:30 am&lt;/h4&gt;

&lt;p&gt;I got my coffee and am sitting at my desk. Time to log in and do my morning rounds. Things seem to be getting a bit better until I take out my phone and realize my Mom's been trying to call me all morning. Shit! I haven't talked to her in months, so I try and call her back. Turns out I have NO credit left on my phone.&lt;/p&gt;

&lt;p&gt;Great.&lt;/p&gt;

&lt;p&gt;My Mom is a constant source of reassurance. If anyone can convince me that today isn't so bad, it's her and now I can't even have that. FUCK YOU WORLD!&lt;/p&gt;

&lt;h4&gt;9:45 am&lt;/h4&gt;

&lt;p&gt;I open my Google Chat only to be welcomed by the most terrible news of the day. Turns out that Trent Reznor of the one and only Nine Inch Nails is throwing in the towel. I am completely fucking devastated by the news. NIN is my most favorite band. of. all. time. The very first CD I ever bought with my own money was NIN: Pretty Hate Machine. I still have the disc stashed away somewhere.&lt;/p&gt;

&lt;p&gt;Can this day be any more terrible for me?&lt;/p&gt;

&lt;p&gt;Yep. I was actually planning on seeing NIN next week in downtown Sydney. Turns out that this will be their farewell tour. I take a look at my bank account and I'm on my last $100. That just so happens to be the price of one of their tickets.&lt;/p&gt;

&lt;p&gt;No money is the result of 3 months of unemployment. I made it stretch as long as I could. Luckily, I get paid this friday, but it seems like I'm going to have to ask the gf for a small loan so I can snag a couple tickets. If that doesn't pan out... well... FACK!11&lt;/p&gt;

&lt;h4&gt;10:15 am&lt;/h4&gt;

&lt;p&gt;Coding away when I came up with a brilliant idea only to find that some douchebag is squatting on the perfect domain name for it.&lt;/p&gt;

&lt;h4&gt;10:2... Pretty much ALL the fucking time&lt;/h4&gt;

&lt;p&gt;If Eclipse locks up for 2 minutes one more fucking time, I'm going to launch my FACE into my screen. Then, I'll feel bad because it wasn't the screen's fault.&lt;/p&gt;

&lt;p&gt;Seriously, is hitting the backspace key THAT intensive of a process that Eclipse decides to shit itself?&lt;/p&gt;

&lt;h4&gt;10:40 am&lt;/h4&gt;

&lt;p&gt;That's the time right now. Nothing bad has happened yet, but it looks like it's going to be 'one of those days' for the rest of the day.&lt;/p&gt;

&lt;p&gt;I fully realize this is a bitch post and that there's always someone out there who has it much, MUCH worse. There are people out there without fresh water to drink and kids working in factories for a bowl of rice a day. Still, a shit day is a shit day.&lt;/p&gt;

&lt;h4&gt;Present Me&lt;/h4&gt;

&lt;p&gt;&lt;img src="http://www.thedrunkenepic.com/junk/blog/so-happy.gif" alt="This is me ..." title="" /&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/3FzMuxORs3U" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/fuck-my-life-what-a-horrible-day/</feedburner:origLink></item>
    <item>
      <title>The importance of coding standards ...</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/r6ymp3ivTOo/</link>
      <pubDate>Mon, 16 Feb 2009 03:56:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/the-importance-of-coding-standards/</guid>
      <description>&lt;p&gt;I've been doing work for the web now for close to 10 years. During my tenure as a code monkey I have been a part of many, many projects. When approached with an offer for work, they all seem to fall within one of the following categories:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You are asked to engineer an end-to-end solution from the ground up.&lt;/li&gt;
&lt;li&gt;You are asked to take over a project because the original developer dropped off the face of the planet... and ran off with all the money.&lt;/li&gt;
&lt;li&gt;You are asked to work within a team of developers to fulfill a project's requirements.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;From my experience, there are several key things that drive me out of my FUCKING MIND when it comes to team-based development, one of them ranks highest above all: no standardized coding practices.&lt;/p&gt;

&lt;p&gt;Seriously, if you're a developer working on a team-based project, how many times have you found yourself reviewing the code and realizing that it looks as if was written by 5 different people? What do you do?&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Do you write your own blocks of code in your own standard, thereby contributing to the problem? As in, now it looks like 6 people people have contributed to the same file instead of &lt;em&gt;just&lt;/em&gt; 5.&lt;/li&gt;
&lt;li&gt;When confronted with a different standard, do you try and adapt to it &lt;em&gt;just&lt;/em&gt; for that specific block of code?&lt;/li&gt;
&lt;li&gt;Just wonder how they've gotten this far without running the project into the ground and killing each other?&lt;/li&gt;
&lt;li&gt;Or do you just attempt to rewrite the entire thing according to the standard which you are accustomed to? Which, when you think about it, probably isn't a great idea as it would just throw everybody &lt;em&gt;else&lt;/em&gt; off.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Personally, I don't really care what your style or standard is as long as you have one that you follow CONSISTENTLY.&lt;/p&gt;

&lt;p&gt;Nothing can slow a developer down more than inconsistent coding. For example, some people like to code like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;if($foo == 'foo') {
    die('bar');
}else{
    die('omg');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Or in short hand:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;if($foo == 'foo'):
    die('bar');
else:
    die('omg');
endif;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Or indented if there is only 1 line to execute:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;if($foo == 'foo')
    die('bar');
else
    die('omg');
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Or, like me, with plenty of open space to see where you are:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;if($foo == 'foo')
{
    die('bar');
}
else
{
    die('omg');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Let's not forget this asshole, who's all over the fucking place:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;if  ($foo == 'foo')  {
die('bar');
}
else {
            die('omg');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You know, save for the very last example, I haven't a problem with any of these styles. By themselves, if used consistently, you pretty much know what's going on all the time while you're mulling about the code. This becomes a problem when you're tracking a bug and come across a file with ALL of these styles mixed together. I can't recall how much time I've spent trying to wrap my brain around something that should have been simple enough to understand.&lt;/p&gt;

&lt;p&gt;Inconsistent code blows performance and efficiency right out of the water, especially on larger projects.&lt;/p&gt;

&lt;p&gt;This article isn't about a specific project in my past or anyone in particular. I'm not here to name names or point the finger, but certain measures must be taken during the analysis and planning stages of a project where a consistent style of coding should be decided upon. How much whitespace to use and where to use it, where to place curly braces, naming conventions for functions, variables, constants, classes and, most importantly, DOCUMENTATION are all things that need to be covered.&lt;/p&gt;

&lt;p&gt;This way, when Joe Coder wins a contract that's already half-way finished, he can pick up and run with it in a relatively short amount of time.&lt;/p&gt;

&lt;p&gt;Even if you're starting the project and riding solo at first, a set standard will make future developers happier too. Who knows how many hands will touch your code during the lifetime of the software?&lt;/p&gt;

&lt;p&gt;Personally, I tend to follow &lt;a href="http://www.dagbladet.no/development/phpcodingstandard/"&gt;this standard&lt;/a&gt; in most of my projects. It's pretty straightforward and easy enough to wrap your head around. The key here is to be consistent when you can. It's understandable to wiggle around your personal standards when working on a team with little or none of their own. In these cases, just morph your style to match whatever you encounter until you find an appropriate time to discuss the problem with your teammates or PM.&lt;/p&gt;

&lt;p&gt;You know, come to think of it, I could have just summarized this entire article with a single &lt;a href="http://www.twitter.com/wilhelm"&gt;tweet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;"For FUCK's SAKE, people! Pick a coding standard for your project and STICK TO IT!!!"&lt;/p&gt;

&lt;p&gt;Sorry for the rant, but I have no one to scream at. So, I'll just scream at the Internets instead. Yay! :D&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/r6ymp3ivTOo" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/the-importance-of-coding-standards/</feedburner:origLink></item>
    <item>
      <title>Ouch... My penis is on fire...</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/u52aS9zBj6w/</link>
      <pubDate>Wed, 11 Feb 2009 12:30:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/ouch-my-penis-is-on-fire/</guid>
      <description>&lt;p&gt;Yeah, so, I've been using my laptop like crazy the past few months trying to get through my giant backlog of client work that &lt;em&gt;really&lt;/em&gt; needs to get done. Sitting on a cold, hard dinner table chair ain't all it's cracked up to be, so a lot of times I tend to find myself on the couch.&lt;/p&gt;

&lt;p&gt;We all know that &lt;em&gt;laptops&lt;/em&gt; stopped being &lt;em&gt;laptops&lt;/em&gt; a while ago. Faster hardware usually means an even faster processor to keep up and with memory being as cheap as it is, software developers are able to create more and more complex applications. Well, more complex applications require more CPU cycles and this usually means more heat and we're at a point now, where we can safely say that a burning hot notebook computer should NOT be placed near your reproductive organs. &lt;a href="http://www.engadget.com/2006/08/29/apple-in-trouble-with-japan-over-sonys-exploding-batteries/"&gt;Exploding laptop batteries, anyone&lt;/a&gt;?&lt;/p&gt;&lt;p&gt;Yes, FUCK &lt;em&gt;THAT&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So, anyway, I usually place my &lt;em&gt;laptop&lt;/em&gt; on a couch cushion and then put the combo on my lap. Not very comfortable, but I put up with it... until I heard about &lt;a href="http://www.logitech.com/index.cfm/notebook_products/stands/devices/4841&amp;amp;cl=us,en#"&gt;this puppy&lt;/a&gt;. Yeah, I know, lapdesks have been around for a while, but it really wasn't something that came to mind during my many hours of frantic coding. I must say, though, that this puppy looks &lt;em&gt;nice&lt;/em&gt; and at $40 USD you can bet your candy ass I'm picking one up as soon as it comes to market.&lt;/p&gt;

&lt;p&gt;Only thing I'd like to see is a wittle-bitty space to use my mouse, but that's ok. I'm used to the trackpad.&lt;/p&gt;

&lt;p&gt;Yep, I can see the future. A future were toasty-warm radioactive genitals do not exist.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://www.thedrunkenepic.com/junk/blog/lapdesk-chick.png" alt="It burnses us!!!" title="" /&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/u52aS9zBj6w" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/ouch-my-penis-is-on-fire/</feedburner:origLink></item>
    <item>
      <title>jQuery: Mirroring Selections</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/Kz2kCviRC7w/</link>
      <pubDate>Wed, 11 Feb 2009 05:43:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/jquery-mirroring-selections/</guid>
      <description>&lt;p&gt;Ran into pretty interesting situation today while working on a client's administration interface. It made me realize that I'm probably not the first person to run into this.&lt;/p&gt;

&lt;p&gt;In one of their sections they have a list of records. At the very top of the list is a select box element that allows you to pick an action and apply it to any chosen records.&lt;/p&gt;

&lt;p&gt;Since the list of records is pretty long and requires a lot of scrolling, my client asked if it would be possible to have the same select box appear at the bottom of the list as well. Simple enough, but they also asked if it was possible to have one select box mirror the current selection to the other box at the bottom of the page.&lt;/p&gt;&lt;p&gt;So, to implement this feature, I decided to use a bit of jQuery magic.&lt;/p&gt;

&lt;p&gt;The elements in question are both named 'action', so what I did was simply bind a 'change' even using 'select[name=action]' as the selector. Once this event is invoked, it just copies the value of the current box to all other boxes on the screen with the same name.&lt;/p&gt;

&lt;p&gt;Take the following code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$(document).ready(function()
{
    $('select[name=action]').bind('change', function()
    {
        $('select[name=action]').val($(this).val());
    });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This isn't anything special, but just shows how jQuery can rise to the challenge of any problem.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/Kz2kCviRC7w" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/jquery-mirroring-selections/</feedburner:origLink></item>
    <item>
      <title>Domain Redirects Using PHP for SEO Optimization!</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/ok1_ojeLmV0/</link>
      <pubDate>Wed, 11 Feb 2009 05:15:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/domain-redirects-using-php-for-seo-optimization/</guid>
      <description>&lt;p&gt;Hello, everyone! It's been a while since I wrote a nice PHP tutorial, so here I am... doing just that! Today's article will deal with something I'm pretty sure you've all seen while on the web. How many times have you visited your favorite website by manually typing in the domain name in the address bar? Yeah. Lots. Sometimes you add the 'www.' and sometimes you just jump straight into the meaty part and type 2girls1... err... and the browser does the rest for you.&lt;/p&gt;

&lt;p&gt;Ever wonder how this happens and, more importantly, why you should take this into consideration for your websites? Well, it's done using 301 header and canonical redirects. Let's get to the details and discuss the whys and hows.&lt;/p&gt;&lt;h4&gt;But... Why?&lt;/h4&gt;

&lt;p&gt;While 'thedrunkenepic.com' and 'www.thedrunkenepic.com' might take you to the same place, from an SEO standpoint they're very different. Search engines may take those two urls and interpret them as different sites which could screw up your search engine ranking in some cases. Also, if you're using a web metrics service like Google Analytics, your reports, especially custom ones, might be spread across what appears to be two different sites as well. While this may not be a HUGE deal, it does add another layer of complexity to tracking visitors and other trends on your site, which is a chore in and of itself.&lt;/p&gt;

&lt;h4&gt;How Do I address problem?&lt;/h4&gt;

&lt;p&gt;Simple. By doing a '301 Permanent Redirect' from 'thedrunkenepic.com' to 'www.thedrunkenepic.com'. By doing this a visitor who clicks on or enters your site's link with no sub domain will be taken straight to the 'www.' version. Your analytics software will understand the '301' server response and act accordingly AND search engines will also make note of this next time they spider links to your site.&lt;/p&gt;

&lt;h4&gt;Simple? Surely you jest, good sir!&lt;/h4&gt;

&lt;p&gt;This isn't a standard header redirect, the 301 server response tells browser and search engines that the page you're accessing has been permanently moved to the following location. As far as metrics software and spiders are concerned 'thedrunkenepic.com' and 'www.thedrunkenepic.com' are now the same.&lt;/p&gt;

&lt;h4&gt;TEACH ME HOW!!!1one&lt;/h4&gt;

&lt;p&gt;Well, as the administrator of your website there are a few ways to take care of this issue. A solution is to use an .htaccess file with special mod_rewrite directives to redirect all requests that do not point to 'www.thedrunkenepic.com' to 'www.thedrunkenepic.com'. But, we're not going to get into this solution today as I prefer a lighter approach, one that makes use of my coding language of choice and isn't anywhere near as intensive as mod_rewrite; PHP.&lt;/p&gt;

&lt;p&gt;Unlike .htaccess, this wouldn't be a global solution that works across your entire site, it sort of depends on your platform that serves your content. For the sake of of this article, we'll just assume all content for your site is filtered through a single landing page in the form of 'index.php' located in your public root directory.&lt;/p&gt;

&lt;p&gt;Example: http://www.thedrunkenepic.com/index.php&lt;/p&gt;

&lt;p&gt;Since the DirectoryIndex directive on most Apache servers, by default, contains 'index.php', this is your site's default landing page. But, you already knew that, didn't you?&lt;/p&gt;

&lt;h4&gt;This is beginning to sound a bit too complex for me...&lt;/h4&gt;

&lt;p&gt;Alright, now we're getting to the good stuff. We have all requests for our site starting at 'index.php'. Now we can determine what and what not to redirect.&lt;/p&gt;

&lt;p&gt;First, we get the client requested host name by using $_SERVER['HTTP_HOST'] and break it down to manageable bits:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?php

$host_bits = explode('.', $_SERVER['HTTP_HOST']);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Next, the script attempts to determine the current HTTP_HOST's sub domain(s) and then rebuild the domain's root:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?php

$host_bits = explode('.', $_SERVER['HTTP_HOST']);

if(sizeof($host_bits) &amp;gt; 1)
{
    $tld = array_pop($host_bits);
    $domain = array_pop($host_bits) . ".{$tld}";
}
else
{
    $domain = array_pop($host_bits);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;By using array_pop() we are iterating through the pieces of the domain, one by one. By this point, the bits of the host name that we have left, if any, are the actual sub domains. Since your site may actual make use of valid sub domains, we're only going to redirect if $host_bits is empty. In other words, if nothing is left in $host_bits and we have our actual root $domain, it's pretty safe to assume that the current user is attempting to access the site without the 'www.'.&lt;/p&gt;

&lt;p&gt;If this is the case, we do a server-friendly redirect using the appropriate headers and exiting our script.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?php

$host_bits = explode('.', $_SERVER['HTTP_HOST']);

if(sizeof($host_bits) &amp;gt; 1)
{
    $tld = array_pop($host_bits);
    $domain = array_pop($host_bits) . ".{$tld}";
}
else
{
    $domain = array_pop($host_bits);
}

if(false == implode('.', $host_bits))
{
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: http://www.{$domain}{$_SERVER['REQUEST_URI']}");

    exit();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note, that when we're invoking the Location header, we're adding $_SERVER['REQUEST_URI'] to the end of the domain name. This allows the script to preserve any extras at the end of the original URL. This prevents stuff like sub directory or file requests from being lost.&lt;/p&gt;

&lt;h4&gt;In Conclusion&lt;/h4&gt;

&lt;p&gt;Well, this article is a little longer than I wanted it to be, but I hope I explained this common problem well enough for you to understand its implications. Not only that, you now know how to tackle and resolve this issue. Naturally, if you have any questions about the article, don't hesitate to ask using the comment form below.&lt;/p&gt;

&lt;p&gt;The above code should work on any server. To make it more efficient, though, you might want to wrap it up in a function and use it where ever it's needed in your site and other scripts. Also, just because it's in PHP doesn't mean you can't port it over to ASP or other languages. The code is simple enough to break down and translate and I'll always be more than happy to help you out if needed.&lt;/p&gt;

&lt;p&gt;Also, if there is an interest, I'd be more than happy to post the Apache mod_rewrite solution. Although it'd work globally throughout your site and it wouldn't have to rely on PHP, it is a bit more server intensive.&lt;/p&gt;

&lt;p&gt;I hope you enjoyed reading this article as much as I enjoyed writing it.&lt;/p&gt;

&lt;p&gt;Cheers!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This article as been republished after being accidentally wiped from my hosting provider. Hurray for cached RSS feeds!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/ok1_ojeLmV0" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/domain-redirects-using-php-for-seo-optimization/</feedburner:origLink></item>
    <item>
      <title>Not happy at the current moment ...</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/5Rgf-TOyzNs/</link>
      <pubDate>Mon, 05 Jan 2009 21:56:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/not-happy-at-the-current-moment/</guid>
      <description>&lt;p&gt;Well, I woke up this morning to find my site in shambles... again. Turns out the database that this blog software runs on mysteriously vanished into the night while I slept. Unfortunately, the latest back up I have is from November. Looks like I lost my last 3 blog articles.&lt;/p&gt;

&lt;p&gt;Real nice. Time to change hosts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Well, this is nice. Google cache caught 2 of my last 3 entries. It didn't catch my latest one, apparently. For those of you who didn't catch it, it concerned the Zune 30 lock-up issue and a possible way to fix it. Someone managed to leak the firmware source code that managed the Zune's real time clock. I stepped through the source code and explained what went wrong. No way am I writing that thing again.&lt;/p&gt;

&lt;p&gt;A future note to myself: Make a hard copy of all future articles. Especially the lengthy ones.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/5Rgf-TOyzNs" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/not-happy-at-the-current-moment/</feedburner:origLink></item>
    <item>
      <title>The cause of Z2k ...</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/iTUXzrCpH7A/</link>
      <pubDate>Fri, 02 Jan 2009 05:32:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/the-cause-of-z2k/</guid>
      <description>&lt;p&gt;No doubt by now some of you have heard of the &lt;a href="http://www.engadget.com/tag/z2k/"&gt;Z2K bug&lt;/a&gt; that's been affecting all 1st generation Zune 30 models the day before the new year; mine being one of them. Apparently, and the &lt;a href="http://www.zune.net/en-us/support/zune30.htm"&gt;Microsoft Zune guys&lt;/a&gt; confirm this, there was a bug in the driver that controls the real time clock on that specific model. The problem was with how the Zune's firmware handled resetting it's internal clock for the last day of a leap year.&lt;/p&gt;&lt;h4&gt;Bloops!&lt;/h4&gt;

&lt;p&gt;If anyone has this model of the Zune, what they saw when they tried using it was a &lt;a href="http://www.blogcdn.com/www.engadget.com/media/2008/12/zune-30-brick-20081231-488.jpg"&gt;hanging boot screen&lt;/a&gt; with a full progress bar.&lt;/p&gt;

&lt;p&gt;Word from Microsoft was that the counter would reset itself exactly 24 hours after the day our Zune's failed. The fix was, basically, to do nothing but wait a day without our Zunes. Well, that day has come and gone and I can gladly say that mine is back up and running like a champ.&lt;/p&gt;

&lt;p&gt;I was curious as to what the exact problem was with the firmware and why it would go tits up while doing something as mundane as a simple date check. Well, I wasn't the only curious coder as someone managed to post the &lt;a href="http://pastie.org/349916"&gt;offending source file&lt;/a&gt; on the internets.&lt;/p&gt;

&lt;p&gt;Mulling about the code snippet we can traverse the library's path of execution to figure out where it all went wrong. At some point during the boot process, the kernel calls the OEMGetRealTime() function to grab the current date. This function invokes a helper function declared as GetTime() which calculates the time and day from a provided timestamp.&lt;/p&gt;

&lt;p&gt;Everything seems fine until it calls yet another helper function named ConvertDays() which calculates the current day number of the provided year. Taking a very close look at this function reveals the problem. Here is the offending bit of code at around line 259:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;while (days &amp;gt; 365)
{
    if (IsLeapYear(year))
    {
        if (days &amp;gt; 366)
        {
            days -= 366;
            year += 1;
        }
    }
    else
    {
        days -= 365;
        year += 1;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This loop was written to execute only on the last day of the year. If we iterate through the days of a year using code, chances are we're using some sort of incrementor. So, by the time we hit 366 days, we know we're pretty close to the end of, at least, a standard year. But, what about leap years? 2008 was a leap year because it's divisible by 4. So, this means that 2008 had 366 days. If this is the case, our incrementor will stop at 367.&lt;/p&gt;

&lt;p&gt;We can see the check for the leap year in line 3 of the code snippet above. What happens next is what killed the Zune. The code accounts for a day count of anything greater than 366, which would include 367. But, the zinger here is we're not checking if the day count IS EQUAL TO 366. Since we aren't resetting the day count to 1 and breaking the loop, the poor Zune is stuck in an infinite loop which causes the boot screen to hang.&lt;/p&gt;

&lt;p&gt;What should have happened is something like the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;while (days &amp;gt; 365)
{
    if (IsLeapYear(year))
    {
        if (days &amp;gt;= 366)
        {
            days -= 366;
            year += 1;
        }
    }
    else
    {
        days -= 365;
        year += 1;
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If the day counter reaches 367, we now this is the first day after the new year following a leap year, January 1st, 2009. We can now exit the loop and continue booting.&lt;/p&gt;

&lt;p&gt;Microsoft told us to &lt;a href="http://www.zune.net/en-us/support/zune30.htm"&gt;wait 24 hours&lt;/a&gt; because then we wouldn't be in a leap year, bypassing the troublesome block of code completely. We shouldn't see this happen again for another 4 years!&lt;/p&gt;

&lt;p&gt;Could this have been prevented? Well, of course it could have. Code review doesn't always catch all the problems because it's being reviewed by human eyes. We tend to miss things in the code, especially if we've been staring at 1,000's of lines of it all day. What could have prevented this is simple and thorough unit testing.&lt;/p&gt;

&lt;p&gt;But, hey, I'm gonna give Microsoft a break. They've made a great product and after going through 5 5th generation iPods in ONE year, I decided it was time for a change. I picked up the white brick the week it was released and haven't had a single issue until 2 days ago. Not bad, guys, not bad at all.&lt;/p&gt;

&lt;p&gt;Besides, how many times have we caused self-inflicted facepalm moments? 'Duh' moments like will happen to any software engineer.&lt;/p&gt;

&lt;p&gt;One last thing before I go, you gotta hand it to the guys at Redmond, their code is quite pleasant to look at. I don't care what your coding standard is as long as you use it consistently and these guys got it juuuust the way I like it. Kudos 2 u!&lt;/p&gt;

&lt;p&gt;Till next time!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This article as been republished after being accidentally wiped from my hosting provider. Hurray for cached RSS feeds!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Also Note:&lt;/strong&gt; This article has been partially updated to reflect a great suggestion from &lt;a href="http://thedevlounge.com/"&gt;Nick Shepherd&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/iTUXzrCpH7A" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/the-cause-of-z2k/</feedburner:origLink></item>
    <item>
      <title>&amp;quot;Sorry, Wilhelm, but due to the economy...&amp;quot;</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/YlBqzX6gcq4/</link>
      <pubDate>Wed, 26 Nov 2008 05:23:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/sorry-wilhelm-but-due-to-the-economy/</guid>
      <description>&lt;p&gt;Well, it happened. Went into a meeting today with my supervisor for a quick one-on-one only to find that, due to the economy - cough - BULLSHIT - cough -, they're going to have to cut the team down to only a few developers.&lt;/p&gt;

&lt;p&gt;Apparently, the company I'm contracting for cut the IT department's budget for next year and the contractors were the first to get the axe.&lt;/p&gt;&lt;p&gt;So, basically, I have until the 23 of December to figure out what I want to do. Luckily, though, the Australian economy is surprisingly strong at the moment as is the current job market for web developers. I've been doing this stuff, in one form or another, for close to 10 years. I have the skills and the know-how to land any job in my field that I chase after. In other words, I'm not frightened or scared in the least bit.&lt;/p&gt;

&lt;p&gt;The guys here have been pretty good to me even though I disagree with their management decisions. They tell me that if I find something before my new end date, I can leave whenever I please on good terms. Hey, I'm getting what I wanted; a strong Australian reference with a big name company. And, maybe, this is just a blessing in disguise.&lt;/p&gt;

&lt;p&gt;Working here has reminded me how much I hate the corporate setting what with all the bright overhead lights and bureaucratic red tape and stupid, misguided decisions from management.&lt;/p&gt;

&lt;p&gt;Personally, the only redeeming qualities this contract has are the significant pay, free end-of-month booze, the convenient company gym and the awesome coffee shop in the main lobby. I'll miss those the most, but it isn't like I won't find similar comforts near my next place.&lt;/p&gt;

&lt;p&gt;I want to enjoy programming again. I miss my days at Hearst Magazine when I worked on their ecrush.com network. I prefer those smaller businesses and projects so much more. They tend to focus more on making the developer happy and comfortable. My next job is going to be with a small, well-funded, development house... with plenty of free coffee.&lt;/p&gt;

&lt;p&gt;Here's to new things!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This article as been republished after being accidentally wiped from my hosting provider. Hurray for cached RSS feeds!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/YlBqzX6gcq4" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/sorry-wilhelm-but-due-to-the-economy/</feedburner:origLink></item>
    <item>
      <title>Follow me ...</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/QeKWShJs3lo/</link>
      <pubDate>Wed, 19 Nov 2008 23:37:20 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/follow-me/</guid>
      <description>&lt;p&gt;Well, it would seem that, yet again, this blog is being neglected. I've have a LOT of projects in the loop at the moment and I'm finding less and less time to spare for articles. Trust me, I have a TON of articles that I'd like to write, but I just don't have the time. So, until some of these projects die down a bit, why don't you guys just follow me on Twitter? I make constant updates throughout the day via the service. Link to my account after the jump!&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.twitter.com/wilhelm"&gt;Here's my account, yo!&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/QeKWShJs3lo" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/follow-me/</feedburner:origLink></item>
    <item>
      <title>I think I just made a terrible mistake ...</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/GBXq70BlQl4/</link>
      <pubDate>Tue, 11 Nov 2008 00:46:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/i-think-i-just-made-a-terrible-mistake/</guid>
      <description>&lt;p&gt;Yeah, so I linked one of my work "friends" to a piece of code I wrote a short while ago. In doing so, I also inadvertently linked this guy to my blog. This code snippet just happens to reside in the junk folder of this domain. This person decided to share the link to my coworkers. I am now in the process of being made fun of because of the content of my blog.&lt;/p&gt;

&lt;p&gt;Thanks life.&lt;/p&gt;&lt;p&gt;...&lt;/p&gt;

&lt;p&gt;Fuck you, Dan.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/GBXq70BlQl4" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/i-think-i-just-made-a-terrible-mistake/</feedburner:origLink></item>
    <item>
      <title>And a new framework is born!</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/lk7kGDpG-co/</link>
      <pubDate>Fri, 17 Oct 2008 09:16:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/and-a-new-framework-is-born/</guid>
      <description>&lt;p&gt;Today marks the day I made my first commit to the new &lt;a href="http://code.google.com/p/cogsworth/"&gt;Cogsworth repository on Google Code&lt;/a&gt;. That's right, you can now, finally, check out Cogsworth and toy with it. It's still in its early, early Alpha stages, but this allows you all to test it as I go as well as make all sorts of requests and suggestions.&lt;/p&gt;

&lt;p&gt;This is the first time I've publicly released my code in a &lt;em&gt;very&lt;/em&gt; long time, so please, while I completely accept &lt;strong&gt;constructive&lt;/strong&gt; criticism, be gentle. My over-inflated ego can only handle so much abuse.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://groups.google.com/group/cogsworth-discussion"&gt;There is also a Google Group set up for every one.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since this is only the initial commit, there is a TON of incomplete documentation. It's all on my todo list, but as soon as I get the chance I'll be putting in a shit-ton of time into documentation, tutorials and everything else you might need to get started.&lt;/p&gt;

&lt;p&gt;Unfortunately, I don't have the time right now to make a more detailed announcement, but that's gonna have to wait until later on this weekend. Until then, here's Cogsworth's description:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Cogsworth is a lightening fast open source framework with all the tools you need to rapidly create exceptionally awesome web applications. It was written with the belief that you shouldn't have to start
  from scratch every time you create a new project. Cogsworth not only does all the grunt work for you, but provides a system with security, stability and an unprecedented amount of flexibility out of &gt; the box.&lt;/p&gt;
  
  &lt;p&gt;Booyah! We just made PHP fun again. Now go check it out and get to making some killer stuff!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let the games begin!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/lk7kGDpG-co" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/and-a-new-framework-is-born/</feedburner:origLink></item>
    <item>
      <title>Free stuff at FlipSquare... again!!!</title>
      <link>http://feedproxy.google.com/~r/thedrunkenepicarticles/~3/1WRW8WVsh4Y/</link>
      <pubDate>Fri, 10 Oct 2008 00:34:00 GMT</pubDate>
      <guid isPermaLink="false">http://www.thedrunkenepic.com/home/articles/free-stuff-at-flipsquare-again/</guid>
      <description>&lt;p&gt;My partners and I decided that it was best to open up free listings again at &lt;a href="http://www.flipsquare.com"&gt;FlipSquare&lt;/a&gt;, so I went ahead and did just that. You can read more about it &lt;a href="http://www.flipsquare.com/blog/entries/credit-purchasing-gets-facelift-among-other-thing/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At the moment, everybody has too little time on their hands to devote to the project. I'm ready to go, but as the sole developer I think I've done my part for the moment. I'll continue to passively market the system, but until the entire team is ready to throw in a few hours a week, listings will be kept absolutely free.&lt;/p&gt;

&lt;p&gt;This is good for a number of reasons. The biggest two all being that we need more exposure and we need to iron out any possible issues before people start going nuts and posting their stuff.&lt;/p&gt;

&lt;p&gt;We'll get more people now because everybody loves free shit and the more people we have, the more issues we'll become aware of. The more issues, we know of, the more fine-tuned FlipSquare will become. Once the system is rock solid - and it's pretty close as is - we'll start with our sister sites.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.adultflip.com"&gt;Adult Flip&lt;/a&gt; here I come!!!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/thedrunkenepicarticles/~4/1WRW8WVsh4Y" height="1" width="1"/&gt;</description>
    <feedburner:origLink>http://www.thedrunkenepic.com/home/articles/free-stuff-at-flipsquare-again/</feedburner:origLink></item>
  </channel>
</rss>
