<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Legacy</title>
        <link>http://ayende.com/Blog/category/508.aspx</link>
        <description>Legacy</description>
        <language>en-US</language>
        <copyright>Ayende Rahien</copyright>
        <managingEditor>Ayende@ayende.com</managingEditor>
        <generator>Subtext Version 1.9.3.51</generator>
        <item>
            <title>Field Expedients, or why "I don't have the tools" is not an acceptable answer</title>
            <link>http://ayende.com/Blog/archive/2008/03/11/Field-Expedients-or-why-I-dont-have-the-tools-is.aspx</link>
            <description>&lt;p class="MsoNormal"&gt;Recently I had a few conversations about tooling, lack thereof and the impact that this has on the overall system.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;I don’t think that someone can argue that starting from scratch is a very good idea in most scenarios. This is especially true when you are talking about any significantly complicate system, which we all do.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;There is still a place for quick &amp;amp; dirty solutions, but that is for throwaway utilities. Hell, even calc.exe isn’t simple (arbitrary precision numbers) anymore.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Therefore, I am constantly surprise by people that chose to go without. I could understand that if they chose that path out of ignorance, but all too often a conscious decision.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;It is based on reasons such as: “It would take me too long to get approval to buy this tool”, or “I have to go through the Proper Channels to use that tool”.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;I don’t like those reasons, but they are real, and I had encountered them several times.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;By now you have probably understood that I have firm opinions about how to go about building successful software systems. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Those opinions are backed by the tools that I am using, but are not constrained to them (just check the commit logs when I am doing something new &lt;span style="font-family: Wingdings;"&gt;&lt;span style=""&gt;J&lt;/span&gt;&lt;/span&gt; ).&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;So, where is this headed?&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Right now I am working on top of the &lt;span style=""&gt; &lt;/span&gt;Naked CLR, which means that I am mostly cannot use my usual stack. This is not fun, and I assure you that I bitch about this more than enough.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Nevertheless, the inaccessibility of my usual stack doesn’t mean that I can just ignore my experience so far. I have the aforementioned opinions for a reason.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;IoC and AoP are two simple concepts that I have embraced whole heartedly. Auto registration and letting the application figure it out is paramount to the way I develop software.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;I tried to do it otherwise, and I have myself constrained and annoyed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;How do I solve this issue? By using Field Expedients replacements.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;What do I mean by that?&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://www.codeplex.com/SvnBridge/SourceControl/FileView.aspx?itemId=203787&amp;amp;changeSetId=16659"&gt;A container&lt;/a&gt;, &lt;a href="http://www.codeplex.com/SvnBridge/SourceControl/FileView.aspx?itemId=203780&amp;amp;changeSetId=16659"&gt;auto registration&lt;/a&gt;, &lt;a href="http://www.codeplex.com/SvnBridge/SourceControl/FileView.aspx?itemId=208816&amp;amp;changeSetId=16659"&gt;method interception&lt;/a&gt; and &lt;a href="http://www.codeplex.com/SvnBridge/SourceControl/FileView.aspx?itemId=208811&amp;amp;changeSetId=16659"&gt;AoP&lt;/a&gt; are fairly easy to build. You can take a look at those implementations, to get some ideas.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;I implore you, however, that you will not use those. They are replacements, hacks and temporary. They are there so I can work using familiar methods and practices, although not using my familiar tools. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;If you’ll tell me the implementation is bad, I’ll agree. But it is there, and it can be used. As a scaffolding if nothing else, but it can be used.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;This post is mostly to note that not having the tools is not a good enough reason. You can &lt;em style=""&gt;build&lt;/em&gt; the tools.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;This post is written to make a point that most people seems to miss. You don’t need to get it perfect. You don’t need to drop down to assembly to get every erg of speed you need. You don’t need it to be functional for the general case, you don’t even need it to be pretty.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The so called container that I have created is a good candidate for the Daily WTF. &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;I think that it took about 4 hours overall to build everything that I needed. I didn’t build it all in one go, just as I needed it. You can actually take a look at the history and see how it went.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Don’t mistake what I am saying, however. I am calling those Field Expedients for a reason. They are crutches, and are not nearly as capable as the real things. But they are close enough, and I am told that I am good at mocking.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/10094.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2008/03/11/Field-Expedients-or-why-I-dont-have-the-tools-is.aspx</guid>
            <pubDate>Tue, 11 Mar 2008 05:43:13 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2008/03/11/Field-Expedients-or-why-I-dont-have-the-tools-is.aspx#feedback</comments>
            <slash:comments>17</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/10094.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Dealing with legacy code</title>
            <link>http://ayende.com/Blog/archive/2007/06/11/Dealing-with-legacy-code.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://weblogs.asp.net/rosherove/"&gt;Roy&lt;/a&gt; is talking about &lt;a href="http://weblogs.asp.net/rosherove/archive/2007/06/10/tips-for-testable-code-and-for-testing-legacy-code.aspx"&gt;legacy code&lt;/a&gt;, and has some great tips about it. I would like to re-iterate the recommendation for &lt;a href="http://www.typemock.com"&gt;TypeMock&lt;/a&gt; for legacy code. I still &lt;a href="http://ayende.com/Blog/archive/2007/03/03/The-Production-Value-of-Seams.aspx"&gt;think&lt;/a&gt; that it is preferred to limit TypeMock to legacy code, but that is another issue.&lt;/p&gt; &lt;p&gt;There is another approach that I would like to mention, which is fairly radical and takes a while. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Break The Code.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;You can do a lot with R# just blindingly doing Extract Method (Ctrl+Alt+M). At one point I had a classs with:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;CommandHandler.Run_Maybe_ParameterValidation()&lt;/li&gt; &lt;li&gt;CommandHandler.Run_SecondPart()&lt;/li&gt; &lt;li&gt;CommandHandler.Run_WhyDoWeCallTheWebServiceHere()&lt;/li&gt; &lt;li&gt;CommandHandler.Run_UnnecessaryThreadingCode_WTF()&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Those were an intermediatery state, just to allow me to &lt;em&gt;try&lt;/em&gt; and figure out what the hell CommandHandler.Run() should do. For large code bases, Extract &amp;amp; Delegate is also an option, you push the functionality to another class, but keep the same interface and behavior.&lt;/p&gt; &lt;p&gt;I had several cases where I not only had code bases with red tests, but the code could not compile for long period of times (two hours!) as I worked to push everything into place. I tend to scare some people because I am very trigger happy on the delete key (CTRL+Z &amp;amp; Subversion), to the point where I here this tiny "Eek!" if they see that I am selecting code :-)&lt;/p&gt; &lt;p&gt;Just to be clear, this is rarely a valid approach unless you are familiar with the code base and/or sure that you have any reasonable chance of at least manual QA. The worst position is where you can't understand neither the code nor its results. (Part of the reason that I &lt;em&gt;hate&lt;/em&gt; doing trouble shooting on other people's code, I can't just delete stuff that I don't understand).&lt;/p&gt; &lt;p&gt;Even so, just following the structure of the code can give you some ideas about how to do some extraction, which can be of great help in understanding the code. Unfortantely, all of the above are time consuming tasks, maybe a better approach would be Cover &amp;amp; Ignore.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/9441.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2007/06/11/Dealing-with-legacy-code.aspx</guid>
            <pubDate>Sun, 10 Jun 2007 22:04:27 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2007/06/11/Dealing-with-legacy-code.aspx#feedback</comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/9441.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Handling Legacy Data using OR/M</title>
            <link>http://ayende.com/Blog/archive/2007/06/07/Handling-Legacy-Data-using-ORM.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://www.lowendahl.net/"&gt;Patrik&lt;/a&gt; has a &lt;a href="http://www.lowendahl.net/showShout.aspx?id=133"&gt;good post&lt;/a&gt; describing how to handle legacy database with an OR/M. I have used similar techniques to map a basically flat file database to a nice relational view, and from there to a workable domain model that make work much easier (Say: Policy and Insurance vs. AF_432 and GF_2345).&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/9420.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Ayende Rahien</dc:creator>
            <guid>http://ayende.com/Blog/archive/2007/06/07/Handling-Legacy-Data-using-ORM.aspx</guid>
            <pubDate>Wed, 06 Jun 2007 21:59:45 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2007/06/07/Handling-Legacy-Data-using-ORM.aspx#feedback</comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/9420.aspx</wfw:commentRss>
        </item>
        <item>
            <title>NHibernate Generics: Deprecated On 1.2</title>
            <link>http://ayende.com/Blog/archive/2006/10/16/7179.aspx</link>
            <description>&lt;p&gt;    I have updated NHibernate Generics to support NHibernate 1.2 . This update is &lt;em&gt;very&lt;/em&gt; minimal and was done to ensure that you can move code to the NHibernate 1.2 without breaking stuff. &lt;/p&gt;&lt;p&gt;    Please consider NHibernate Generics library use as &lt;strong&gt;&lt;em&gt;deprecated&lt;/em&gt;&lt;/strong&gt; with NHibernate 1.2 and above.&lt;/p&gt;&lt;p&gt;    NHibernate Generics (NG from now on) always had two purposes. The first was to give generics capabilities to NHibernate, so I wouldn't have to do casts all over the place. The second was to automatically handle assoications between objects using anonymous delegates and a sprinkle of magic.&lt;/p&gt;&lt;p&gt;    I wrote this library nearly a year ago, and I have learned a lot since then, not the least of which, I learned what is the cost of magic. There are design assumption built into the library that are now proven to be false, specifically, when you want/don't want to force lazy load and working with the second level cache.&lt;/p&gt;&lt;p&gt;    When I find myself scratching my head and trying to understand what is happening in the code I know that it is doing too much behind my back.&lt;/p&gt;&lt;p&gt;    We no longer need external Generics support, since it is now (1.2) built into NHibernate.  And I had a lot of fun and a number of serious issues with the automatica assoication handling, so I don't see much of a point in continuing that.&lt;/p&gt;&lt;p&gt;    You can find the code &lt;a href="https://svn.sourceforge.net/svnroot/rhino-tools/trunk/NHibernate.Generics/"&gt;here&lt;/a&gt;, just check out and compile, I am currently not planning to create a binary release.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/7179.aspx" width="1" height="1" /&gt;</description>
            <guid>http://ayende.com/Blog/archive/2006/10/16/7179.aspx</guid>
            <pubDate>Mon, 16 Oct 2006 18:15:51 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2006/10/16/7179.aspx#feedback</comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/7179.aspx</wfw:commentRss>
        </item>
        <item>
            <title>The Joy Of Legacy</title>
            <link>http://ayende.com/Blog/archive/2006/04/09/7677.aspx</link>
            <description>&lt;p&gt;Things I discovered today about the legacy project I am working on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you say the method names with a french accent, they actually sound meaningful. If you keep this up for long enough, you might make a song out of it. I don't think it will be a top 10 hit, though. 
&lt;/li&gt;&lt;li&gt;There are several crucial differences between the "DO_CR_DA" and "DO_DA_CR", although both are called from the same place and looks nearly the same. 
&lt;/li&gt;&lt;li&gt;It doesn't matter how long it takes the code to run, you can keep yourself busy for &lt;em&gt;days&lt;/em&gt;, trying to gues what the method names mean.&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://ayende.com/Blog/aggbug/7677.aspx" width="1" height="1" /&gt;</description>
            <guid>http://ayende.com/Blog/archive/2006/04/09/7677.aspx</guid>
            <pubDate>Sun, 09 Apr 2006 11:39:53 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2006/04/09/7677.aspx#feedback</comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/7677.aspx</wfw:commentRss>
        </item>
        <item>
            <title>My Daily WTF </title>
            <link>http://ayende.com/Blog/archive/2006/03/10/7820.aspx</link>
            <description>&lt;p&gt;    The term "churning code" has no direct equivalent in Hebrew, sadly. I did a code churn of ~12,000 Lines of code a couple of weeks ago, and I got some... peculiar results. I recently got a call from a co-worker about a piece of code that I wrote during this churn. The code was something like:&lt;/p&gt;&lt;div style="BORDER-RIGHT: #999999 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #999999 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; BORDER-LEFT: #999999 1px solid; WIDTH: 100%; PADDING-TOP: 4px; BORDER-BOTTOM: #999999 1px solid; BACKGROUND-COLOR: #ffffe1"&gt;&lt;font color="#0000ff" size="2"&gt;     &lt;p class="MsoNormal" dir="ltr" style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; unicode-bidi: embed; TEXT-ALIGN: left; mso-layout-grid-align: none"&gt;        &lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?&gt;SELECT&lt;o:p&gt;&lt;/o:p&gt;        &lt;/span&gt;    &lt;/p&gt;    &lt;p class="MsoNormal" dir="ltr" style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; unicode-bidi: embed; TEXT-ALIGN: left; mso-layout-grid-align: none"&gt;        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt;&lt;span style="mso-tab-count: 1"&gt;      &lt;/span&gt;OrderId&lt;/font&gt;&lt;span style="COLOR: gray"&gt;,&lt;o:p&gt;&lt;/o:p&gt;        &lt;/span&gt;&lt;/span&gt;    &lt;/p&gt;    &lt;p class="MsoNormal" dir="ltr" style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; unicode-bidi: embed; TEXT-ALIGN: left; mso-layout-grid-align: none"&gt;        &lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;font color="#000000"&gt;      &lt;/font&gt;&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;Avg&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;font color="#000000"&gt;Price&lt;/font&gt;&lt;span style="COLOR: gray"&gt;)&lt;o:p&gt;&lt;/o:p&gt;        &lt;/span&gt;&lt;/span&gt;    &lt;/p&gt;    &lt;p class="MsoNormal" dir="ltr" style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; unicode-bidi: embed; TEXT-ALIGN: left; mso-layout-grid-align: none"&gt;        &lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;FROM&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt; Orders&lt;o:p&gt;&lt;/o:p&gt;        &lt;/font&gt;&lt;/span&gt;    &lt;/p&gt;    &lt;p class="MsoNormal" dir="ltr" style="MARGIN: 0cm 0cm 0pt; DIRECTION: ltr; unicode-bidi: embed; TEXT-ALIGN: left"&gt;        &lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;GROUP&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="COLOR: blue"&gt;BY&lt;/span&gt;&lt;font color="#000000"&gt; OrderId&lt;/font&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;font color="#000000"&gt; Price&lt;/font&gt;&lt;/span&gt;    &lt;/p&gt;&lt;/font&gt;&lt;font size="2"&gt;    &lt;/font&gt;&lt;/div&gt;&lt;p&gt;    For some reason, this code produced the wrong results. I was gently asked what I was thinking when I wrote this piece, and I really couldn't provide a decent explanantion. At least fixing this mistake was easy, if I weren't doing much the same thing in four other spots, in &lt;em&gt;big&lt;/em&gt; queries.&lt;/p&gt;&lt;p&gt;    &lt;em&gt;&lt;strong&gt;*Sigh*&lt;/strong&gt;&lt;/em&gt; I heard somewhere that the output of the average programmer is ~20 lines of debugged code a day. It's not really surprising, actually. I knew it during the churn, now i need to find out just how much more such WTF are awaiting me. &lt;/p&gt;&lt;p&gt;    By the way, if you work in a code base long enough, you learn to read the patterns of the code well enought that you no longer need to &lt;em&gt;read&lt;/em&gt; the code. From the structure of the code you can figure out what is it trying to do (if not why, or the sepsific of the how). Do it long enough and you can "restructure*" the code to be much nicer, &lt;em&gt;without reading the code&lt;/em&gt;.  The problem with this method is the result above.&lt;/p&gt;&lt;p&gt;    Boy, is legacy programming fun or what? &lt;/p&gt;&lt;p&gt;    * It is not refactoring unless I have tests in place.&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/7820.aspx" width="1" height="1" /&gt;</description>
            <guid>http://ayende.com/Blog/archive/2006/03/10/7820.aspx</guid>
            <pubDate>Fri, 10 Mar 2006 16:48:26 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2006/03/10/7820.aspx#feedback</comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/7820.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Put down that cursor and step away from the database, Mister!</title>
            <link>http://ayende.com/Blog/archive/2006/01/19/7947.aspx</link>
            <description>I'm seeing too much cursors around right now&lt;i&gt;. Way &lt;/i&gt;too many. I also keep seeing the same code over &amp;amp; over again. I know that I'm in trouble because to work with this code base I need to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;constantly use grep (and deriatives, like AstroGrep, which is cool);&lt;/li&gt;&lt;li&gt;get a diff program that support drag &amp;amp; drop from the shell as well as quickly changing only one of the files. (Found WinMerge, which looks cool);&lt;br /&gt;&lt;/li&gt;&lt;li&gt;pronounce variable names out loud in order to understand their meaning*;&lt;/li&gt;&lt;li&gt;watch ingenious workarounds to all sorts of limitations in the number of concurrent nested corsurs in the database;&lt;/li&gt;&lt;li&gt;cut code by 70% by deciding that I don't need to verify stuff &lt;a href="http://www.thedailywtf.com/forums/56896/ShowPost.aspx"&gt;over &amp;amp; over again.&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Argh! Excuse me while I go bang my head against the wall.&lt;br /&gt;&lt;br /&gt;* (Hebrew words in English characters)&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://ayende.com/Blog/aggbug/7947.aspx" width="1" height="1" /&gt;</description>
            <guid>http://ayende.com/Blog/archive/2006/01/19/7947.aspx</guid>
            <pubDate>Thu, 19 Jan 2006 05:43:54 GMT</pubDate>
            <comments>http://ayende.com/Blog/archive/2006/01/19/7947.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://ayende.com/Blog/comments/commentRss/7947.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>