<?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://syndication.thedailywtf.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0">
	<channel>
		<title>The Daily WTF</title> 
		<link>http://thedailywtf.com/</link> 
		<description>Curious Perversions in Information Technology</description> 

		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://syndication.thedailywtf.com/TheDailyWtf" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="thedailywtf" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>41.36995</geo:lat><geo:long>-81.862591</geo:long><item>
			<author>Alex Papadimoulis</author> 
			<title>CodeSOD: Should Be Enough</title> 
			<link>http://thedailywtf.com/Articles/Should-Be-Enough.aspx</link> 
			<category>CodeSOD</category>
			<pubDate>Mon, 15 Mar 2010 13:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6807</guid> 
			<description>&lt;p&gt;&amp;ldquo;It seems every other week,&amp;rdquo; Samuel writes, &amp;ldquo;there&amp;rsquo;s a story about outsourcing gone bad. Maybe we&amp;rsquo;ve been lucky, but for the past decade or so, we simply couldn&amp;rsquo;t have survived without our friendly team of offsite developers.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;You see, I work for a manufacturing company, and our main campus is located a good half-hour away from the &lt;em&gt;outskirts&lt;/em&gt; of a suburb of a sparsely populated Midwestern city. Every business in town &amp;ndash; from the dry cleaners to the restaurants &amp;ndash; is owned or subsidized by the company. Just about every resident works, worked, or will work for the company. &amp;rdquo;&lt;/p&gt;
&lt;p&gt;Samuel continues, &amp;ldquo;now as charming as it all is, it&amp;rsquo;s all but impossible to recruit local software developers, and convincing &amp;lsquo;city folk&amp;rsquo; to relocate is never easy. In ten years, I was apparently the only one crazy enough to move back after discovering all the wonderful things that suburban- or urban-living offered. Hence, all the outsourcing.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Unfortunately,&amp;rdquo; he added, &amp;ldquo;outsourcing had gotten a bad rap lately, and the powers that be decided to bring everything in house. The job of hiring a development team was left to me. As &amp;lsquo;interesting&amp;rsquo; as the hiring process was, I thought I&amp;rsquo;d be best to share a tidbit from the now day-to-day life.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The task was relatively simple, but since it involved some file operations (downloading, processing, and then deleting files from a vendor), I assigned it to my strongest developer. This is what he came up with for the deleting files part.&amp;rdquo;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
DirectoryInfo dir = new DirectoryInfo(pathToDelete);

// subDirs
DirectoryInfo[] subDirs = dir.GetDirectories();
foreach(DirectoryInfo subDir in subDirs)
{
  // subSubDirs
  DirectoryInfo[] subSubDirs = subDir.GetDirectories();
  foreach(DirectoryInfo subSubDir in subSubDirs)
  {
    // subSubSubDirs
    DirectoryInfo[] subSubSubDirs = subSubDir.GetDirectories();
    foreach(DirectoryInfo subSubSubDir in subSubSubDirs)
    {
      // subSubSubSubDirs
      DirectoryInfo[] subSubSubSubDirs = subSubSubDir.GetDirectories();
      foreach(DirectoryInfo subSubSubSubDir in subSubSubSubDirs)
      {
        // ********************************************
        // should be enough; if not, I can add more here
        // ********************************************
      }

      // files
      FileInfo[] subSubSubFiles = subSubSubDir.GetFiles();
      foreach(FileInfo subSubSubFile in subSubSubFiles)
      {
        subSubSubFile.Delete();
      }

    }

    // files
    FileInfo[] subSubFiles = subSubDir.GetFiles();
    foreach(FileInfo subSubFile in subSubFiles)
    {
      subSubFile.Delete();
    }
  }

  // files
  FileInfo[] subFiles = subDir.GetFiles();
  foreach(FileInfo subFile in subFiles)
  {
    subFile.Delete();
  }
}

// files
FileInfo[] files = dir.GetFiles();
foreach(FileInfo file in files)
{
  file.Delete();
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;ldquo;I wish I could say the rest was any better, or that this &lt;em&gt;wasn&amp;rsquo;t&lt;/em&gt; produced by my best coder. But hey, at least I can say it wasn&amp;rsquo;t outsourced!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kOoDlgfNL4Hfym7YH4kRTtqj1Xo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kOoDlgfNL4Hfym7YH4kRTtqj1Xo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kOoDlgfNL4Hfym7YH4kRTtqj1Xo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kOoDlgfNL4Hfym7YH4kRTtqj1Xo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=8b2sD75tJME:KJm1WCLqoBY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/8b2sD75tJME" height="1" width="1"/&gt;</description> 
			<slash:comments>168</slash:comments> 
			<comments>http://thedailywtf.com/Comments/Should-Be-Enough.aspx</comments>
		</item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>Error'd: Nobulation Fail</title> 
			<link>http://thedailywtf.com/Articles/Nobulation-Fail.aspx</link> 
			<category>Error'd</category>
			<pubDate>Fri, 12 Mar 2010 14:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6805</guid> 
			<description>&lt;p&gt;&lt;a name="Pic5"&gt;&lt;/a&gt;&amp;quot;Working in IT, I see lots of error messages,&amp;quot; writes &lt;b&gt;Eric&lt;/b&gt;, &amp;quot;this one, however, was unique. Apparently the computer didn't nobulate quite right...&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#Pic5"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201003/errord/photo.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="Pic1"&gt;&lt;/a&gt;&lt;b&gt;Jamie S&lt;/b&gt; got this while installing the Hudson.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#Pic1"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201003/errord/hudson_install.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="Pic2"&gt;&lt;/a&gt;&amp;quot;Not sure if they sacked IT Support to cover MP's expenses,&amp;quot; &lt;b&gt;Mike Davies&lt;/b&gt; writes, &amp;quot;so... is that warn or chilly?&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#Pic2"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201003/errord/IMAG0061.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="Pic3"&gt;&lt;/a&gt;&amp;quot;I found this scrolling across a register at a Starbucks,&amp;quot; &lt;b&gt;Craig&lt;/b&gt; writes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#Pic3"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201003/errord/IMG00053-20091117-1412.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="Pic4"&gt;&lt;/a&gt;&amp;quot;It looks like the rangers in Volcanoes National Park left their trivia on the old road somewhere,&amp;quot; &lt;b&gt;Rob&lt;/b&gt; wrote.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#Pic4"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201003/errord/IMG_1371.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPic1"&gt;&lt;/a&gt;&amp;quot;Too many choices?&amp;quot; &lt;b&gt;Craig&lt;/b&gt; wonders, &amp;quot;then again, can you really ever have too many choices?&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPic1"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201003/errord/thank%20you%20please.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPic2"&gt;&lt;/a&gt;&amp;quot;I found this monitor on Amazon,&amp;quot; writes &lt;b&gt;David Elder&lt;/b&gt;, &amp;quot;not quite sure how good of a touch-screen it is, though.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPic2"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201003/errord/touchscreen.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPic3"&gt;&lt;/a&gt;&amp;quot;I was filling form AR-11 on the US Citizen and Immigration Services website, and then went to submit it,&amp;quot; &lt;b&gt;Adarsha&lt;/b&gt; writes, &amp;quot;it came back with this request, which was somewhat hard to answer. I hit submit anyway, but then got an error saying 'Null is required'.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPic3"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201003/errord/USCIS.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPic4"&gt;&lt;/a&gt;&amp;quot;I was adding XML comments to my .NET 3.5 project when Visual Studio 2008 gave me this error,&amp;quot; &lt;b&gt;Matt &amp;quot;Frito&amp;quot; Alline&lt;/b&gt; wrote, &amp;quot;I tried to fix the error by getting everyone to switch over to C#, but that didn't fly with management.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPic4"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201003/errord/vb_wtf.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPic5"&gt;&lt;/a&gt;&amp;quot;Quite the Zen error message here,&amp;quot; &lt;b&gt;George S&lt;/b&gt; writes, &amp;quot;but hey, at least there was an emoticon on the error message!&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPic5"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201003/errord/ZenErrorMessage.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5SkH1NBxGGbart9J6MvpG5rthds/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5SkH1NBxGGbart9J6MvpG5rthds/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5SkH1NBxGGbart9J6MvpG5rthds/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5SkH1NBxGGbart9J6MvpG5rthds/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=WNxSlbaYVSY:VSfxUJh2MtE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/WNxSlbaYVSY" height="1" width="1"/&gt;</description> 
			<slash:comments>107</slash:comments> 
			<comments>http://thedailywtf.com/Comments/Nobulation-Fail.aspx</comments>
		</item>
	
		<item>
			<author>Lorne Kates</author> 
			<title>A More Permanent Join</title> 
			<link>http://thedailywtf.com/Articles/A-More-Permanent-Join.aspx</link> 
			<category>Feature Articles</category>
			<pubDate>Thu, 11 Mar 2010 14:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6799</guid> 
			<description>&lt;p&gt;&amp;quot;Half the world's IT people hate our company's guts,&amp;quot; &lt;strong&gt;Aaron &lt;/strong&gt;told the HR lady. &amp;quot;For once, can we hire someone from the other half?&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;The last round of consultants didn't hate us,&amp;quot; she replied.&lt;/p&gt;
&lt;p&gt;&amp;quot;Unbridled hatred is the only reason to inflict Crystal Reports on someone.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;There may have been a few bugs, but your team ironed them out.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;If by &lt;em&gt;'ironed out',&lt;/em&gt; you must mean '&lt;em&gt;hacked in a usable suite of reports&lt;/em&gt;', then yes. But maintenance is taking up too much project time. We need a full-timer to take on some of the workload.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;I'll have the usual placement firm send you a contractor,&amp;quot; she said.&lt;/p&gt;
&lt;p&gt;&amp;quot;Could I have someone competent instead?&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;I can't approve a new full-time position,&amp;quot; she stated. &amp;quot;We just made the Fortune 100 this quarter. We have to take steps to maintain our position.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;By not writing checks?&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;By being prudent. Why should we pay a salary when a contract will suffice?&amp;quot;&lt;/p&gt;
&lt;p&gt;Aaron frowned deeply. &amp;quot;Because in both cases, we'll get exactly what we pay for.&amp;quot;&lt;/p&gt;
&lt;h3 style="margin-bottom: 0px;"&gt;Join the Team&lt;/h3&gt;
&lt;p style="margin-top: 0px;"&gt;Aaron asked for a specialist. HR requested a &lt;em&gt;'guru'&lt;/em&gt;. The placement firm sent Stan, a smiling cotton-swab wrapped in plaid.&lt;/p&gt;
&lt;p&gt;They spent some time going over the details of the system. Stan nodded happily, and jotted down three lines of notes.&lt;/p&gt;
&lt;p&gt;Aaron checked in on Stan on hour six of his two hour introduction project-- politely ignoring the stack of printouts from the &lt;u&gt;'Intro to SQL'&lt;/u&gt; website on the guru's desk.&lt;/p&gt;
&lt;p&gt;&amp;quot;I'm having problems setting up the connection in Crystal Reports,&amp;quot; Stan said with a smile.&lt;/p&gt;
&lt;p&gt;&amp;quot;The QA reports already have the connection settings,&amp;quot; Aaron explained-- again. &amp;quot;Just copy one and use it as a template.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;Alrighty,&amp;quot; Stan grinned, and resumed pecking at the keyboard.&lt;/p&gt;
&lt;p&gt;As Aaron headed out at the end of the day, Stan flagged him down.&lt;/p&gt;
&lt;p&gt;&amp;quot;It's working,&amp;quot; Stan beamed, swiveling around the monitor to show off his accomplishment.&lt;/p&gt;
&lt;p&gt;The layouts looked right, and selecting various date ranges seemed to pull up the right data. Aaron nodded. It wasn't bad, except&amp;hellip;&lt;/p&gt;
&lt;p&gt;&amp;quot;StatusID is an INT,&amp;quot; he mused, pointing out the column. &amp;quot;I'd like to see the actual status text rather than the enumeration number. You can join to the transaction_status table for that.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;Ok,&amp;quot; Stan chirped. &amp;quot;I'll stay late and finish that for you.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;Sounds good,&amp;quot; Aaron said, appreciating the work ethic. &amp;nbsp;&lt;/p&gt;
&lt;h3 style="margin-bottom: 0px;"&gt;Altered States&lt;/h3&gt;
&lt;p style="margin-top: 0px;"&gt;&amp;quot;It works, see?&amp;quot; Stan grinned, intercepting Aaron on his way to his desk the next morning.&lt;/p&gt;
&lt;p&gt;Sure enough, the report displayed the correct text in the Status field. Aaron conceded that Stan might work out after all.&lt;/p&gt;
&lt;p&gt;His optimism was quickly annihilated by the deluge of alerts and errors clogging his inbox.&lt;/p&gt;
&lt;p&gt;All of QA's automated data-collection and synchronization processes had failed overnight. They were all throwing variations of the same error; &lt;em&gt;invalid type.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Improperly-typed data occasionally snuck into the data processing queue, but not as catastrophically as this. Plus, if there was a data error-- how had Stan's report worked?&lt;/p&gt;
&lt;p&gt;Either every batch process had a fluke error, or&amp;hellip;&lt;/p&gt;
&lt;p&gt;&amp;quot;Does Crystal Reports do type checking?&amp;quot; Aaron asked his co-worker, using Occam's Razor to pick her brain.&lt;/p&gt;
&lt;p&gt;&amp;quot;No.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Crap.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;He filtered for Stan's queries in yesterday's logs. At 5:36pm, just before the errors started, he saw:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
ALTER TABLE transactions ALTER COLUMN StatusID nvarchar(2000);
UPDATE transactions SET StatusID = 'Disabled' WHERE status = '1';
UPDATE transactions SET StatusID = 'Enabled' WHERE status = '2';
UPDATE transactions SET StatusID = 'On Hold' WHERE status = '3';
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;And so forth, for each of the 50 status values.&lt;/p&gt;
&lt;p&gt;While the database recovery scripts ran, Aaron typed up an incident report, and walked it over to HR.&lt;/p&gt;
&lt;h3 style="margin-bottom: 0px;"&gt;Dropped and Created&lt;/h3&gt;
&lt;p style="margin-top: 0px;"&gt;&amp;quot;I'm sorry I let you down,&amp;quot; Stan frowned, morosely packing his desk.&lt;/p&gt;
&lt;p&gt;&amp;quot;Actually,&amp;quot; Aaron replied with a grin, &amp;quot;You were a huge help.&amp;quot;&lt;/p&gt;
&lt;p&gt;Indeed, the sizable early-termination fee Stan's firm demanded had made HR reevaluate the fiscal benefits of gurus.&lt;/p&gt;
&lt;p&gt;That, and now Aaron had an excellent technical competency question for those applying to the newly approved full-time position.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/z_dBavRY2QE_jAdm5alDjpwV2sA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/z_dBavRY2QE_jAdm5alDjpwV2sA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/z_dBavRY2QE_jAdm5alDjpwV2sA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/z_dBavRY2QE_jAdm5alDjpwV2sA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=74-cQSQy6Cg:2FDKScerfkU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/74-cQSQy6Cg" height="1" width="1"/&gt;</description> 
			<slash:comments>137</slash:comments> 
			<comments>http://thedailywtf.com/Comments/A-More-Permanent-Join.aspx</comments>
		</item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>Coded Smorgasbord: In A Rush, Properly Handled, and More</title> 
			<link>http://thedailywtf.com/Articles/In-A-Rush,-Properly-Handled,-and-More.aspx</link> 
			<category>Coded Smorgasbord</category>
			<pubDate>Wed, 10 Mar 2010 14:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6801</guid> 
			<description>&lt;p&gt;&amp;quot;This code was left by the Senior Software Consultant,&amp;quot; &lt;b&gt;Michael Wheeler&lt;/b&gt; writes, &amp;quot;I'm not sure if it's insurance against 'Return' not returning... or a comment that explained why the line of code was left in.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
Public Shared Function GetItemFromValue(ByVal ddlControl As DropDownList) As Integer
    Dim i As Integer
    If ddlControl.Items.Count &amp;gt; 0 Then
        For i = 0 To ddlControl.Items.Count - 1
            If ddlControl.Items(i).Selected() Then
                Return i
                Exit For     'leaving this here cause we're in a rush
            End If
        Next
    End If
End Function
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;quot;We're aparantly pretty serious about 'properly' handling exceptions,&amp;quot; writes &lt;b&gt;Rami&lt;/b&gt;, &amp;quot;very, very serious.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
public bool Receive( string FilePath )
{
    try
    {
        return true;
    }
    catch( Exception e )
    {
        ExceptionManager.Publish( e, Priorities.High );
        return false;
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;quot;A nice example of ahead planning,&amp;quot; &lt;b&gt;Robert&lt;/b&gt; writes, &amp;quot;just in case the Earth's mass dramatically changes overnight, we are prepared for a fast, system-wide adjustment.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
Public Function Newton()
    Newton = 9.81
End Function&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;quot;Some developers use JavaScript for validation, others use server-side code,&amp;quot; &lt;b&gt;Rio&lt;/b&gt; writes, &amp;quot;we, on the other hand, seem to use comments. It doesn't really validate anything, but hey, it's good.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
If fromDate &amp;lt; toDate Then
   'it's good.
Else
   'it's not good.
End If&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;quot;I was going through some obscure code from the developers before me, and something caught my eye,&amp;quot; &lt;b&gt;Philippe&lt;/b&gt; wrote. &amp;quot;It was a class whose task was to transform data, and this is how it was instantiated.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
Transformer optimusPrime = new Transformer();&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;quot;Gee thanks,&amp;quot; &lt;b&gt;Tobias N. Sasse&lt;/b&gt; writes, &amp;quot;that's helpful!&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
public long getLength() {
  return 1000000;  // no clue
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;quot;I tried to put some italic tags around a bit of text today,&amp;quot; writes &lt;b&gt;Derek&lt;/b&gt;, &amp;quot;but somehow, it emboldened my text. I did some digging, and I found that our front-end developer has this in our CSS stylesheet.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
i { color: #000; font-weight: bold; font-style: normal; }&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;quot;I guess the comment header is right,&amp;quot; &lt;b&gt;Brian M&lt;/b&gt; writes, &amp;quot;no po box for you!&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
//*******************
//**
//** Function   - POBox
//** Purpose    - no po box
//**
//*******************
 
function POBox(eobj, eid) 
{

	return (true);
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;quot;So that's how you DeUnicode stuff&amp;quot; &lt;b&gt;David Nguyen&lt;/b&gt; wrote, &amp;quot;and here I thought it involved a bit more than removing an italics tag.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
function DeUnicode($_input){
  //added to strip out italics tag &amp;lt;i&amp;gt; from name
  $_input = str_replace('&amp;lt;i&amp;gt;', '', $_input);
  $_input = str_replace('&amp;lt;/i&amp;gt;', '', $_input);
  return $_input;
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PTAOQ_1vjreFBlCuNwzHneh4TxQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PTAOQ_1vjreFBlCuNwzHneh4TxQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PTAOQ_1vjreFBlCuNwzHneh4TxQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PTAOQ_1vjreFBlCuNwzHneh4TxQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=6whDIp4UeSE:M_iwv1VVo7k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/6whDIp4UeSE" height="1" width="1"/&gt;</description> 
			<slash:comments>158</slash:comments> 
			<comments>http://thedailywtf.com/Comments/In-A-Rush,-Properly-Handled,-and-More.aspx</comments>
		</item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>The Single Sign On</title> 
			<link>http://thedailywtf.com/Articles/The-Single-Sign-On.aspx</link> 
			<category>Feature Articles</category>
			<pubDate>Tue, 09 Mar 2010 15:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6800</guid> 
			<description>&lt;p&gt;&amp;ldquo;It&amp;rsquo;s impossible,&amp;rdquo; &lt;b&gt;Gerald&lt;/b&gt; said in a matter-of-fact tone, &amp;ldquo;simply impossible.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Now just so we&amp;rsquo;re clear,&amp;rdquo; Craig responded, &amp;ldquo;by &amp;lsquo;impossible&amp;rsquo;, you actually mean &amp;lsquo;a big pain in the ass&amp;rsquo;, but you&amp;rsquo;re a smart guy who can make it happen, right?&amp;rdquo; That drew a few chuckles from the handful of other coworkers who joined them in the conference room, but Gerald just sighed. &amp;ldquo;No, Craig, by impossible, I mean impossible. Not doable. Can&amp;rsquo;t be done. Im-poss-i-ble. Well I mean, unless you can somehow change the underlying structure of the way everyone communicates on the Internet.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;But we don&amp;rsquo;t need to change it for everyone,&amp;rdquo; Craig jumped in, &amp;ldquo;just one client. Surely, you can do that!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The situation at hand was not an uncommon one. Craig, one of the company&amp;rsquo;s top producing sales reps, had once again sold a client on a feature they did not have. He certainly didn&amp;rsquo;t lie about having the feature, but instead proposed an offer the client couldn&amp;rsquo;t refuse: if you buy it, we&amp;rsquo;ll build it.&lt;/p&gt;
&lt;p&gt;Management, not being the type to turn down booked sales, couldn&amp;rsquo;t refuse the offer either. And thus, they sided with Craig on what &amp;lsquo;impossible&amp;rsquo; actually meant. They also assigned Gerald and team to develop the much-needed feature: an IP-based authentication system that would allow users of their Software-as-a-Service product to access the system without ever needing to log in.&lt;/p&gt;
&lt;p&gt;Gerald&amp;rsquo;s main objection with IP authentication was that the majority of users &amp;ndash; and in fact, all of the users at the client site &amp;ndash; were behind a router. Though they&amp;rsquo;d certainly each have an internal IP address assigned, they would all share the same public IP, making one computer indistinguishable from the next.&lt;/p&gt;
&lt;p&gt;To make matters even more tricky, their application was used by hospitals to track certain kinds of patient data, which meant that HIPAA &amp;ndash; the regulatory framework that defines how patient data must be stored and accessed &amp;ndash; needed to be followed. And not just followed, but followed, tested, certified, re-certified, and double-tested. Any change to the HIPAA-related functions &amp;ndash; authorization included &amp;ndash; would need to go through a painful internal and external QA process.&lt;/p&gt;
&lt;p&gt;Given the &lt;em&gt;impossibility&lt;/em&gt; of getting the end-users internal IP address from the outside, Gerald figured that using cookies would be the next best thing. Have the user log-in once, and then store an authentication cookie on the computer for as long as possible. Sure, that meant clearing cookies would trigger a new login, but it seemed to be a fair and easy work-around. Well, not so much: the client vehemently rejected the idea, saying that their employees couldn&amp;rsquo;t be bothered with having to remember yet another login, even if only temporarily.&lt;/p&gt;
&lt;p&gt;After going back to the drawing board, Gerald came up with another idea: configure the firewall proxy server on the client&amp;rsquo;s side to add a custom HTTP header (X-Forwarded-For) that included the original IP address. That idea went over just about as well: HTTP headers could be forged, and a malicious employee inside of the company could hack in too easily.&lt;/p&gt;
&lt;p&gt;Gerald&amp;rsquo;s third proposal to the client involved a site-to-site VPN connection. The application server would be exposed access via the client&amp;rsquo;s internal network, which would not only allow them to use IP authentication, but Windows-integrated authentication as well. It was his best idea yet, and made things that much easier, as the client would be able to configure which username has access instead of which IP address. Unfortunately, the IT folks at the client weren&amp;rsquo;t a big fan of the approach, as &amp;ldquo;a VPN connection is inherently insecure.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;At wits end, Gerald came up with yet another idea: a &amp;ldquo;Single Sign On&amp;rdquo; approach of sorts. When the end-user would access their application, the system would look for an &amp;ldquo;authentication ticket&amp;rdquo; cookie. When not present, the user would be redirected to another server &amp;ndash; which lived inside the network &amp;ndash; whose sole purpose was to generate a secure authentication ticket that included the private IP address. The ticketing server would then redirect to hosted application, which would then verify the authenticity of the ticket and give the user access.&lt;/p&gt;
&lt;p&gt;The client absolutely loved the idea. &amp;ldquo;This is exactly what we&amp;rsquo;re looking for,&amp;rdquo; the client&amp;rsquo;s project manager said, &amp;ldquo;no need to remember logins, plus solid security.&amp;rdquo; The sales contract was signed, and the project was officially a go.&lt;/p&gt;
&lt;p&gt;And finally, three months later, the new feature was finished. It took three solid weeks of development time, two weeks of QA testing, several thousand dollars in new hardware, and tens of thousands of dollars for an external HIPAA assessment, but the sales rep and the client&amp;rsquo;s project manager said it&amp;rsquo;d be worth it: no more remembering logins. Now, all that was needed for implementation was a list of IP addresses that were allowed to use the computer.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Hi Gerald,&amp;rdquo; the client&amp;rsquo;s project manager wrote in an email, &amp;ldquo;please provide the following IP with access to the system: 10.1.23.97.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Gerald confirmed, and reconfirmed: only one user needed access to the system. And apparently, she really hated remembering logins.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tz-qET3tYPjCRyz2UQLMLCGCwC8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tz-qET3tYPjCRyz2UQLMLCGCwC8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/tz-qET3tYPjCRyz2UQLMLCGCwC8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tz-qET3tYPjCRyz2UQLMLCGCwC8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=WToukF_9uJA:2GmzC8jjZTw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/WToukF_9uJA" height="1" width="1"/&gt;</description> 
			<slash:comments>213</slash:comments> 
			<comments>http://thedailywtf.com/Comments/The-Single-Sign-On.aspx</comments>
		</item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>CodeSOD: Unit Tested</title> 
			<link>http://thedailywtf.com/Articles/Unit-Tested.aspx</link> 
			<category>CodeSOD</category>
			<pubDate>Mon, 08 Mar 2010 14:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6798</guid> 
			<description>&lt;p&gt;&amp;ldquo;I was hired as a &amp;lsquo;best practices consultant&amp;rsquo; to help bring a 300-developer company&amp;rsquo;s development practices into the 21st century,&amp;rdquo; wrote Ian, &amp;ldquo;and after six months, I had failed.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Our first objective was to introduce automated unit testing. They had all sorts of horribly interconnected code, and the tests would help reduce the fix-here/break-there problems. However, after many, many tutorial sessions with developers, and quite a few long meetings spent trying to convince them of the benefits, no tests emerged. The developers stubbornly held that testers should test code, not them.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Ian continued, &amp;ldquo;Adding some teeth to our policies, we set-up a continuous integration server that emailed everyone reports of unit test code coverage. This way, managers could take responsibility for getting their teams to write unit tests. That seemed to do the trick: the number of unit tests and code coverage started to steadily climb on all projects.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;I finally felt that all my efforts were worthwhile,&amp;rdquo; he added, &amp;ldquo;the overall health of the team&amp;rsquo;s code would now increase immeasurably. Less bugs, less time manual testing, and all that good stuff. And then I started to look at the unit test code.&amp;rdquo;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
public class StaticDataRequestTest {

    @Test
    public void startClientReqest() {

        try {
            new StaticDataRequest().onData(null);
            assertEquals(
                &amp;quot; processing client static data request  &amp;quot;,
                true, 
                true);
        } catch (Exception ex) {
            assertEquals(
                &amp;quot; processing client static data request  &amp;quot;,
                true, 
                true);
        }
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ian added, &amp;ldquo;I guess we got what we asked for.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LwU-esnQr1AFYcuGteFUbIEUqFc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LwU-esnQr1AFYcuGteFUbIEUqFc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LwU-esnQr1AFYcuGteFUbIEUqFc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LwU-esnQr1AFYcuGteFUbIEUqFc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=XMfCjPgw7_w:Fl24aImnInY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/XMfCjPgw7_w" height="1" width="1"/&gt;</description> 
			<slash:comments>137</slash:comments> 
			<comments>http://thedailywtf.com/Comments/Unit-Tested.aspx</comments>
		</item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>Error'd: Verified By Fail</title> 
			<link>http://thedailywtf.com/Articles/Verified-By-Fail.aspx</link> 
			<category>Error'd</category>
			<pubDate>Fri, 05 Mar 2010 14:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6797</guid> 
			<description>&lt;p&gt;&lt;a name="PPic4"&gt;&lt;/a&gt;&amp;quot;I've heard about verified by Visa, but this is something new,&amp;quot; writes &lt;b&gt;Velmu&lt;/b&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPic4"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/errord/verified_by_fail.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="Pic1"&gt;&lt;/a&gt;&amp;quot;Well then,&amp;quot; &lt;b&gt;Simon Timms&lt;/b&gt; wrote, &amp;quot;it might take some time to fill in all those arguments.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#Pic1"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/errord/arguments.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="Pic2"&gt;&lt;/a&gt;&amp;quot;I guess a 25% price increase is a good reason to be wowed,&amp;quot; &lt;b&gt;Steve Frein&lt;/b&gt; writes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#Pic2"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/errord/black_canyon_wow.jpeg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="Pic3"&gt;&lt;/a&gt;&amp;quot;I was recording some drums with my keyboard, and all of a sudden this came up,&amp;quot; &lt;b&gt;Jonathan Flusser&lt;/b&gt; wrote, &amp;quot;apparently it has to do with the Trash, and it's very hard to do!&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#Pic3"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/errord/circular-structure.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="Pic4"&gt;&lt;/a&gt;&amp;quot;I cancelled my free trial,&amp;quot; notes &lt;b&gt;Frederick Ding&lt;/b&gt;, &amp;quot;but I'd love to be paid $10/month for using 0 MB.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#Pic4"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/errord/dreamhost-free-money-20091108.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="Pic5"&gt;&lt;/a&gt;&amp;quot;I saw this at a pay station in a parking in Barcelona, Spain,&amp;quot; &lt;b&gt;Riccardo Zanussi&lt;/b&gt; writes, &amp;quot;I don't know if I really want to put my credit card in this machine.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#Pic5"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/errord/IMAG0195.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPic1"&gt;&lt;/a&gt;&amp;quot;I found this in a book about iPhone programming,&amp;quot; writes &lt;b&gt;Mike Kerley&lt;/b&gt;, &amp;quot;the rest of the book seems to have received an equal amount of attention to detail.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPic1"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/errord/IMG_0987.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPic2"&gt;&lt;/a&gt;&amp;quot;At first I thought this was just another way to ask me to enter 1,&amp;quot; &lt;b&gt;Nick S. W.&lt;/b&gt; noted, &amp;quot;but then it popped up when I entered 1. Is there another integer I'm forgetting about?&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPic2"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/errord/OhSillyVeritas.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPic3"&gt;&lt;/a&gt;&lt;b&gt;Ryan Schlesinger&lt;/b&gt; writes, &amp;quot;I went looking for information about the iPhone release for Telus and found this instead.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPic3"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/errord/telus-fail.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPic5"&gt;&lt;/a&gt;&amp;quot;This left me in a bit of a quandary,&amp;quot; wrote &lt;b&gt;Dominic&lt;/b&gt;, &amp;quot;to install, or not to install?&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPic5"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/errord/vpnc_daemon.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yF0cNPsPxMwcm38VnkEP7UzGQ8A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yF0cNPsPxMwcm38VnkEP7UzGQ8A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yF0cNPsPxMwcm38VnkEP7UzGQ8A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yF0cNPsPxMwcm38VnkEP7UzGQ8A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=KbmOIN00Xz8:Lnvl0phM0Ec:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/KbmOIN00Xz8" height="1" width="1"/&gt;</description> 
			<slash:comments>78</slash:comments> 
			<comments>http://thedailywtf.com/Comments/Verified-By-Fail.aspx</comments>
		</item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>More Best of the EmaiL</title> 
			<link>http://thedailywtf.com/Articles/More-Best-of-the-EmaiL.aspx</link> 
			<category>Feature Articles</category>
			<pubDate>Thu, 04 Mar 2010 14:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6796</guid> 
			<description>&lt;p&gt;It's time once again for &lt;em&gt;Share Your Bizarre Email&lt;/em&gt; day! &lt;a href="http://thedailywtf.com/contact.aspx"&gt;mail in&lt;/a&gt; or post your favorite emails in the comments. Here's three to get started...&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&amp;quot;My company takes safety very seriously,&amp;quot; &lt;b&gt;Adam&lt;/b&gt; wrote, &amp;quot;and here is a partially illustrative message. What's especially funny about it is that we receive examples and protips like this on a routine basis.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
Colleagues,

While on travel last week a member of our staff got up at 3AM to go to the
bathroom. He tripped over a chair and fell into a coffee table, hitting
his head. He suffered a significant head injury and blood loss. He was
taken by ambulance to a local hospital emergency room. He had surgery at
the hospital at his travel site last Thursday. He came home Friday.
Sutures were removed Monday and he is due back to work tomorrow. He is
doing well and in fine spirits.

He and we have done a root cause analysis and make the following
recommendation to travelers: before retiring for the night review the
path to the bathroom in new hotel rooms and move any tripping hazards, if
possible. Further, consider leaving a light on in the bathroom with the
door slightly open or packing a portable night light in travel gear to use
in your hotel room.

Evin L-------
Safety Directory&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;quot;I work for a firm that is all about getting the most from their employees,&amp;quot; &lt;b&gt;Dan&lt;/b&gt; wrote.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
Hi Dan,

You are correct. There is a discrepancy between the vacation time 
(2 weeks / 80 hours) and the newly-instituted 45-hour workweeks. 
At this time, we are not planning on increasing employee vacation 
benefits, so in order to meet the 45-hour requirement, you will 
need to either:

(a) use an hour from your sick/personal time for each vacation day

(b) work an additional hour for each vacation day

Note that, if you chose to work the extra hour, it must done 
within the same two-week pay period. Also, keep in mind that this 
policy will apply to company holidays as well.

Thank you,

Amber J------------
HR Generalist&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;quot;This email was sent by one of the company directors,&amp;quot; wrote &lt;b&gt;Brett M&lt;/b&gt;, &amp;quot;we have a good 300 employees, with 100 or more in IT.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
Hi All, 

Yesterday there was a flood which luckily only damaged some ceiling
tiles in the downstairs loos and messed up the wall paint. It could 
potentially have damaged expensive computer equipment and the systems
our business relies on. 

The flood (of clean water from cistern) happened due to a blocked 
toilet so please follow these simple instructions  to avoid it 
happening again. 

1/ From time to time we all need to use a lot of toilet paper. On 
these occaisions use a little paper then flush, then use some more 
and flush. This can be repeated as many times as you need.  

2/ Do not flush anything apart from toilet paper (a little at a 
time) or something which has been eaten first. 

For those considering asking 'how much is a little paper', lets call 
it 12 sheets. 

Any further queries, don't hesitate to ask. 

Gerald F. ---------
Director (VP)
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;quot;At just about any office,&amp;quot; writes &lt;b&gt;Hansel Johnson&lt;/b&gt;, &amp;quot;there are some coworkers that you certainly wouldn't mind seeing nude, and subset of those who you certainly wouldn't mind seeing bouncing while nude.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
From: Debbie A----
Sent: Wednesday, April 08, 2009 8:51 AM
To: IT_OPS
Subject: Bouncing New Dev in 5 Minutes
 
Please be advised- I will be bouncing Nude in 5 
minutes.   Please let me know if this presents an 
issue.&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;quot;I'm sure many in the office would rush to find a trampoline and some lawnchairs, and you can imagine their disappointment upon receiving the following email not more than a minute later...&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
From: Debbie A----
Sent: Wednesday, April 08, 2009 8:52 AM
To: IT_OPS
Subject: RE: Bouncing New Dev in 5 Minutes
 
My apologies- Spell Check got me on this one-
 
&amp;ldquo;I will be bouncing NewDev in 5 minutes!&amp;rdquo;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ub2C9J9Qo1cB8-3Ii2XoPRUBH3Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ub2C9J9Qo1cB8-3Ii2XoPRUBH3Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ub2C9J9Qo1cB8-3Ii2XoPRUBH3Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ub2C9J9Qo1cB8-3Ii2XoPRUBH3Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=xzaok9OTon4:9TTKp15TFHg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/xzaok9OTon4" height="1" width="1"/&gt;</description> 
			<slash:comments>333</slash:comments> 
			<comments>http://thedailywtf.com/Comments/More-Best-of-the-EmaiL.aspx</comments>
		</item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>CodeSOD: October Road</title> 
			<link>http://thedailywtf.com/Articles/October-Road.aspx</link> 
			<category>CodeSOD</category>
			<pubDate>Wed, 03 Mar 2010 14:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6795</guid> 
			<description>&lt;p&gt;&amp;ldquo;Our codebase is a bit... backwards, to say the least,&amp;rdquo; writes &lt;b&gt;Aaron Silver&lt;/b&gt;, &amp;ldquo;things that should go up don&amp;rsquo;t go up or down... instead, they&amp;rsquo;re painted orange .&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;The postProcessAddress address method is a good example of all of this.&amp;rdquo;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;

string[] months =
{
 &amp;quot;Jan&amp;quot;, &amp;quot;Feb&amp;quot;, &amp;quot;Mar&amp;quot;, 
 &amp;quot;Apr&amp;quot;, &amp;quot;May&amp;quot;, &amp;quot;Jun&amp;quot;, 
 &amp;quot;Jul&amp;quot;, &amp;quot;Aug&amp;quot;, &amp;quot;Sep&amp;quot;, 
 &amp;quot;Oct&amp;quot;, &amp;quot;Nov&amp;quot;, &amp;quot;Dec&amp;quot;
};

if (processingClient.StreetAddress != null
  &amp;amp;&amp;amp; string.IsNullOrEmpty(processingClient.StreetAddress.Line1))
{
  for (String month : months)
  {
  if (processingClient.StreetAddress.Line1 != null
    &amp;amp;&amp;amp; processingClient.StreetAddress.Line1.Contains(month))
  {
    writeError(processingClient,
      errorList,
      &amp;quot;Street address line 1 is in date format (&amp;quot;
        + processingClient.StreetAddress.Line1 + &amp;quot;).&amp;quot;);
  }
  if (processingClient.StreetAddress.Line2 != null
    &amp;amp;&amp;amp; processingClient.StreetAddress.Line2.Contains(month))
  {
    writeError(processingClient,
      errorList,
      &amp;quot;Street address line 2 is in date format (&amp;quot;
        + processingClient.StreetAddress.Line2 + &amp;quot;).&amp;quot;);
  }
  if (processingClient.StreetAddress.Line3 != null
    &amp;amp;&amp;amp; processingClient.StreetAddress.Line3.Contains(month))
  {
    writeError(processingClient,
      errorList,
      &amp;quot;Street address line 3 is in date format (&amp;quot;
        + processingClient.StreetAddress.Line3 + &amp;quot;).&amp;quot;);
  }
  }
}&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;Aaron adds, Aaron adds, &amp;ldquo;I&amp;rsquo;m not exactly sure what thought process lead to this, but the powers that be aren&amp;rsquo;t too keen about changing it, leaving our end users to adding random hyphens and spaces for those unfortunate enough to live on &amp;lsquo;October Road&amp;rsquo;.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ualkT87kMgvmcXfmgy9KpdH-0Z4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ualkT87kMgvmcXfmgy9KpdH-0Z4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ualkT87kMgvmcXfmgy9KpdH-0Z4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ualkT87kMgvmcXfmgy9KpdH-0Z4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=hm1liPrlnaQ:DHJ5rMvI8go:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/hm1liPrlnaQ" height="1" width="1"/&gt;</description> 
			<slash:comments>151</slash:comments> 
			<comments>http://thedailywtf.com/Comments/October-Road.aspx</comments>
		</item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>Alex's Soapbox: Patterns of Failure</title> 
			<link>http://thedailywtf.com/Articles/Patterns-of-Failure.aspx</link> 
			<category>Alex's Soapbox</category>
			<pubDate>Tue, 02 Mar 2010 16:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6794</guid> 
			<description>&lt;p&gt;Not too long ago, I was at a client site, working to understand and improve their development process. From a birds-eye view, their development organization was a lot like many other Corporate IT set-ups: they had a sizable portfolio of proprietary applications that were built for and used by different business groups. Some of these applications were &amp;ldquo;mission critical&amp;rdquo; and had highly formalized promotion and deployment processes, while others were ancillary and were hardly ever used. &amp;lt;shameless_plug&amp;gt;This, along with the medley of technologies and platforms, was why they sought our help in managing and automating their development processes with &lt;a href="http://inedo.com/Landing/BuildMaster/"&gt;BuildMaster&lt;/a&gt;.&amp;lt;/shameless_plug&amp;gt;&lt;/p&gt;
&lt;p&gt;But as I dug deeper, I noticed that a significant portion of their applications weren&amp;rsquo;t applications at all. They were &amp;ndash; for lack of a better word &amp;ndash; &amp;ldquo;modules&amp;rdquo; that glommed together to form an &amp;Uuml;berApplication. Completely unrelated business functions &amp;ndash; paid time-off tracking and customer mailing list management &amp;ndash; lived side-by-side, sharing authorization principals, navigation controls, and even a &amp;ldquo;business workflow engine.&amp;rdquo;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="http://img.thedailywtf.com/images/201002/uberApp.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Digging even further, I learned that most of these module-applications were derived from a &amp;ldquo;one-size-fits-all base application&amp;rdquo; of sorts. For example, the back-end paid time-off system was nothing more than a calendar with a custom UI for manipulating &amp;ldquo;events&amp;rdquo; (i.e. PTO requests). The front-end consisted of simply displaying these events to anxious employees who were gladly counting down the remaining days until a vacation from maintaining this amalgamation of a system. Other module-applications were &amp;ldquo;document managers&amp;rdquo;, &amp;ldquo;news posters&amp;rdquo;, or some other universal sounding name.&lt;/p&gt;
&lt;p&gt;The whole thing may as well have been replaced by a pre-alpha version of Sharepoint or Google Docs. It was as if they had tried to build a skyscraper with &lt;a href="http://www.amazon.com/gp/product/B0001NKSCQ?ie=UTF8&amp;amp;tag=tdw-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B0001NKSCQ"&gt;Erector Sets&lt;/a&gt;. And not &lt;i&gt;real&lt;/i&gt; Erector Sets, but some poorly-made knock-off.&lt;/p&gt;
&lt;p&gt;The developers absolutely hated the &amp;Uuml;berApplication. It took longer to &amp;ldquo;customize&amp;rdquo; a template than to build an application from scratch, it was harder to test and deploy, and they never quite fit the business requirements The architect (who was the second successor since the original architect) &amp;nbsp;despised it as well, and eventually convinced management to ditch it for constructing new applications from scratch.&lt;/p&gt;
&lt;p&gt;Sadly, this was not the first time I&amp;rsquo;ve seen this set-up/architecture. At one of my first jobs, we had something comparable, except much less formalized and much more disorganized. And there are all the examples I&amp;rsquo;ve shared through &lt;em&gt;The Daily WTF, &lt;/em&gt;but this recent experience got me thinking: how exactly do well-intentioned development organizations end up with horrible systems like this?&lt;/p&gt;
&lt;h3 style="margin-bottom: 0px"&gt;I See a Pattern Here&lt;/h3&gt;
&lt;p style="margin-top: 0px"&gt;We human beings are quite remarkable at recognizing patterns. Take clouds, for example. A cloud dog looks nothing like a real dog, yet no matter how hard we try, once we see the dog in the cloud, that&amp;rsquo;s all we can see.&lt;/p&gt;
&lt;blockquote&gt;
&lt;table border="0" cellspacing="10" cellpadding="0"&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;img alt="" src="http://img.thedailywtf.com/images/201002/cloud-dog.jpg" /&gt;&lt;/td&gt;
            &lt;td&gt;&lt;img alt="" src="http://img.thedailywtf.com/images/201002/dog-dog.jpg" /&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;p&gt;While this ability has clear evolutionary advantages, it&amp;rsquo;s often a disservice in today&amp;rsquo;s modern world. Pattern recognition yields many false positives, leading towards &lt;a href="http://thedailywtf.com/articles/knocking-me-off-the-perch.aspx"&gt;Gamblers&amp;rsquo; Fallacy&lt;/a&gt;, prejudice, and can even extend to really poorly-written software.&lt;/p&gt;
&lt;p&gt;Now, recognizing patterns at the micro level (i.e., code) is almost always a Good Thing. Code often &lt;i&gt;does &lt;/i&gt;repeat itself, and consolidating repetitive code into subroutines tends to help throughout development and especially when it comes to maintenance. The real problem &amp;ndash; and the one behind the aforementioned systems &amp;ndash; is recognizing patterns at the macro/application level.&lt;/p&gt;
&lt;h3 style="margin-bottom: 0px"&gt;A Pattern of Failure&lt;/h3&gt;
&lt;p style="margin-top: 0px"&gt;As completely different as Paid Time-Off tracking and Customer Mailing List management may seem on the outside, they do share quite a bit in common.&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Navigation of some kind that links between major and minor functions in the application&lt;/li&gt;
    &lt;li&gt;Authentication and authorization for users of the application&lt;/li&gt;
    &lt;li&gt;Pages/screens that view and/or edit a single record&lt;/li&gt;
    &lt;li&gt;Lists that display multiple records based on some search criteria&lt;/li&gt;
    &lt;li&gt;Et cetera, and so on&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In fact, if we kept going, the list of similarities between applications would grow much larger than the list of differences. But that doesn&amp;rsquo;t mean that they&amp;rsquo;re basically the same thing. Just as our canine friends share an astonishing amount of DNA with us, it&amp;rsquo;s our differences that make us so unique. The same holds true in software, and forgetting that fact will inevitably lead towards the dreaded &lt;a href="http://thedailywtf.com/Articles/The_Inner-Platform_Effect.aspx"&gt;Inner-Platform effect&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is precisely how so many organizations end up with their own &amp;Uuml;berApplication. Consider, for example, that same portfolio of applications I described earlier. At one point, the applications evolved normally: i.e., they were built from scratch following development guidelines to suit the specific needs of the business client. And they looked something like this.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="http://img.thedailywtf.com/images/201002/level0.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It&amp;rsquo;s hard to describe that portfolio as anything but chaotic, let alone accept that it&amp;rsquo;s &lt;em&gt;actually&lt;/em&gt; how things should be. Let me repeat that last bit. &lt;em&gt;A disparate application portfolio is a good thing&lt;/em&gt;. Proprietary software has a high strategic value to the organization, and building it in a manner that doesn&amp;rsquo;t meet the requirements largely defeats the purpose.&lt;/p&gt;
&lt;p&gt;Still, it&amp;rsquo;s so easy &amp;mdash; and so tempting &amp;ndash; to forget that last part. Each new application built felt like reinventing the wheel, especially when they all had some variation of the same components: authentication, authorization, navigation, databases, etc. The rules for each of these applications were vastly different &amp;mdash; a simple password required for one application, Active Directory group-based authorization for another &amp;mdash; yet the designers had that overwhelming urge to abstract and &amp;ldquo;simplify&amp;rdquo; the process of creating new applications. This started at the requirements level by simply mandating that all applications share a universal set of requirements for certain things.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="http://img.thedailywtf.com/images/201002/level1.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The uniformity was found in the UI: the layout must feature a header, a sidebar, and a footer, but the business customer can pick out the background color. It also was in the form layout: labels should be placed above form fields, and lists should always be sortable. And the database: there was to be a users table, groups table, roles table, etc.&lt;/p&gt;
&lt;p&gt;Eventually, the applications started to blend together. Worse, the requirements conversation shifted from &amp;ldquo;how can we build software to meet these needs&amp;rdquo; to &amp;ldquo;how might we adapt the needs to meet our pre-determined requirements.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Once the universal requirements had been defined, the next logical step was to abstract them into some sort of framework. After all, Duplication Is Evil, and it doesn&amp;rsquo;t make sense to re-implement the same User-Group-Principal-Role-Task-Operation security in each and every single application. Now, in addition to being uniformly developed, the applications were all dependent upon yet another in-house built codebase: the Global Application Framework. Granted, the GAF was little more than a wrapper on top of a framework (.NET), but somehow, it was perceived to be better.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" src="http://img.thedailywtf.com/images/201002/level2.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The leap from here to the &amp;Uuml;berApplication wasn&amp;rsquo;t far. After all, application metadata was duplicated across several points: source control, server configuration, global navigation, and so on. Removing these points of duplication, along with consolidating all of the applications in one location, brought us to where we started.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt="" width="250" src="http://img.thedailywtf.com/images/201002/uberApp.png" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 style="margin-bottom: 0px"&gt;Avoiding the Path to Inner Platform&lt;/h3&gt;
&lt;p style="margin-top: 0px"&gt;The &lt;em&gt;Road to WTF&lt;/em&gt; is almost always paved with good intentions, and there are few intentions more noble than making developers&amp;rsquo; lives easier. Of course, given that developers&amp;rsquo; lives are pretty easy as is, and there are a whole bunch of companies who build developer products, it&amp;rsquo;s pretty hard to improve, especially when your development department is just a cog in a large corporate machine. In fact, all too often, the opposite effect happens, and the &amp;ldquo;innovation&amp;rdquo; becomes one of the biggest obstacles.&lt;/p&gt;
&lt;p&gt;Most of us developers embrace the Don&amp;rsquo;t Repeat Yourself/Duplication Is Evil principle, and we apply whenever we can to the software we create. But one of the deadliest pitfalls we can make is waving the wand of abstraction too quickly and too broadly, and we often forget that the consequence of unnecessary duplication is far less than the consequence of unnecessary consolidation.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fJ7cqW6GlEUk-qfxo6QZint6OAU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fJ7cqW6GlEUk-qfxo6QZint6OAU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fJ7cqW6GlEUk-qfxo6QZint6OAU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fJ7cqW6GlEUk-qfxo6QZint6OAU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=va1W9F2DnW4:XpNb7BgivbU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/va1W9F2DnW4" height="1" width="1"/&gt;</description> 
			<slash:comments>102</slash:comments> 
			<comments>http://thedailywtf.com/Comments/Patterns-of-Failure.aspx</comments>
		</item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>CodeSOD: Injection Proof'd</title> 
			<link>http://thedailywtf.com/Articles/Injection-Proofd.aspx</link> 
			<category>CodeSOD</category>
			<pubDate>Mon, 01 Mar 2010 14:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6793</guid> 
			<description>&lt;p&gt;&amp;ldquo;When a &amp;lsquo;customer&amp;rsquo; of ours needs custom-developed software to suit their business requirements,&amp;rdquo; &lt;b&gt;Kelly Adams&lt;/b&gt; writes, &amp;ldquo;they can either &amp;lsquo;buy&amp;rsquo; the development services from the IT department, or go to an outside vendor. In the latter case, then we&amp;rsquo;re supposed to approve that the software meets corporate security guidelines.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Most of the time, our &amp;lsquo;approval&amp;rsquo; is treated as a recommendation, and we end up having to install the application anyway. But recently, they actually listened to us and told the vendor to fix the &amp;lsquo;blatant SQL-injection vulnerabilities&amp;rsquo; that we discovered. A few weeks later, when it came time for our second review, we noticed the following as their &amp;lsquo;fix&amp;rsquo;.&amp;rdquo;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
internal static string FQ(string WhichField)
{
   string expression = &amp;quot;&amp;quot;;
   int num2 = Strings.Len(WhichField);
   for (int i = 1; i &amp;lt;= num2; i++)
   {
      string str = Strings.Mid(WhichField, i, 1);
      if (str == &amp;quot;'&amp;quot;)
      {
         str = str + &amp;quot;'&amp;quot;;
      }
      expression = expression + str;
   }
   return Strings.Trim(
      Strings.Replace(Strings.Replace(Strings.Replace(Strings.Replace(
      Strings.Replace(Strings.Replace(Strings.Replace(Strings.Replace(
      Strings.Replace(Strings.Replace(Strings.Replace(Strings.Replace(
      Strings.Replace(Strings.Replace(Strings.Replace(Strings.Replace(
      Strings.Replace(Strings.Replace(Strings.Replace(Strings.Replace(
      Strings.Replace(Strings.Replace(Strings.Replace(Strings.Replace(
         expression, 
            &amp;quot;xp_&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;sp_&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;--&amp;quot;, &amp;quot;-&amp;quot;, 1, -1, CompareMethod.Binary), 
            &amp;quot;alter table&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;drop table&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;create table&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;create database&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;alter table&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;alter column&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;drop column&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;drop database&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;1=1&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;union select&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;/*&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;*/&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;boot.ini&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;../&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;%27&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;;dir&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;|dir&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;&amp;lt;script&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;&amp;lt;/script&amp;gt;&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;language=javascript&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text), 
            &amp;quot;language=\&amp;quot;javascript\&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, 1, -1, CompareMethod.Text));
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Kelly adds, &amp;ldquo;of course this time, when we told them the application was still vulnerable so long that a hacker typed &amp;lsquo;1 = 1&amp;rsquo; instead of &amp;lsquo;1=1&amp;rsquo;, they told us were beeing too picky, and had us install the application anyway.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rwwawK4Ihn2toK7_zo3GFN9zgws/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rwwawK4Ihn2toK7_zo3GFN9zgws/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rwwawK4Ihn2toK7_zo3GFN9zgws/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rwwawK4Ihn2toK7_zo3GFN9zgws/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=dbuaTEC3b-4:ciRDt8xb53Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/dbuaTEC3b-4" height="1" width="1"/&gt;</description> 
			<slash:comments>160</slash:comments> 
			<comments>http://thedailywtf.com/Comments/Injection-Proofd.aspx</comments>
		</item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>Souvenir Potpourri: Salmiak Attack</title> 
			<link>http://thedailywtf.com/Articles/Souvenir-Potpourri-Salmiak-Attack.aspx</link> 
			<category>Feature Articles</category>
			<pubDate>Fri, 26 Feb 2010 14:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6792</guid> 
			<description>&lt;p&gt;Ever since the &lt;a href="http://thedailywtf.com/Articles/Announcement_0x3a__Free_Sticker_Week!.aspx"&gt;first Free Sticker Week&lt;/a&gt; ended back in February '07, I've been sending out &lt;a href="http://thedailywtf.com/Swag/WTF-Sticker.aspx"&gt;WTF Stickers&lt;/a&gt; to anyone that mailed me a SASE or a small souvenir. More recently, I've been sending out the coveted &lt;a href="http://thedailywtf.com/Articles/Announcement-Get-the-Mug.aspx"&gt;TDWTF Mugs&lt;/a&gt; for truly awesome souvenirs. Nothing specific; per the &lt;a href="http://thedailywtf.com/Swag/WTF-Sticker.aspx"&gt;instructions page&lt;/a&gt;, &amp;quot;anything will do.&amp;quot; Well, here goes anything, yet again! (previous: &lt;a href="http://thedailywtf.com/Articles/Souvenir-Potpourri-Surprise!.aspx"&gt;Surprise!&lt;/a&gt;).&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;a name="Pic1"&gt;&lt;/a&gt;Finland, I surrender.&lt;/p&gt;
&lt;p&gt;Ever since you sent me that &lt;s&gt;vomit-inducing, garbage-infused, ash-like, disgustingly-terrible, and nightmarishly-awful&lt;/s&gt; delightful salmiakki two years ago, I've mocked you, your people, and your food every chance I got. You were an easy target, after all. I mean, there's just something seriously &lt;s&gt;sick, twisted, and demented&lt;/s&gt; awesome about voluntarily subjecting yourself to that &lt;s&gt;&amp;quot;candy&amp;quot; that smells like foamy bathroom cleaner and tastes even worse&lt;/s&gt; delicacy.&lt;/p&gt;
&lt;p&gt;I can't say that I wasn't warned. &amp;quot;Do not anger the Finns,&amp;quot; a Finlandite once told me, &amp;quot;for they have strange ways and a twisted sense of humor!&amp;quot; Well, it's true. Especially when the Finns are named &lt;b&gt;Pekka&lt;/b&gt; and &lt;b&gt;Toni&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;&amp;quot;We remembered how 'disappointed' you were when there was no Salmiak products in a &lt;a href="http://thedailywtf.com/Articles/Souvenir-Potpourri-The-Cookout.aspx#Pic15"&gt;care package from Finland&lt;/a&gt;,&amp;quot; they wrote, &amp;quot;and we decided that we had to undo this injustice that had been inflicted upon you. Thus, we embarked on a quest to gather all Salmiak products available in Finland. After two months spent on this quest, we found about 80 different kinds of this delicacy for you to enjoy.&amp;quot; Now in case you're wondering what my reaction upon receiving so much Salmiak was, it was something like this.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#Pic1"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/souv/IMG_0019.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pekka and Toni continued, &amp;quot;although this is still far from the full assortment available in Finland, we believe this might 'satisfy' you for the time being. Bon app&amp;eacute;tit!&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#Pic2"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/souv/IMG_0035.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Normally, I'd estimate that this amount of Salmiak would last me for a lifetime. Several lifetimes, in fact. Well, &lt;a href="http://en.wikipedia.org/wiki/Stellar_evolution"&gt;stellar lifetimes&lt;/a&gt;. You know, a good 15-30 billion years or so? But I'm going to try something a little different.&lt;/p&gt;
&lt;p&gt;I registered &lt;a href="http://www.salmiyuck.com/"&gt;Salmiyuck.com&lt;/a&gt;, and will chronicle my adventures in tasting Salmiak. I will of course attempt to get as many (unwitting) tasters as possible. So, here's to Salmiak!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="Pic3"&gt;&lt;/a&gt;As if all the Salmiak wasn't enough, &lt;b&gt;Pekka and Toni&lt;/b&gt; (Finland) also enclosed &amp;quot;a hands-free appliance which actually needs to be held in hand to operate.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#Pic3"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/souv/IMG_0045.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="Pic5"&gt;&lt;/a&gt;And finally, our friends from Finland also gave this &amp;quot;Billiardion (or whatever) dollar note from Africa.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#Pic5"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/souv/IMG_0049.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="Pic4"&gt;&lt;/a&gt;&lt;b&gt;Matt Lutton&lt;/b&gt; (Brookline, NH) sent some interesting finds from the past.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#Pic4"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/souv/IMG_0048.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPic1"&gt;&lt;/a&gt;&amp;quot;At the end of 2009,&amp;quot; wrote &lt;b&gt;Andreas Reich&lt;/b&gt; (Hamburg, Germany), &amp;quot;I returned from a summer of travels, and was about to empty the stuff in my pockets in the trash, but then I remembered there was a guy who will happily take all kinds of souvenirs.&amp;quot; This is true, Andreas, especially when the souvenirs are accompanied by a piece of Toblerone. Fun fact: the Holiday Inn key card was completely blank on both sides; no magnetic strip or anything.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPic1"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/souv/IMG_0050.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPic2"&gt;&lt;/a&gt;&amp;quot;Enjoy your status as a new trillionaire,&amp;quot; writes &lt;b&gt;Bryan R&lt;/b&gt; (Sterling, VA).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPic2"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/souv/IMG_0051.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPic3"&gt;&lt;/a&gt;&amp;quot;Here are some random tradeshow stuff,&amp;quot; writes &lt;b&gt;J Schwartz&lt;/b&gt; (Boca Raton, FL), &amp;quot;there is a citrus lip balm tube, some small mints, a USB hub (that may or may not be 2.0), a press-up calculator, a mini flashlight, and a weird pen/calculator object.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPic3"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/souv/IMG_0053.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPic4"&gt;&lt;/a&gt;&amp;quot;Here's some stuff from London,&amp;quot; wrote &lt;b&gt;Martin Deutsch&lt;/b&gt; (London), &amp;quot;including some goodies from the Docklands Light Railway, Custom Haribo from one of our supplies at work, a free lollipop handed out to keep clubbers quiet, and some Ben+JErry's Post-it notes.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPic4"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/souv/IMG_0056.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPic5"&gt;&lt;/a&gt;I'll let &lt;b&gt;Scott Blackard's&lt;/b&gt; (Timerlake, NC) note explain, though I'll add &lt;em&gt;ewwwwwwwwwwwwwwwww&lt;/em&gt;. That is, unless it's really old and not from like a deer or something. Then I should say, &lt;em&gt;sweeeeeeeeeeeeeet&lt;/em&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPic5"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/souv/IMG_0058.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPPic4"&gt;&lt;/a&gt;&lt;b&gt;S Lindehan&lt;/b&gt; (Netherlands) sent this &lt;a href="http://www.youtube.com/watch?v=xpx8gaiKj-A"&gt;Bassie en Adriaan&lt;/a&gt; DVD and a picture of a local Dutch church.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPPic4"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/souv/IMG_0059.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPPic5"&gt;&lt;/a&gt;&amp;quot;I was going to buy an International Reply Coupon,&amp;quot; writes &lt;b&gt;Michael Landis&lt;/b&gt; (Ramat-Gan, Israel), &amp;quot;but then again, I had these in my pocket.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPPic5"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/souv/IMG_0060.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a name="PPPPic5"&gt;&lt;/a&gt;And finally, a small handful of random stuff.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="#PPPPic5"&gt;&lt;img border="0" alt="" src="http://img.thedailywtf.com/images/201002/souv/IMG_0061.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Don't forget to &lt;a href="http://thedailywtf.com/Swag/WTF-Sticker.aspx"&gt;snail-mail in&lt;/a&gt; your own souvenirs for some TDWTF stickers. Ultra-awesome souvenirs (like, say, steak) could even get you a &lt;a href="http://thedailywtf.com/Articles/Announcement-Get-the-Mug.aspx"&gt;TDWTF mug&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MSMgHtLeCHy2Mhu1cvzVYD9F_Ps/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MSMgHtLeCHy2Mhu1cvzVYD9F_Ps/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MSMgHtLeCHy2Mhu1cvzVYD9F_Ps/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MSMgHtLeCHy2Mhu1cvzVYD9F_Ps/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=CS9RM_dafDw:3X4GBSVaS-o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/CS9RM_dafDw" height="1" width="1"/&gt;</description> 
			<slash:comments>157</slash:comments> 
			<comments>http://thedailywtf.com/Comments/Souvenir-Potpourri-Salmiak-Attack.aspx</comments>
		</item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>Problematic Problem, Problem supply, and a Text-Destroying Problem</title> 
			<link>http://thedailywtf.com/Articles/Problematic-Problem,-Problem-supply,-and-a-TextDestroying-Problem.aspx</link> 
			<category>Feature Articles</category>
			<pubDate>Thu, 25 Feb 2010 15:30:00 GMT</pubDate> 
			<guid isPermaLink="false">6791</guid> 
			<description>&lt;p&gt;&lt;b&gt;&lt;u&gt;Problematic Problem&lt;/u&gt;&lt;/b&gt; (from Ben)&lt;br /&gt;
Way back when, I was responsible for doing on-site support for a fairly complex ERP solution that our company sold. My support radius was 100 miles, which meant I was on the road a lot and traveled to places I wasn't all that familiar with. My trusty navigation aide was a compass and a Rand McNally map book. Fancy, online mapping services weren't around yet, let alone super-fancy GPS units.&lt;/p&gt;
&lt;p&gt;One day, I was assigned to visit a customer on the far end of my region (99.9999999 miles), first thing in the morning. It meant that, not only would I need to battle rush-hour traffic through the city, but then drive another 60 miles once that cleared. I was not a fan of early mornings, and getting that client on that wintry day meant a 5:30A departure with a 2.5 hour commute.&lt;/p&gt;
&lt;p&gt;That morning, traffic was even worse than I anticipated. And to make matters worse, I had a terrible time finding the place. Fortunately, a kind fellow at the gas station pointed me in the right direction, and I was able to ring the client from the nearest pay phone to let them know I was running behind.&lt;/p&gt;
&lt;p&gt;When I arrived, everything seemed to be downhill from there. I went to the receptionist, tacked on my visitor badge, headed over to the server room, set my briefcase down, and got to work. Before I could even try logging in, someone walked up to me and said, &amp;quot;hey, I know this isn't really your thing, but I'm desperate, and reeeeaaaallly need some help getting this report for our PM meeting.&amp;quot;&lt;/p&gt;
&lt;p&gt;It certainly wasn't my thing, but given that I was 30 minutes late, a little goodwill towards helping a company executive could only help. So I followed her to her office and helped troubleshoot the problem. An hour-and-a-half later, we had the report running, no problem. She was thrilled, and I headed back to the server room.&lt;/p&gt;
&lt;p&gt;For some reason, I couldn't log-in to the server console, but the generous IT guy helped me past that hurdle by logging in with his credentials. But then I had another problem: I couldn't access any of the servers listed on my sheet. In fact, I couldn't even &lt;em&gt;find&lt;/em&gt; a server that looked anything like ours.&lt;/p&gt;
&lt;p&gt;I called the IT guy over again and asked him where our ERP server was. He shot a confused look to me, and said that he's pretty sure they don't have an ERP server. I assured him that they did, so he went back and looked into things on his end. Thirty minutes later, he assured &lt;em&gt;me&lt;/em&gt; that they absolutely, positively, definitely don't have an ERP server.&lt;/p&gt;
&lt;p&gt;We were both utterly confused. And then something dawned on me, and I silently prayed it wasn't true. I pulled out my sheet, showed it to the IT guy, and pointed towards the customer address heading. &amp;quot;That's you guys, right?&amp;quot;&lt;/p&gt;
&lt;p&gt;As it turned out, not so much. Our actual customer was down the street, in another un-marked office building.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;Problem supply&lt;/u&gt;&lt;/b&gt; (from Brendan)&lt;br /&gt;
Working as a coder for a small company that operates worldwide, I was on the team that deployed a project to China. Now I realize that my English is far from perfect, but dealing with Chinese customers in English has been quite the experience. One day, four months after going live with the new system, I received this mail from our Chinese client:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;From: Louis Chang&lt;br /&gt;
To: Brendan ******&lt;br /&gt;
Subject: Problem supply&lt;br /&gt;
_____________________________________________________&lt;br /&gt;
&lt;br /&gt;
Hi Brendan,&lt;br /&gt;
&lt;br /&gt;
Sorry disturbing you. There is a problem with supply programme on the&lt;br /&gt;
button. Please advice?&lt;br /&gt;
&lt;br /&gt;
Regards,&lt;br /&gt;
&lt;br /&gt;
Lou Chang&lt;br /&gt;
&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ah, the lingo of the busisness... I can imagine that you'd have the faintest idea what he was talking about... but don't worry, neither did I. So I replied to him, hoping to get a better description of his issue:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;From: Louis Chang&lt;br /&gt;
To: Brendan ******&lt;br /&gt;
Subject: RE: Problem supply&lt;br /&gt;
_____________________________________________________&lt;br /&gt;
&lt;br /&gt;
Hi Lou,&lt;br /&gt;
&lt;br /&gt;
Could you please state your problem more clearly?&lt;br /&gt;
&lt;br /&gt;
Thanks, &lt;br /&gt;
Brendan&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I didn't have to wait long for his clarification, as his problem seemed to be really urgent.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;From: Louis Chang&lt;br /&gt;
To: Brendan ******&lt;br /&gt;
Subject: RE: Problem supply&lt;br /&gt;
_____________________________________________________&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: 300%; font-weight: bold"&gt;There is a problem&lt;br /&gt;
with supply&lt;br /&gt;
programme on &lt;br /&gt;
the button. &lt;br /&gt;
Please advice?&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yup. Much better. Thanks.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;A Text-Destroying Problem&lt;/u&gt;&lt;/b&gt; (from Esko Tanakka)&lt;br /&gt;
Back in 1999, I was just beginning my career and worked at a small store that built and configured computers for the public. Occasionally, I'd have to answer customer calls and help people with general computing problems.&lt;/p&gt;
&lt;p&gt;One day, a man called in and immediately started complaining about how we sell utter crap, that we should take responsibility for our problems, and that he was owed money back because of the problems we caused.&lt;/p&gt;
&lt;p&gt;I begged him to calm down and explain specifically what was wrong. He told me that our computer is destroying his text, and that something had to be done. At first, I thought his files were disappearing, but after more investigation, I discovered what his actual problem was: typing text in Microsoft Word overwrote previous text.&lt;/p&gt;
&lt;p&gt;I told him that he simply had the INSERT key on, but he insisted that he never pressed that key, and that pressing the key did nothing. Running out of phone-support options, I told him he&amp;rsquo;d need to bring in his computer. But first, I needed his warranty information.&lt;/p&gt;
&lt;p&gt;Well, it turned out that he bought the computer seven years earlier, then had another company install Windows 95 and the Corel Office Suite. After hearing that, I told him that I obviously couldn't take the machine in. That just made him more angry, and he accused me of working for &amp;quot;Satan and his minions&amp;quot;, and threw all sorts of other ridiculous insults at me. But then all of a sudden, he calmed down. Apparently, he &lt;em&gt;actually&lt;/em&gt; tried pressing the INSERT key (as I asked him to do before), and his computer stopped destroying his text.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/07nRuQKVlChEVxAI9Fh9x6Nf9lo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/07nRuQKVlChEVxAI9Fh9x6Nf9lo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/07nRuQKVlChEVxAI9Fh9x6Nf9lo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/07nRuQKVlChEVxAI9Fh9x6Nf9lo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=ZJd8HWLrz7k:NDI5W7gVijA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/ZJd8HWLrz7k" height="1" width="1"/&gt;</description> 
			<slash:comments>155</slash:comments> 
			<comments>http://thedailywtf.com/Comments/Problematic-Problem,-Problem-supply,-and-a-TextDestroying-Problem.aspx</comments>
		</item>
	
		<item>
			<author>Alex Papadimoulis</author> 
			<title>CodeSOD: Rendered Pointless</title> 
			<link>http://thedailywtf.com/Articles/Rendered-Pointless.aspx</link> 
			<category>CodeSOD</category>
			<pubDate>Wed, 24 Feb 2010 14:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6790</guid> 
			<description>&lt;p&gt;&amp;quot;The mastermind behind our system is the Senior Developer,&amp;quot; wrote &lt;b&gt;Daniel&lt;/b&gt;, &amp;quot;he's naturally an expert at all things code, but he especially excelled at back-end systems. After all, true geniuses always value function over form.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;The Senior Developer liked to do things a little differently, but we got over his quirks. Take, for example, this handy dandy function to ease the pains of those complicated cast operations we all hate.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
   public T Cast&amp;lt;T&amp;gt;(object obj) { return (T)obj; }&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;quot;Why?&amp;quot; Daniel added, &amp;quot;so we can write 'someNumber = Cast&lt;int&gt;&lt;/int&gt;dataObject' instead of 'someNumber = (int)dataObject)'!&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;Of course, the real problems always camein when our super-experienced developer 'optimized' for performance. Because his concept of caching wasn't too strong, we'd often end up with code like this.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
public List&amp;lt;OutstandingApproval&amp;gt; GetApprovals(List&amp;lt;Guid&amp;gt; clientList, Guid userId)
{
    List&amp;lt;OutstandingApproval&amp;gt; approvals = new List&amp;lt;OutstandingApproval&amp;gt;(GetApprovalsDAO(clientList));
    System.Web.HttpRuntime.Cache.Insert(userId + &amp;quot;approvals&amp;quot;, approvals);
    return approvals;
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;quot;In addition to inserting but never retrieving from cache, the code uses userId as a cache key... which is nice and all, except that the data is not at all user-specific. But the real inspiration for sending this in is in the webpage optimization. According to the Senior Developer, this tweak reduces the page size, which makes things more optimal all around.&amp;quot;&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
protected override void Render(HtmlTextWriter writer)
{
    using (HtmlTextWriter htmlwriter = 
       new HtmlTextWriter(new StringWriter()))
    {
        base.Render(htmlwriter);
        string html = htmlwriter.InnerWriter.ToString();
        html = Regex.Replace(html, 
          @&amp;quot;(?&amp;lt;=[^])\t{2,}|(?&amp;lt;=[&amp;gt;])\s{2,}(?=[&amp;lt;])|(?&amp;lt;=[&amp;gt;])\s{2,11}(?=[&amp;lt;])|(?=[\n])\s{2,}&amp;quot;, 
          string.Empty);
        html = Regex.Replace(html, 
          @&amp;quot;[ \f\r\t\v]?([\n\xFE\xFF/{}[\];,&amp;lt;&amp;gt;*%&amp;amp;|^!~?:=])[\f\r\t\v]?&amp;quot;, 
          &amp;quot;$1&amp;quot;);
        html = html.Replace(&amp;quot;;\n&amp;quot;, &amp;quot;;&amp;quot;);

        writer.Write(html.Trim());
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Daniel added, &amp;quot;sure, we could have told him that the regex replacements aren't exactly that fast. We could have also mentioned that the caching enabled in IIS rendered this entirely pointless. But be didn't; he knew he was right, and who were we to question the Senior Developer?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GQAcdij_Y86fUlStatK-Yj9RESc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GQAcdij_Y86fUlStatK-Yj9RESc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GQAcdij_Y86fUlStatK-Yj9RESc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GQAcdij_Y86fUlStatK-Yj9RESc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=wjlvQ-aSwHQ:t54oJ1UNgAE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/wjlvQ-aSwHQ" height="1" width="1"/&gt;</description> 
			<slash:comments>130</slash:comments> 
			<comments>http://thedailywtf.com/Comments/Rendered-Pointless.aspx</comments>
		</item>
	
		<item>
			<author>Mark Bowytz</author> 
			<title>Testing the Path to Pain</title> 
			<link>http://thedailywtf.com/Articles/Testing-the-Path-to-Pain.aspx</link> 
			<category>Feature Articles</category>
			<pubDate>Tue, 23 Feb 2010 14:00:00 GMT</pubDate> 
			<guid isPermaLink="false">6788</guid> 
			<description>&lt;p&gt;&lt;img class="wtf_floatright" style="float: right; margin: 5px" alt="from user'Jinx!' on Flickr" src="http://img.thedailywtf.com/images/mark/danger.jpg" /&gt;Test plan development. Regression analysis. Systems documentation creation. Test case execution. Regression testing.&lt;/p&gt;
&lt;p&gt;If you're anything like me, then those words may as well have been boring, tedious, mind-numbing, tiresome, dreary, and the-worst-thing-in-the-world. Sure, they're all important and necessary, but you found out that, due to budgetary constraints, you couldn't personally do any of those things and could &lt;em&gt;only&lt;/em&gt; focus on coding, you probably wouldn't complain. &lt;b&gt;Julien G.&lt;/b&gt; certainly didn't mind, especially since the &amp;quot;drudge work&amp;quot; would still get done by the overseas team while everyone state-side was fast asleep.&lt;/p&gt;
&lt;p&gt;Naturally, many of the other developers were upset that their work was being sent overseas. Emotions ranged from annoyed to absolute outrage, and some were angered to the point of resignation. Eventually, things cooled down and developers bought management's pitch that &amp;quot;the world-class, high-quality engineers&amp;quot; would be good for &amp;quot;synergizing and strategizing the bottom line.&amp;quot;&lt;/p&gt;
&lt;h3 style="margin-bottom: 0px"&gt;Grouped Together&lt;/h3&gt;
&lt;p style="margin-top: 0px"&gt;The offshore developers were split apart into different teams. There was one for infrastructure, one for database and data integrity, and another for working with the application's User Interface. This latter group was the one that Julien worked with.&lt;/p&gt;
&lt;p&gt;Their job, in part, was to act as any dull, average customer and regression test the application. If at any point the application crashed or behaved strangely, they were to document the conditions leading up to the crash and send them back to with details of how the problem was recreated.&lt;/p&gt;
&lt;p&gt;At first, things were rough. Julien spent many a late night with the offshore team, walking them through their hellishly complex application. But Julien felt it was worthwhile, as it forced him and his group to be more organized and provide more exact specs and concrete test cases. Soon enough, the offshore team was able to jump into the application and provide the right information back to developers, and the developers were sending back recompiled libraries to test with as quickly as possible.&lt;/p&gt;
&lt;p&gt;As a result of the growing synergy, productivity was way up, morale was up, and &amp;mdash; to the delight of management &amp;mdash; the bottom line cost was way down. From all angles, everything looked like puppies and rainbows. That is, until it was time for Offshore Integration Phase 2.&lt;/p&gt;
&lt;h3 style="margin-bottom: 0px"&gt;Phasing Fail&lt;/h3&gt;
&lt;p style="margin-top: 0px"&gt;With all the initial pains of getting the offshore team trained on using their software, it was time to put their &amp;quot;world-class&amp;quot; engineering skills to use. In addition to running loads of manual regression tests, the offshore team would be responsible for developing automated unit and regression tests. This, of course, meant that they'd need to be given access to the code and set up a testing environment at their location.&lt;/p&gt;
&lt;p&gt;Being as large and complex as it was, their application wasn't the type with &amp;quot;run the installer and follow the wizard&amp;quot; installation instructions. In fact, there were 85 steps necessary to complete the installation, ranging from installing the database to editing configuration files. It wasn't all too difficult, as installing the application on a local workstation was often the first task given to newly-hired developers.&lt;/p&gt;
&lt;p&gt;Julien sent these instructions to the offshore team and, the following morning, arrived to find a disappointing email.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
Hi Julien,
After the program start-up reaches 45%, it quits unexpectedly.
Please confirm that latest code is the most recent.

Regards,
Ravi M.
Implementation and QA Lead
Hyderabad Group Inc. &lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;After some re-verification, Julien confirmed that he had, in fact, sent the latest code. Just to make sure the install instructions were valid, he spent a good two hours installing the application on a brand-new server. The only thing he could guess was that some third-party component wasn't properly installed, so he sent an email back to Ravi to verify all components.&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
Hi Julien,
All components installed as per instructions. We followed instructions
three times, each time with a freshly formatted server. 

It still quits when the program start-up reaches 45%. Please advise.

Regards,
Ravi M.
Implementation and QA Lead
Hyderabad Group Inc. &lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;The email routine continued, each time with the offshore team insisting that every instruction was followed perfectly. After a few weeks, the offshore managers had their weekly conference call with state-side managers and in doing so, accused the developers &amp;mdash; specifically Julien &amp;mdash; of blocking the offshore team's progress. With things getting heated up, Julien was charged with the task of watching the offshore group perform the install and configuration step-by-step, via a shared desktop across a sluggish network connection... at 3:00AM his time.&lt;/p&gt;
&lt;h3 style="margin-bottom: 0px"&gt;Just Following Orders&lt;/h3&gt;
&lt;p style="margin-top: 0px"&gt;It was only about 4:30am when Julien was on his third cup of coffee, asking the offshore team to confirm step number 32 of 85 on the install and setup list. Julien was in the midst of wondering how feasible it might be to set up a recording of him saying &amp;quot;un-huh - confirmed' to go off at set intervals when he noticed something amiss in their copy/pasting of environment variables from the setup document.&lt;/p&gt;
&lt;p&gt;&amp;quot;Hey guys,&amp;quot; Julien jumped in, &amp;quot;did you do anything different this time with the setup? Like right now?&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;No,&amp;quot; the offshore engineer responded, &amp;quot;we executed the steps exactly as prescribed.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;Okay, Julien said, &amp;quot;can you scroll back up a little bit in the configuration file?&amp;quot;&lt;/p&gt;
&lt;p&gt;The offshore engineer complied and, located near the top, the following code stuck out:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
' Environment variable for test provider
' 
set PATH_TO_TST_ENV=Path to the test environment (absolute, such as C:\TestEnv) &lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;The line was exactly as it had appeared in the setup document &amp;mdash; copied verbatim &amp;mdash; beneath a heading that read: &amp;quot;Please recreate the application configure file precisely as listed below&amp;quot;&lt;/p&gt;
&lt;p&gt;At this point, Julien could have died from shock if he weren't so tired. Baffled, he asked why they didn't substitute the path with the directory they had created in the previous step. &amp;quot;This is what you instructed us to do,&amp;quot; the offshore engineer replied, &amp;quot;we followed exactly what was in the documents to avoid making any mistakes.&amp;quot;&lt;/p&gt;
&lt;p&gt;It was an unfortunate &amp;quot;ah-hah moment&amp;quot; for Julien; not only did the offshore engineer's response explain the issue at hand, but it explained a whole host of otherwise unexplainable and unreproducible bugs. After that day, Julien learned to be a lot more specific and careful with what he wrote. And while his days are no longer filled with running test cases, he's found he spends an awful lot of time testing and &amp;quot;debugging&amp;quot; the test cases, which, somehow, takes several times longer than executing them.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bALwTDrCbx1WnYWnw1-1ODpFWiQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bALwTDrCbx1WnYWnw1-1ODpFWiQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bALwTDrCbx1WnYWnw1-1ODpFWiQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bALwTDrCbx1WnYWnw1-1ODpFWiQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://syndication.thedailywtf.com/~ff/TheDailyWtf?a=QTVNAWQLh0c:xC_1y6G7l1I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/TheDailyWtf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/TheDailyWtf/~4/QTVNAWQLh0c" height="1" width="1"/&gt;</description> 
			<slash:comments>155</slash:comments> 
			<comments>http://thedailywtf.com/Comments/Testing-the-Path-to-Pain.aspx</comments>
		</item>
		
	</channel>
</rss>
