<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
  <title>Interoperability Happens</title>
  <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/" />
  <link rel="self" href="http://blogs.tedneward.com/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2008-05-16T01:07:39.4005063-07:00</updated>
  <author>
    <name>Ted Neward</name>
  </author>
  <subtitle>Ted Neward's Technical Weblog</subtitle>
  <id>http://blogs.tedneward.com/</id>
  <generator uri="http://www.dasblog.net" version="1.9.7067.0">DasBlog</generator>
  <entry>
    <title>Blogs I'm currently reading</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2008/05/16/Blogs+Im+Currently+Reading.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,94fda66c-4dda-438c-af27-a53a8e0692c8.aspx</id>
    <published>2008-05-16T00:08:07.6973813-07:00</published>
    <updated>2008-05-16T01:07:39.4005063-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="C++" label="C++" scheme="http://blogs.tedneward.com/CategoryView,category,C%2b%2b.aspx" />
    <category term="Conferences" label="Conferences" scheme="http://blogs.tedneward.com/CategoryView,category,Conferences.aspx" />
    <category term="F#" label="F#" scheme="http://blogs.tedneward.com/CategoryView,category,F%23.aspx" />
    <category term="Java/J2EE" label="Java/J2EE" scheme="http://blogs.tedneward.com/CategoryView,category,Java%2fJ2EE.aspx" />
    <category term="Languages" label="Languages" scheme="http://blogs.tedneward.com/CategoryView,category,Languages.aspx" />
    <category term="LLVM" label="LLVM" scheme="http://blogs.tedneward.com/CategoryView,category,LLVM.aspx" />
    <category term="Mac OS" label="Mac OS" scheme="http://blogs.tedneward.com/CategoryView,category,Mac%2BOS.aspx" />
    <category term="Parrot" label="Parrot" scheme="http://blogs.tedneward.com/CategoryView,category,Parrot.aspx" />
    <category term="Reading" label="Reading" scheme="http://blogs.tedneward.com/CategoryView,category,Reading.aspx" />
    <category term="Review" label="Review" scheme="http://blogs.tedneward.com/CategoryView,category,Review.aspx" />
    <category term="Ruby" label="Ruby" scheme="http://blogs.tedneward.com/CategoryView,category,Ruby.aspx" />
    <category term="Security" label="Security" scheme="http://blogs.tedneward.com/CategoryView,category,Security.aspx" />
    <category term="Solaris" label="Solaris" scheme="http://blogs.tedneward.com/CategoryView,category,Solaris.aspx" />
    <category term="Visual Basic" label="Visual Basic" scheme="http://blogs.tedneward.com/CategoryView,category,Visual%2BBasic.aspx" />
    <category term="Windows" label="Windows" scheme="http://blogs.tedneward.com/CategoryView,category,Windows.aspx" />
    <category term="XML Services" label="XML Services" scheme="http://blogs.tedneward.com/CategoryView,category,XML%2BServices.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recently, a former student asked me,
</p>
        <blockquote>
          <p>
I was in a .NET web services training class that you gave probably 4 or so years ago
on-site at a <em>[company name]</em> office in <em>[city]</em>, north of Atlanta. 
At that time I asked you for a list of the technical blogs that you read, and I am
curious which blogs you are reading now.  I am now with a small company where
I have to be a jack of all trades, in the last year I have worked in C++ and Perl
backend type projects and web frontend projects with Java, C#, and RoR, so I find
your perspective interesting since you also work with various technologies and aren't
a zealot for a specific one.
</p>
          <p>
Any way, please either respond by email or in your blog, because I think that others
may be interested in the list also.
</p>
        </blockquote>
        <p>
As one might expect, my blog list is a bit eclectic, but I suppose that's part of
the charm of somebody looking to study Java, .NET, C++, Smalltalk, Ruby, Parrot, LLVM,
and other languages and environments. So, without further ado, I've pasted in the
contents of my OPML file for cut&amp;paste and easy import.
</p>
        <p>
Having said that, though, I would strongly suggest <em>not</em> just blindly importing
the whole set of feeds into your nearest RSS reader, but take a moment and go visit
each one before you add it. It takes longer, granted, but the time spent is a worthy
investment--you don't want to have to declare "blog bankruptcy".
</p>
        <blockquote>
          <p>
            <em>Editor's note: We pause here as readers look at each other and go... "WTF?!?"</em>
          </p>
        </blockquote>
        <p>
"Blog bankruptcy" is a condition similar to "email bankruptcy", when otherwise perfectly
high-functioning people give up on trying to catch up to the flood of messages in
their email client's Inbox and delete the whole mess (usually with some kind of public
apology explaining why and asking those who've emailed them in the past to resend
something if it was really important), effectively trying to "start over" with their
email in much the same way that Chapter Seven or Chapter Eleven allows companies to
"start over" with their creditors, or declaring bankruptcy allows private citizens
to do the same with theirs. "Blog bankruptcy" is a similar kind of condition: your
RSS reader becomes so full of stuff that you can't keep up, and you can't even remember
which blogs were the interesting ones, so you nuke the whole thing and get away from
the blog-reading thing for a while.
</p>
        <p>
This happened to me, in fact: a few years ago, when I became the editor-in-chief of
TheServerSide.NET, I asked a few folks for their OPML lists, so that I could quickly
and easily build a list of blogs that would "tune me in" to the software industry
around me, and many of them quite agreeably complied. I took my RSS reader (Newsgator,
at the time) and dutifully imported all of them, and ended up with a collection of
blogs that was easily into the hundreds of feeds long. And, over time, I found myself
reading fewer and fewer blogs, mostly because the whole set was so... <em>intimidating</em>.
I mean, I would pick at the list of blogs and their entries in the same way that I
picked at vegetables on my plate as a child--half-heartedly, with no real enthusiasm,
as if this was something my parents were forcing me to do. That just ruined the experience
of blog-reading for me, and eventually (after I left TSS.NET for other pastures),
I nuked the whole thing--even going so far as to uninstall my copy of Newsgator--and
gave up.
</p>
        <p>
Naturally, I missed it, and slowly over time began to rebuild the list, this time,
taking each feed one at a time, carefully weighing what value the feed was to me and
selecting only those that I thought had a high signal-to-noise ratio. (This is partly
why I don't include much "personal" info in this blog--I found myself routinely stripping
away those blogs that had more personal content and less technical content, and I
figured if I didn't want to read it, others probably felt the same way.) Over the
last year or two, I've rebuilt the list to the point where I probably need to prune
a bit and close a few of them back down, but for now, I'm happy with the list I've
got.
</p>
        <p>
And speaking of which....
</p>
        <div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'Courier New', courier, monospace; background-color: #f4f4f4">
          <div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum1" style="color: #606060"> 1:</span>
              <span style="color: #0000ff">&lt;?</span>
              <span style="color: #800000">xml</span>
              <span style="color: #ff0000">version</span>
              <span style="color: #0000ff">="1.0"</span>?<span style="color: #0000ff">&gt;</span></pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum2" style="color: #606060"> 2:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">opml</span>
              <span style="color: #ff0000">version</span>
              <span style="color: #0000ff">="1.0"</span>
              <span style="color: #0000ff">&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum3" style="color: #606060"> 3:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">head</span>
              <span style="color: #0000ff">&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum4" style="color: #606060"> 4:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">title</span>
              <span style="color: #0000ff">&gt;</span>OPML
exported from Outlook<span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span></pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum5" style="color: #606060"> 5:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">dateCreated</span>
              <span style="color: #0000ff">&gt;</span>Thu,
15 May 2008 20:55:19 -0700<span style="color: #0000ff">&lt;/</span><span style="color: #800000">dateCreated</span><span style="color: #0000ff">&gt;</span></pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum6" style="color: #606060"> 6:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">dateModified</span>
              <span style="color: #0000ff">&gt;</span>Thu,
15 May 2008 20:55:19 -0700<span style="color: #0000ff">&lt;/</span><span style="color: #800000">dateModified</span><span style="color: #0000ff">&gt;</span></pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum7" style="color: #606060"> 7:</span>
              <span style="color: #0000ff">&lt;/</span>
              <span style="color: #800000">head</span>
              <span style="color: #0000ff">&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum8" style="color: #606060"> 8:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">body</span>
              <span style="color: #0000ff">&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum9" style="color: #606060"> 9:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="If
broken it is, fix it you should"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum10" style="color: #606060"> 10:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://blogs.msdn.com/tess/rss.xml"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum11" style="color: #606060"> 11:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Artima
Developer Buzz"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum12" style="color: #606060"> 12:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://www.artima.com/news/feeds/news.rss"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum13" style="color: #606060"> 13:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Artima
Weblogs"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum14" style="color: #606060"> 14:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://www.artima.com/weblogs/feeds/weblogs.rss"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum15" style="color: #606060"> 15:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Artima
Chapters Library"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum16" style="color: #606060"> 16:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://www.artima.com/chapters/feeds/chapters.rss"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum17" style="color: #606060"> 17:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Neal
Gafter's blog"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum18" style="color: #606060"> 18:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://gafter.blogspot.com/feeds/posts/default"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum19" style="color: #606060"> 19:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Room
101"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum20" style="color: #606060"> 20:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://gbracha.blogspot.com/feeds/posts/default"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum21" style="color: #606060"> 21:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Kelly
O'Hair's Blog"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum22" style="color: #606060"> 22:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://weblogs.java.net/blog/kellyohair/index.rdf"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum23" style="color: #606060"> 23:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="John
Rose @ Sun"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum24" style="color: #606060"> 24:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://blogs.sun.com/jrose/feed/entries/atom"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum25" style="color: #606060"> 25:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="The
Daily WTF"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum26" style="color: #606060"> 26:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://syndication.thedailywtf.com/TheDailyWtf"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum27" style="color: #606060"> 27:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Brad
Wilson"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum28" style="color: #606060"> 28:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://feeds.feedburner.com/BradWilson"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum29" style="color: #606060"> 29:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Mike
Stall's .NET Debugging Blog"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum30" style="color: #606060"> 30:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://blogs.msdn.com/jmstall/rss.xml"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum31" style="color: #606060"> 31:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Stevey's
Blog Rants"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum32" style="color: #606060"> 32:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://steve-yegge.blogspot.com/atom.xml"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum33" style="color: #606060"> 33:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Brendan's
Roadmap Updates"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum34" style="color: #606060"> 34:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://weblogs.mozillazine.org/roadmap/index.rdf"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum35" style="color: #606060"> 35:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="pl
patterns"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum36" style="color: #606060"> 36:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://plpatterns.blogspot.com/feeds/posts/default"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum37" style="color: #606060"> 37:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Joel
Pobar's weblog"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum38" style="color: #606060"> 38:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://feeds.feedburner.com/callvirt"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum39" style="color: #606060"> 39:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Let&amp;amp;#39;s
Kill Dave!"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum40" style="color: #606060"> 40:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://letskilldave.com/rss.aspx"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum41" style="color: #606060"> 41:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Why
does everything suck?"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum42" style="color: #606060"> 42:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://whydoeseverythingsuck.com/feeds/posts/default"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum43" style="color: #606060"> 43:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="cdiggins.com"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://cdiggins.com/feed"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum44" style="color: #606060"> 44:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="LukeH's
WebLog"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum45" style="color: #606060"> 45:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://blogs.msdn.com/lukeh/rss.xml"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum46" style="color: #606060"> 46:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Jomo
Fisher -- Sharp Things"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum47" style="color: #606060"> 47:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://blogs.msdn.com/jomo_fisher/rss.xml"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum48" style="color: #606060"> 48:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Chance
Coble"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum49" style="color: #606060"> 49:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://leibnizdream.wordpress.com/feed/"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum50" style="color: #606060"> 50:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Don
Syme's WebLog on F# and Other Research Projects"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum51" style="color: #606060"> 51:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://blogs.msdn.com/dsyme/rss.xml"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum52" style="color: #606060"> 52:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="David
Broman's CLR Profiling API Blog"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum53" style="color: #606060"> 53:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://blogs.msdn.com/davbr/rss.xml"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum54" style="color: #606060"> 54:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="JScript
Blog"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum55" style="color: #606060"> 55:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://blogs.msdn.com/jscript/rss.xml"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum56" style="color: #606060"> 56:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Yet
Another Language Geek"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum57" style="color: #606060"> 57:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://blogs.msdn.com/wesdyer/rss.xml"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum58" style="color: #606060"> 58:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">=".NET
Languages Weblog"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum59" style="color: #606060"> 59:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://www.dotnetlanguages.net/DNL/Rss.aspx"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum60" style="color: #606060"> 60:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="DevHawk"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum61" style="color: #606060"> 61:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://feeds.feedburner.com/Devhawk"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum62" style="color: #606060"> 62:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="The
Cobra Programming Language"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum63" style="color: #606060"> 63:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://cobralang.blogspot.com/feeds/posts/default"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum64" style="color: #606060"> 64:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Code
Miscellany"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum65" style="color: #606060"> 65:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://codemiscellany.blogspot.com/feeds/posts/default"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum66" style="color: #606060"> 66:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Fred,
Let it go!"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum67" style="color: #606060"> 67:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://freddy33.blogspot.com/feeds/posts/default"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum68" style="color: #606060"> 68:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Codedependent"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum69" style="color: #606060"> 69:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://graphics-geek.blogspot.com/feeds/posts/default"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum70" style="color: #606060"> 70:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Presentation
Zen"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum71" style="color: #606060"> 71:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://www.presentationzen.com/presentationzen/index.rdf"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum72" style="color: #606060"> 72:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="The
Extreme Presentation(tm) Method"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum73" style="color: #606060"> 73:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://extremepresentation.typepad.com/blog/index.rdf"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum74" style="color: #606060"> 74:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="ZapThink"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum75" style="color: #606060"> 75:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://feeds.feedburner.com/zapthink"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum76" style="color: #606060"> 76:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Chris
Smith's completely unique view"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum77" style="color: #606060"> 77:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://feeds.feedburner.com/ChrisSmithsCompletelyUniqueView"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum78" style="color: #606060"> 78:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Code
Commit"</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum79" style="color: #606060"> 79:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://feeds.codecommit.com/codecommit"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum80" style="color: #606060"> 80:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">outline</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum81" style="color: #606060"> 81:</span>
              <span style="color: #ff0000">text</span>
              <span style="color: #0000ff">="Comments
on Ola Bini: Programming Language Synchronicity: A New Hope: Polyglotism"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum82" style="color: #606060"> 82:</span>
              <span style="color: #ff0000">type</span>
              <span style="color: #0000ff">="rss"</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum83" style="color: #606060"> 83:</span>
              <span style="color: #ff0000">xmlUrl</span>
              <span style="color: #0000ff">="http://ola-bini.blogspot.com/feeds/5778383724683099288/comments/default"</span>
              <span style="color: #0000ff">/&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum84" style="color: #606060"> 84:</span>
              <span style="color: #0000ff">&lt;/</span>
              <span style="color: #800000">body</span>
              <span style="color: #0000ff">&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">
              <span id="lnum85" style="color: #606060"> 85:</span>
              <span style="color: #0000ff">&lt;/</span>
              <span style="color: #800000">opml</span>
              <span style="color: #0000ff">&gt;</span>
            </pre>
            <!--CRLF-->
          </div>
        </div>
        <p>
Happy reading.....
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=94fda66c-4dda-438c-af27-a53a8e0692c8" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>I'm Pro-Choice... Pro Programmer Choice, that is</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2008/05/11/Im+ProChoice+Pro+Programmer+Choice+That+Is.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,4a44324b-e95c-4ba9-b5ab-a38e8166cdb4.aspx</id>
    <published>2008-05-10T21:20:46.4820663-07:00</published>
    <updated>2008-05-10T21:20:46.4820663-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="C++" label="C++" scheme="http://blogs.tedneward.com/CategoryView,category,C%2b%2b.aspx" />
    <category term="F#" label="F#" scheme="http://blogs.tedneward.com/CategoryView,category,F%23.aspx" />
    <category term="Flash" label="Flash" scheme="http://blogs.tedneward.com/CategoryView,category,Flash.aspx" />
    <category term="Java/J2EE" label="Java/J2EE" scheme="http://blogs.tedneward.com/CategoryView,category,Java%2fJ2EE.aspx" />
    <category term="Languages" label="Languages" scheme="http://blogs.tedneward.com/CategoryView,category,Languages.aspx" />
    <category term="LLVM" label="LLVM" scheme="http://blogs.tedneward.com/CategoryView,category,LLVM.aspx" />
    <category term="Mac OS" label="Mac OS" scheme="http://blogs.tedneward.com/CategoryView,category,Mac%2BOS.aspx" />
    <category term="Parrot" label="Parrot" scheme="http://blogs.tedneward.com/CategoryView,category,Parrot.aspx" />
    <category term="Ruby" label="Ruby" scheme="http://blogs.tedneward.com/CategoryView,category,Ruby.aspx" />
    <category term="Solaris" label="Solaris" scheme="http://blogs.tedneward.com/CategoryView,category,Solaris.aspx" />
    <category term="Visual Basic" label="Visual Basic" scheme="http://blogs.tedneward.com/CategoryView,category,Visual%2BBasic.aspx" />
    <category term="VMWare" label="VMWare" scheme="http://blogs.tedneward.com/CategoryView,category,VMWare.aspx" />
    <category term="Windows" label="Windows" scheme="http://blogs.tedneward.com/CategoryView,category,Windows.aspx" />
    <category term="XML Services" label="XML Services" scheme="http://blogs.tedneward.com/CategoryView,category,XML%2BServices.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Not too long ago, <a href="http://pluralsight.com/blogs/dbox/archive/2008/04/29/50808.aspx">Don
wrote</a>:
</p>
        <blockquote>
          <p>
The three most “personal” choices a developer makes are language, tool, and OS.
</p>
        </blockquote>
        <p>
No.
</p>
        <p>
That may be true for somebody who works for a large commercial or open source vendor,
whose team is building something that fits into one of those three categories and
wants to see that language/tool/OS succeed.
</p>
        <p>
That is not where most of us live. If you do, certainly, you are welcome to your opinion,
but please accept with good grace that your agenda is not the same as my own.
</p>
        <p>
Most of us in the practitioner space are <em>using</em> languages, tools and OSes
to solve customer problems, and making the decision to use a particular language,
tool or OS a personal one generally gets us into trouble--how many developers do you
know that identify themselves so closely with that decision that they include it in
their personal metadata? 
</p>
        <p>
"Hi, I'm Joe, and I'm a Java programmer."
</p>
        <p>
Or, "Oh, good God, you're running Windows? What are you, some kind of Micro$oft lover
or something?"
</p>
        <p>
Or, "Linux? You really <em>are</em> a geek, aren't you? Recompiled your kernel lately
(snicker, snicker)?"
</p>
        <p>
Sorry, but all of those make me want to hurl. Of these kinds of statements are technical
zealotry and flame wars built. When programmers embed their choice so deeply into
their psyche that it becomes the tagline by which they identify themselves, it becomes
an "ego" thing instead of a "tool" thing. 
</p>
        <p>
What's more, it involves customers and people outside the field in an argument that
has <em>nothing</em> to do with them. Think about it for a second; the last time you
hired a contractor to add a deck to your house, what's your reaction when they introduce
themselves as,
</p>
        <p>
"Hi, I'm Kim, and I'm a Craftsman contractor."
</p>
        <p>
Or, overheard at the job site, "Oh, good God, you're using a Skil? What are you, some
kind of nut or something?"
</p>
        <p>
Or, as you look at the tools on their belt, "Nokita? You really <em>are</em> a geek,
aren't you? Rebuilt your tools from scratch lately (snicker, snicker)?"
</p>
        <p>
Do you, the customer, <em>really</em> care what kind of tools they use? Or do you
care more for the quality of solution they build for you?
</p>
        <p>
It's hard to imagine how the discussion can even come up, it's so ludicrous.
</p>
        <p>
Try this one on, instead:
</p>
        <p>
"Hi, I'm Ted, and I'm a programmer."
</p>
        <p>
I use a variety of languages, tools, and OSes, and my choice of which to use are all
geared around a single end goal: not to promote my own social or political agenda,
but to <em>make my customer happy</em>. 
</p>
        <p>
Sometimes that means using C# on Windows. Sometimes that means using Java on Linux.
Sometimes that means Ruby on Mac OS X. Sometimes that means creating a DSL. Sometimes
that means using EJB, or Spring, or F#, or Scala, or FXCop, or FindBugs, or log4j,
or ... <em>ad infinitum</em>.
</p>
        <p>
Don't get me wrong, I have my opinions, just as contractors (and truck drivers, it
turns out) do. And, like most professionals in their field, I'm happy to share those
opinions with others in my field, and also with my customers when they ask: I think
C# provides a good answer in certain contexts, and that Java provides an equally good
answer, but in different contexts. I will be happy to explain my recommendation on
which languages, tools and OSes to use, because unlike the contractor, the languages,
tools, and OSes I use <em>will</em> be visible to the customer when the software goes
into Production, at a variety of levels, and thus, the customer should be involved
in that decision. (Sometimes the situation is really one where the customer won't
see it, in which case the developer can have full confidence in whatever language/tool/OS
they choose... but that's far more often the exception than the rule, and will generally
only be true in cases where the developer is providing a complete customer "hands-off"
hosting solution.)
</p>
        <p>
I choose to be pro-choice.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=4a44324b-e95c-4ba9-b5ab-a38e8166cdb4" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>Thinking in Language</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2008/05/09/Thinking+In+Language.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,4b62543c-6d8c-49b9-ae71-3924542c04c0.aspx</id>
    <published>2008-05-08T23:30:33.3528263-07:00</published>
    <updated>2008-05-08T23:30:33.3528263-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="Java/J2EE" label="Java/J2EE" scheme="http://blogs.tedneward.com/CategoryView,category,Java%2fJ2EE.aspx" />
    <category term="Languages" label="Languages" scheme="http://blogs.tedneward.com/CategoryView,category,Languages.aspx" />
    <category term="LLVM" label="LLVM" scheme="http://blogs.tedneward.com/CategoryView,category,LLVM.aspx" />
    <category term="Parrot" label="Parrot" scheme="http://blogs.tedneward.com/CategoryView,category,Parrot.aspx" />
    <category term="Windows" label="Windows" scheme="http://blogs.tedneward.com/CategoryView,category,Windows.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
A couple of folks have taken me to task over some of the things I said... or didn't
say... in my last blog piece. So, in no particular order, let's discuss.
</p>
        <p>
A few commented on how I left out commentary on language X, Y or Z. That wasn't an
accidental slip or surge of forgetfulness, but I didn't want to rattle off a laundry
list of every language I've run across or am exploring, since that list would be much,
much longer and arguably of little to no additional benefit. Having said that, though,
a more comprehensive list (and more comprehensive explanation and thought process)
is probably deserved, so expect to see that from me before long, maybe in the next
week or two.
</p>
        <p>
          <a href="http://steve.vinoski.net/blog/2008/05/01/erlang-its-about-reliability/">Steve
Vinoski wrote</a>:
</p>
        <blockquote>
          <p>
In a <a href="http://blogs.tedneward.com/2008/04/29/Groovy+Or+JRuby.aspx">recent post,
Ted Neward</a> gives a brief description of a variety of programming languages. It’s
a useful post; I’ve known Ted for awhile now, and he’s quite knowledgeable about such
things. Still, I have to comment on what he says about Erlang....  I might have
said it like this:
</p>
          <blockquote>
            <p>
              <em>
                <strong>Erlang</strong>. Joe Armstrong’s baby was built to solve a specific set
of problems at Ericsson, and from it we can learn a phenomenal amount about building
highly reliable systems that can also support massive concurrency. The fact that it
runs on its own interpreter, good; otherwise, the reliability wouldn’t be there and
it would be just another curious but useless concurrency-oriented language experiment.</em>
            </p>
          </blockquote>
          <p>
Far too many blog posts and articles that touch on Erlang completely miss the point
that reliability is an extremely important aspect of the language. 
</p>
          <p>
To achieve reliability, you have to accept the fact that failure <em>will</em> occur,
Once you accept that, then other things fall into place: you need to be able to restart
things quickly, and to do that, processes need to be cheap. If something fails, you
don’t want it taking everything else with it, so you need to at least minimize, if
not eliminate, sharing, which leads you to message passing. You also need monitoring
capabilities that can detect failed processes and restart them (BTW in the same posting
Ted seems to claim that Erlang has no monitoring capabilities, which baffles me). 
</p>
          <p>
Massive concurrency capabilities become far easier with an architecture that provides
lightweight processes that share nothing, but that doesn’t mean that once you design
it, the rest is just a simple matter of programming. Rather, actually <em>implementing</em> all
this in a way that delivers what’s needed and performs more than adequately for production-quality
systems is an incredibly enormous challenge, one that the Erlang development team
has quite admirably met, and that’s an understatement if there ever was one. 
</p>
          <p>
They come for the concurrency but they stay for the reliability. Do any other “Erlang-like”
languages have real, live, production systems in the field that have been running
non-stop for years? (That’s not a rhetorical question; if you know of any such languages,
please let me know.) Next time you see yet another posting about Erlang and concurrency,
especially those of the form “Erlang-like concurrency in language X!” just ask the
author: where’s the reliability?
</p>
        </blockquote>
        <p>
As he says, Steve and I have known each other for a while now, so I'm fairly comfortable
in saying, Mr. Vinoski, you conflate two ideas together in your assessment of Erlang,
and teasing those two things apart reveals a great deal about Erlang, reliability,
and the greater world at large.
</p>
        <p>
Erlang's reliability model--that is, the spawn-a-thousand-processes model--is not
unique to Erlang. In fact, it's been the model for Unix programs and servers, most
notably the Apache web server, for decades. When building a robust system under Unix,
a master-slave model, in which a master process spawns (and monitors) <em>n</em> number
of child processes to do the actual work, offers that same kind of reliability and
robustness. If one of these processes fail (due to corrupted memory access, operating
system fault, or what-have-you), the process can simply die and be replaced by a new
child process. Under the Windows model, which stresses threads rather than processes,
corrupted memory access tearing down the process brings down the entire system; this
is partly why .NET chose to create the AppDomain model, which looks and feels remarkably
like the lightweight process model. (It still can't stop a random rogue pointer access
from tearing down the entire process, but if we assume that future servers will be
written all in managed code, it offers the same kind of reliability that the process
model does so long as your kernel drivers don't crash.)
</p>
        <p>
There is no reason a VM (JVM, CLR, Parrot, etc) could not do this. In fact, here's
the kicker: it would be <em>easier</em> for a VM environment to do this, because VM's,
by their nature, seek to abstract away the details of the underlying platform that
muddy up the picture. It would be relatively simple to take an Actors-based Java application,
such as that currently being built in Scala, and move it away from a threads-based
model and over to a process-based model (with the JVM constuction/teardown being handled
entirely by underlying infrastructure) with little to no impact on the programming
model.
</p>
        <p>
As to Steve's comment that the Erlang interpreter isn't monitorable, I never said
that--I said that Erlang was not monitorable using current IT operations monitoring
tools. The JVM and CLR both have gone to great lengths to build infrastructure hooks
that make it easy to keep an eye not only on what's going on at the process level
("Is it up? Is it down?") but also what's going on inside the system ("How many requests
have we processed in the last hour? How many of those were successful? How many database
connections have been created?" and so on). Nothing says that Erlang--or any other
system--can't do that, but it requires the Erlang developer build that infrastructure
him-or-herself, which usually means it's either not going to get done, making life
harder for the IT support staff, or else it gets done to a minimalist level, making
life harder for the IT support staff.
</p>
        <p>
So given that an execution engine could easily adopt the model that gives Erlang its
reliability, and that using Erlang means a lot more work to get the monitorability
and manageability (which is a necessary side-effect requirement of accepting that
failure happens), hopefully my reasons for saying that Erlang (or Ruby's or any other
native-implemented language) is a non-starter for me becomes more clear.
</p>
        <p>
Meanwhile, <a href="http://patricklogan.blogspot.com/2008/05/huh-fact-that-it-runs-on-its-own.html">Patrick
Logan offers up some sharp words</a> about my preference for VMs:
</p>
        <blockquote>
          <p>
What is this <a href="http://blogs.tedneward.com/2008/04/29/Groovy+Or+JRuby.aspx">obsession
with some virtual machine being the one</a>, true byte code? The Java Virtual Machine,
the CLR, Parrot, whatever. Give it up. 
</p>
          <p>
I agree <a href="http://steve.vinoski.net/blog/2008/05/01/erlang-its-about-reliability/">with
Steve Vinoski</a>... 
</p>
          <blockquote>
            <em>The fact that it runs on its own interpreter, good; otherwise,
the reliability wouldn’t be there. </em>
          </blockquote>We need to get over our thinking
about "One VM to bring them all and in the darkness bind them". Instead we should
be focused on improving interprocess communication among various languages. This can
be done with HTTP and XMPP. And we should expecially be focused on reliability, deployment,
starting and stopping locally or remotely, etc. XMPP's "presence" provides Erlang-process-like
linking of a sort as well. 
<p>
With Erlang's JInterface for Java then a Java process can look like an Erlang process
(distributed or remote). Two or more Java processes can use JInterface to communicate
and "link" reliably and Erlang virtual machines and libraries, save this one single
.jar, do not have to be anywhere in sight. 
</p><p>
To obsess about a single VM is to remain stuck at about 1980 and UCSD Pascal's p-code.
It just should not matter today, and certainly not tomorrow. The forest is now much
more important than any given tree. 
</p><p>
Pay attention to <a href="http://www.infoq.com/interviews/project-zero-cuomo">the
new JVM from IBM</a> in support of their lightweight, fast-start, single-purpose process
philosophy embodied in Project Zero. It's not intended to be a big honkin' run everything
forever virtual machine. It will support JVM languages and the more the merrier in
the sense that such a JVM will enable lightweight pieces to be stiched together dynamically.
However the intention is to perform some interprocess communication and then get out
of the way. Exactly the right approach for any virtual machine. 
</p><p>
Jini clearly is *the* most important thing about Java, ever. But it's lost. Gone.
Buh-bye. Pity.
</p></blockquote>
        <p>
"We need to get over our thinking about "One VM to bring them all and in the darkness
bind them". " <em>Huh?</em> How did we go from "I like virtual machine/execution environments
because of the support they give my code for free" to "One VM to bring them all and
in the darkness bind them"? I truly fail to see the logical connection there. My love
for both the JVM <em>and</em> the CLR has hopefully made itself clear, but maybe Patrick's
only subscribed to the Java/J2EE category bits of my RSS feed. Fact is, I'm coming
to like any virtual machine/execution environment that offers a layer of abstraction
over the details of the underlying platform itself, because developers do not want
to deal with those details. They want to be able to get at them when it becomes necessary,
granted, but the actual details should remain hidden (as best they can, anyway) until
that time.
</p>
        <p>
"Instead we should be focused on improving interprocess communication among various
languages. This can be done with HTTP and XMPP."  I'm sorry, but I'm getting
very very tired of this "HTTP is the best way to communicate" meme that surrounds
the Internet. Yes, HTTP was successful. Nobody is arguing with this. So is FTP. So
is SMTP and POP3. So, for that matter, is XMPP. <em>Each serves a useful purpose,
solving a particular problem.</em> Let's not try to force everything down a single
pipe, shall we? I would hate to be so focused on the tree of HTTP that we lose sight
of the forest of communication protocols.
</p>
        <p>
"And we should expecially <em>[sic]</em> be focused on reliability, deployment, starting
and stopping locally or remotely, etc. XMPP's "presence" provides Erlang-process-like
linking of a sort as well." <em>Yes!</em> XMPP's "presence" aspect is a powerful one,
and heavily underutilized. "Presence", however, is really just a specific form of
"discovery", and quite frankly our enterprise systems need to explore more "discovery"-based
approaches, particularly for resource acquisition and monitoring. I've talked about
this for years.
</p>
        <p>
"To obsess about a single VM is to remain stuck at about 1980 and UCSD Pascal's p-code."
Great one-liner... with no supporting logic, granted, but I'm sure it drew a cheer
from the faithful.
</p>
        <p>
"It just should not matter today, and certainly not tomorrow." For what reason? Based
on what concepts? Look, as much as we want to try and abstract ourselves away from
everything, at some point rubber must meet road, and the semantic details of the platform
you're using--virtual or otherwise--make a huge difference about how you build systems.
For example, Erlang's many-child-processes model works well on Unix, but not as well
on Windows, owing to the heavier startup costs of creating a process under Windows.
For applications that will involve spinning up thousands of processes, Windows is
probably not a good platform to use.
</p>
        <blockquote>
          <p>
            <em>Disclaimer: This "it's heavier to spin up processes on Windows than Unix" belief
is one I've not verified personally; I'm trusting what I've heard from other sources
I know and trust. Under later Windows releases, this may have changed, but my understanding
is that it is still much much faster to spin up a thread on Windows than a separate
process, and that it is only marginally faster to spin up a thread on Unix than a
process, because many Unixes use the process model to "fake" threads, the so-called
LightWeightProcess model.</em>
          </p>
        </blockquote>
        <p>
"The forest is now much more important than any given tree." <em>Yes!</em> And that
means you have to keep an eye on the forest as a whole, which underscores the need
for monitoring and managing capabilities in your programs. Do you want to build this
by hand?
</p>
        <p>
"Pay attention to <a href="http://www.infoq.com/interviews/project-zero-cuomo">the
new JVM from IBM</a> in support of their lightweight, fast-start, single-purpose process
philosophy embodied in Project Zero. It's not intended to be a big honkin' run everything
forever virtual machine. It will support JVM languages and the more the merrier in
the sense that such a JVM will enable lightweight pieces to be stiched together dynamically.
However the intention is to perform some interprocess communication and then get out
of the way. Exactly the right approach for any virtual machine." <em>Yes!</em> You
make my point for me--the point of the virtual machine/execution environment is to
reduce the noise a developer must face, and if IBM's new VM gains us additional reliability
by silently moving work and data between processes, great! But the only way you take
advantage of this is by <em>writing to the JVM</em>. (Or CLR, or Parrot, or whatever.)
If you don't, and instead choose to write to something that doesn't abstract away
from the OS, you have to write all of this supporting infrastructure code yourself.
That sounds like fun, right? Not to mention highly business-ROI-focused?
</p>
        <p>
"Jini clearly is *the* most important thing about Java, ever. But it's lost. Gone.
Buh-bye. Pity." Jini was cool. I liked Jini. Jini got nowhere because Sun all but
abandoned it in its zeal to push the client-server EJB model of life. <em>sigh</em> I
wish they had sought to incorporate more of the discovery elements of Jini into the
J2EE stack (see the previous paragraph). But they didn't, and as a result, Jini is
all but dead.
</p>
        <blockquote>
          <p>
            <em>Disclaimer: I know, I know, Jini isn't really dead. The bits are still there,
you can still download them and run them, and there is a rabidly zealous community
of supporters out there, but as a tool in widespread use and a good bet for an IT
department, it's a non-starter. Oh, and if you're one of those rabidly zealous supporters,
don't bother emailing me to tell me how wrong I am, I won't respond. Don't forget
that FoxPro and OS/2 still have a rabidly zealous community of supporters out there,
too.</em>
          </p>
        </blockquote>
        <p>
Frankly, a comment on Patrick's blog entry really captures my point precisely, so
(hopefully with permission) I will repeat it here:
</p>
        <blockquote>
          <p>
The only argument you made that I can find against sharing VMs is that people should
be focusing on other things. But the main reason for sharing VMs is to allow people
to focus on other things, instead of focusing on creating yet another VM.
</p>
          <p>
You write as if you think creating an entirely new VM from scratch would be easier
than targeting a common VM. Is that really what you think?
</p>
        </blockquote>
        <p>
Couldn't have said it better... though that never stops me from trying. ;-)
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=4b62543c-6d8c-49b9-ae71-3924542c04c0" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>Yet Another Muddled Message</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2008/05/02/Yet+Another+Muddled+Message.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,736bc738-8a46-4698-883f-4f743a9c77c5.aspx</id>
    <published>2008-05-01T17:22:07.7368863-07:00</published>
    <updated>2008-05-01T17:22:07.7368863-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="C++" label="C++" scheme="http://blogs.tedneward.com/CategoryView,category,C%2b%2b.aspx" />
    <category term="F#" label="F#" scheme="http://blogs.tedneward.com/CategoryView,category,F%23.aspx" />
    <category term="Java/J2EE" label="Java/J2EE" scheme="http://blogs.tedneward.com/CategoryView,category,Java%2fJ2EE.aspx" />
    <category term="Languages" label="Languages" scheme="http://blogs.tedneward.com/CategoryView,category,Languages.aspx" />
    <category term="Windows" label="Windows" scheme="http://blogs.tedneward.com/CategoryView,category,Windows.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
This just recently crossed my Inbox, this time from Redmond Developer News, and once
again I'm simply amazed at the audacity of the message and rather far-fetched conclusion:
</p>
        <blockquote>
          <p>
FEEDBACK: THE MOVE FROM J2EE 
</p>
          <p>
On Tuesday, I wrote about BMC's new Application Problem Resolution System 7.0 tooling,
which provides "black box" monitoring and analysis of application behavior to help
improve troubleshooting. 
</p>
          <p>
            <a href="http://reddevnews.com/blogs/weblog.aspx?blog=2146">http://reddevnews.com/blogs/weblog.aspx?blog=2146</a>
          </p>
          <p>
In talking to BMC Director Ran Gishri, I ran across some interesting perspectives
that he was able to offer on the enterprise development space. Among them, the fact
that large orgs seem to be moving away from J2EE and toward a mix of .NET and sundry
lightweight frameworks. 
</p>
          <p>
Richard Eaton, an RDN reader who's a manager of database systems for Georgia System
Operations Corp., confirms Gishri's insights. He wrote: 
</p>
          <p>
"In 2003, we made a decision to build our Web application using Java and a third-party
RAD tool for Java development that was locally supported at that time. Since then,
the company that developed and supported that RAD tool has gone out of business and
left us with virtually no support for the product. The application development that
was done was very integrated into the tool, which meant we would virtually have to
rewrite the entire app. So we analyzed our experience with using Apache, Linux, Java
and Eclipse for our platform and realized the effort was very management-intensive
for our small team, and so we looked to .NET. 
</p>
          <p>
"Considering the advances in the .NET framework and CLR libraries and the integration
it offered to our other third-party tools, as well as our prolific Excel spreadsheet
environment, the decision was easy to go to .NET. We are also moving away from Sybase
databases to SQL Server and looking into the use of SharePoint for various internal
collaboration and project functions. The one-stop shop of Microsoft technology and
support and ease of development and integration, I think, is the overwhelming weight
in deciding between J2EE and .NET."
</p>
        </blockquote>
        <p>
First of all, I'm a little shocked that based on a conversation with one individual,
we can safely infer that "large orgs" are "moving away from J2EE and toward a mix
of .NET and sundry lightweight frameworks". This is fair and unbiased reporting? That's
like going to Houston (home of our current sitting President), or Arizona (home of
the Republican candidate), and discovering that a majority of the voters there will
vote Republican in the next Presidential election. <em>Amazing!</em> Investigative
journalism at its finest.
</p>
        <p>
Of course, no report like this could be taken seriously without some kind of personal
anecdotal evidence as backup, so next we have a heart-rendering tear-jerker of a story
in which a poor company was taken for a ride by those big bad J2EE vendors.... "We
made a decision to build our Web applciation using java and a third-party RAD tool
for Java... Since then, the company that [built] that RAD tool has gone out of business
and left us [screwed]." Uh... wait a minute. Is this a story about moving away from
J2EE, or about moving away from third-party proprietary tools that build code that's
"very integrated into the tool"?
</p>
        <p>
Look, this story doesn't read any better... or any more inaccurately... if we simply
reverse the locations of "J2EE" and ".NET" in it. The problem here is that the company
in question made a questionable decision: to base their application development on
a third-party tool that couldn't be easily supported or replaced in the event the
vendor went south. So when the vendor did tank, they found themselves in a thorny
situation. That's not J2EE's fault. That's the company's fault.
</p>
        <p>
This vetting of the third-party tool (or framework, or library, or ...) is a necessary
precaution regardless of whether you're talking about the J2EE, .NET or native platforms,
and whether that vendor is a commercial vendor <em>or</em> an open-source vendor.
Some will take umbrage at the idea of treating an open-source project as a vendor,
but ask yourself the hard question that few open-source advocates really talk much
about: in the event the project committers abandon the project, are you really prepared
to take up support for it yourself? At Java shows, I frequently ask how many people
in the audience have used Tomcat, and almost 100% of the room raises their hand. I
ask how many have actually looked at the Tomcat source code, and that number goes
down dramatically. Swap in any project you care to name: Hibernate, Ant, Spring, you
name it, lots of Java devs have <em>used</em> them, but few are prepared to <em>support</em> them.
Open source projects have to be seen in the same light as vendors: some will disappear,
some won't, and it's hard to tell which ones are which at the time you're looking
to adopt them, so you're best off assuming the worst and figuring out your strategy.
</p>
        <p>
It's called risk management assessment, and I wish more software development projects
did it.
</p>
        <p>
Does .NET offer integration to "other third-party tools"? Sure, depending on the tools,
which can even include Java/J2EE, if you manage it right. (I should know.) Am I trying
to advocate using J2EE over .NET or vice versa? Hell no--every company has to make
the decision for itself, and every company's context is different. Some will even
find that <em>neither</em> stack works well for them, and choose to go with something
else, a la C++ or Ruby or Perl or... or whatever.
</p>
        <p>
Just make sure you know what you are banking on, and how central (or not) those pieces
are to your strategy.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=736bc738-8a46-4698-883f-4f743a9c77c5" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>Why, Apple, Why?</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2008/04/30/Why+Apple+Why.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,22f8fd95-7172-4fe2-93bb-a9f3f0f92293.aspx</id>
    <published>2008-04-30T00:32:09.7490663-07:00</published>
    <updated>2008-04-30T00:32:09.7490663-07:00</updated>
    <category term="Java/J2EE" label="Java/J2EE" scheme="http://blogs.tedneward.com/CategoryView,category,Java%2fJ2EE.aspx" />
    <category term="Mac OS" label="Mac OS" scheme="http://blogs.tedneward.com/CategoryView,category,Mac%2BOS.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
So I see, via the blogosphere, that <a href="http://developer.apple.com/java/">a Java
6 update is available for the Mac</a>, so I run off to the <a href="http://www.apple.com/support/downloads/javaformacosx105update1.html">Apple
website to download the package</a>. Click on the link, and I'm happy. Wait....
</p>
        <p>
          <em>It's for <a href="http://docs.info.apple.com/article.html?artnum=307403">64-bit
Intel Macs only</a>?!?</em>
        </p>
        <p>
Apple, why do you tease me this way? Why is it that you can build it for 64-bit machines,
but not 32-bit? This just seems entirely spurious and artificial. Somebody please
tell me that it's otherwise, and why, because until then, I'm going to just assume
that Apple doesn't give a whit about Java.
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=22f8fd95-7172-4fe2-93bb-a9f3f0f92293" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>Groovy or JRuby?</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2008/04/29/Groovy+Or+JRuby.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,bd815751-151d-4876-a86b-bc13fc0349ab.aspx</id>
    <published>2008-04-29T00:38:03.8925363-07:00</published>
    <updated>2008-04-29T21:24:03.4897963-07:00</updated>
    <category term=".NET" label=".NET" scheme="http://blogs.tedneward.com/CategoryView,category,.NET.aspx" />
    <category term="C++" label="C++" scheme="http://blogs.tedneward.com/CategoryView,category,C%2b%2b.aspx" />
    <category term="F#" label="F#" scheme="http://blogs.tedneward.com/CategoryView,category,F%23.aspx" />
    <category term="Java/J2EE" label="Java/J2EE" scheme="http://blogs.tedneward.com/CategoryView,category,Java%2fJ2EE.aspx" />
    <category term="Languages" label="Languages" scheme="http://blogs.tedneward.com/CategoryView,category,Languages.aspx" />
    <category term="Parrot" label="Parrot" scheme="http://blogs.tedneward.com/CategoryView,category,Parrot.aspx" />
    <category term="Ruby" label="Ruby" scheme="http://blogs.tedneward.com/CategoryView,category,Ruby.aspx" />
    <category term="Visual Basic" label="Visual Basic" scheme="http://blogs.tedneward.com/CategoryView,category,Visual%2BBasic.aspx" />
    <category term="Windows" label="Windows" scheme="http://blogs.tedneward.com/CategoryView,category,Windows.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recently, it has become the fad to weigh in on the Groovy vs JRuby debate, usually
along the lines of "Which is <em>X</em>?", where <em>X</em> is one of "better", "faster",
"more powerful", "more acceptable", "easier", and so on. (Everybody seems to have
their own adjective/adverb to slide in there, so I won't even begin to try to list
them all.)
</p>
        <p>
Rick Hightower, <a href="http://www.jroller.com/RickHigh/entry/thanks_zed_btw_syntax_matters">in
a blog post</a> from January, weighs in on this and comes down harshly on both Scala
and JRuby. Frankly, I found the whole post to ooze bitterness and maybe a touch of
jealousy. Some of the highlights:
</p>
        <ul>
          <li>
            <strong>"In short: Scala seems like the next over-hyped language."</strong> Rick,
they're <em>all</em> over-hyped, including your own nominee for the Presidential race,
Groovy. I mean, if we're going to weigh this on the grounds of syntax or familiarity,
let's throw {ECMA/Java}script into the ring, since it's: 
<ol><li>
... been around a lot longer than Groovy and therefore a lot more familiar and comfortable
to the programmers that might use either or both, 
</li><li>
... always going to be around, thanks to its inclusion in HTML browsers, and therefore
a good investment in your knowledge portfolio regardless of where you end up using
it, client- or server- or wherever-side, 
</li><li>
... has many, if not all, of the same features that Groovy (or JRuby) supports, 
</li><li>
... runs on top of the JVM (several ways, including Rhino, which ships with JDK 6
now, and FESI), 
</li><li>
... and has Steve Yegge's vote of confidence, so you know is <em>has</em> to be good,
right? 
</li></ol></li>
          <li>
            <strong>"Sun please drop JRuby support. It is a waste of time. Take that money and
spend it on Groovy which has a compatible syntax to Java. ... Does Ruby and Rails
have good ideas? Yes. Borrow them and move on."</strong> This seems like a questionable
decision to me--why cherry-pick features from one language and port them over to a
different language, for no other reason than to say you did? Why not just use said
original language in the first place, assuming it can run on your particular platform?
Down this path lies the madness that C# and VB have become, as the C# and VB teams
seek to create "feature parity" between the two languages, just so that you as a developer
can either have your curly-braces-and-semicolons or not. Stupid. Talk about a waste
of time and energy. Ruby's syntax is (mostly) vetted, the test cases written, and
the featureset understood. Do something <em>different</em> if you're going to create
a new language, don't just take the existing features of a language and put new tokens
around it. In the South, that's called putting lipstick on the pig: it may be prettier
than it was, but underneath, it's still just a pig. (Note: sometimes the new language
is designed specifically to be a subset of the feature set of the source language,
and I'm completely supportive of that--sometimes it's necessary to scale back just
as much as it is to innovate.) 
</li>
          <li>
            <strong>"After reading the Scala docs, my thought is: while the language features
sound great, the syntax makes me want to hurl. Why do things differently just for
the sake of it?"</strong> Strangely enough, they didn't. (This is frequently the complaint
of those who don't understand something. "The designers <em>couldn't</em> have had
a good reason for doing it that way, so it must have been just because they wanted
to do it differently".) Scala's syntax is actually quite consistent in many ways,
particularly if you came from the functional language world, and the underlying rationale
is pretty easy to grok... if you bother spending enough time to find out. Scala drops
static, for example, because it turns out that Java developers spend a fair amount
of time trying to resolve the "should this be a static method or should it be an instance
method on a Singleton object" way too often, for example. See <a href="http://gbracha.blogspot.com/2008/02/cutting-out-static.html">Gilad
Bracha's arguments against static</a> if you want to find out more of the rationale
here. The "def" syntax for method definition is strikingly similar to Groovy, for
the same reason: it makes it clear where a definition is taking place. The name-colon-type
syntax is deliberate because then it's much easier to leave off the type signatures
and let the compiler do the type inferencing for you (a feature, notably, that Rick
says he likes). For what it's worth, Rick, here's a lesson I continue to learn the
hard way: Spend some time learning the <em>why</em> of something before you take aim
and let fly. 
</li>
          <li>
            <strong>"Final words: I declare the "Ruby will rule the world" fallacy officially
over. Remember: Quit pimple pimping Ruby on JRoller! Scala devotees (both of you).
Don't even start!"</strong> Well, frankly, the "Ruby will rule the world" meme was
that over-hyped thing you mentioned earlier, and before anybody starts the next one,
let me nip it in the bud: <em>nothing</em> will take over the world. Nothing <em>has</em> taken
over the world: not C++, not C, not Java, not C#, not Visual Basic, nothing. The best
a language can hope for is to cross what Simon Peyton-Jones calls the "Threshold of
Immortality", and lots of languages have done that, too many to list all of them here,
though you could probably do so yourself. Some of those include Java, C++, C#, C,
Pascal, FORTRAN, COBOL, Perl, Python, Ruby, SQL, maybe even Smalltalk and Lisp and
Scheme and the others we normally don't think about. 
</li>
        </ul>
        <p>
And we haven't even bothered to go into some kind of feature shootout or performance
shootout between any of these guys.
</p>
        <p>
Don't get me wrong--like me, Rick is entirely entitled to his own opinions and he
doesn't owe me (or anybody else) a lick of rationale to defend them. But when he comes
out and suggests that Sun should drop JRuby entirely in favor of Groovy instead, I
feel compelled to point out that there's some logic missing from the reasoning behind
that suggestion. Cynics of this blog will suggest that I'm speaking out of both sides
of my mouth: that I get to say Perl sucks, and get away with it because it's just
one man's opinion but Rick can't say JRuby sucks in turn. Fact is, I'm not suggesting
that Larry Wall and chromatic and the others should drop Perl and go work on something
more meaningful--quite the opposite, in fact: so long as there are people who continue
to use Perl, they have a responsibility to continue to develop and update that language.
And Parrot is quite the interesting VM to explore in its own right. But don't expect
me any time soon to be writing a bunch of Perl code except under strongly-worded protest
to the United Nations.
</p>
        <p>
At the end of the day, the way I think about these languages loosely falls like this:
</p>
        <ul>
          <li>
            <strong>C++.</strong> For me, programing started here, so I will always have a special
place in my heart for it. Templates were vastly more powerful than most people realized
until the STL was released, and even to this day, C++ is usually blamed for the complexities
of memory management even when garbage collector libraries (like the Boehm collector)
were available and could have reduced that complexity significantly. The Boost libraries
just blow my mind, and there's some new stuff coming in C++0X that brings C++ to a
degree of parity with Java and C#. I wish I could get back to this for a project in
the same way that guys fantasize about running into an old high school girlfriend
on a business trip. 
</li>
          <li>
            <strong>C++/CLI.</strong> C++ adapted for the CLR. Interesting idea, but it's hard
to see why I'd use this, given its syntactical and semantical similarities to C#.
Frankly, C++/CLI seems destined to be forever the "glue" language to write managed
wrappers on top of unmanaged C/C++ libraries, and that's hardly a compelling reason
to pick this guy up for anything beyond that niche area. 
</li>
          <li>
            <strong>Java.</strong> The language I want to feature-freeze, though I do see a value
in adding closures, if only to permit closures to enter the design and implementation
of the Java libraries, thus making them widely available across all JVM languages.
However, if I <em>really</em> got my way, we'd drop the closures-in-Java debate entirely
and throw our weight behind John Rose's proposal for method handles in the JVM, since
that would enable the same kind of facilities for libraries and without having to
rev the Java language significantly. (Lesson to the Java community from the CLR community:
not all features of the virtual machine have to be exposed in one language. Not even
C# or VB do this.) The JVM I want to continue to enhance and revise and improve. 
</li>
          <li>
            <strong>Scala.</strong> Functional-object hybrid language for the JVM. Pure goodness.
Hey, I'm bullish here, I admit it. Scala's type inference makes for lower ceremony,
the static type system provides a degree of confidence in code that dynamic languages
don't have without programmer-authored unit tests, and the functional nature offers
a new design dimension that we haven't been able to easily express before. I won't
say that I'm "thinking in Scala", but I'm thinking a lot <em>about</em> Scala these
days, and F# too. 
</li>
          <li>
            <strong>Groovy.</strong> "Ruby meets Java in a bar and has a love child." Groovy's
syntax is easy and based on Java, and that's both a good and a bad thing. Good if
you're a Java programmer who doesn't want to have to reach very far to get some dynamic
goodness; bad if you're trying to avoid some of the stranger or syntactically inconsistent
aspects of the Java language, or looking to do some entirely new ways of doing things.
Personally, I don't find Groovy all that intellectually stimulating, which is both
a blessing and a curse. 
</li>
          <li>
            <strong>JRuby, IronRuby.</strong> Ruby on the JVM. 'nuff said. Ditto for IronRuby
on to CLR. All the linguistic power (and flaws) of Ruby, on top of the JVM/CLR, which
now means it's a far easier sell to the IT boys who run the datacenter. 
</li>
          <li>
            <strong>C#.</strong> The language is great, so long as it retains its original vision
and scope. Memo to the C# team: <em>Please</em> let's not try to make C# into a scripting
language. Scripting languages have a purpose, and that purpose is generally different
from what general-purpose languages do. C# really doesn't need a REPL--don't fall
into the trap of trying to make it into Lisp. 
</li>
          <li>
            <strong>Visual Basic.</strong> The language is great (!), so long as it retains its
original vision and scope. Yes, I think the language is a good one--you don't really
believe how much of a PITA case-sensitivity is until you start programming without
it, and suddenly you realize that it's mostly a holdover from the C days. What right-thinking
programmer overloads a symbolic name by case? Programmers have <em>died</em> for less
than that. So why does case sensitivity matter? More importantly, VB has always been
the dynamic language of choice for millions of programmers, it's time for those of
us from the C++ community to just own up, admit that there was a place for VB after
all, apologize, and let VB go back to being a powerful dynamic language on top of
the CLR. Give it a REPL loop, make it the default choice for building top-of-the-stack
code, and let VB guys build UIs that call into middle-tier components built by C#
and F# guys. Everybody comes out a winner. 
</li>
          <li>
            <strong>F#.</strong> Functional-object hybrid language for the CLR. Pure goodness.
The syntax again will seem quirky and strange to people unused to it, but it makes
a lot of sense, and compositional construction using higher-order functions is a vastly
underestimated and underused design technique. When functions are values, lots of
things become possible, as people working in dynamic languages already know. 
</li>
          <li>
            <strong>Ruby.</strong> "Smalltalk meets Perl in a bar and has a love child." I like
parts of the Ruby syntax, but there's too many Perl-isms in there for my taste. The
fact that Ruby runs on top of its own interpreter (which is neither monitorable nor
manageable using IT-datacenter-established tools) is a significant drawback. RoR may
be great for vertical silo apps that don't need to integrate with the rest of the
datacenter, but that's a pretty scary place to put yourself. 
</li>
          <li>
            <strong>Python.</strong> Dynamic language (goodness) with some functional concepts
(goodness) on its own interpreter (badness) with a radical innovation in syntax called
significant whitespace to do away with brackets to denote code blocks. Significant
whitespace makes it incredibly awkward to embed Python code anywhere but in .py files,
meaning Python's suitability for DSLs is reduced significantly. If I could get Python
without significant whitespace, I'd be a lot happier camper. 
</li>
          <li>
            <strong>Jython/IronPython.</strong> Python on the JVM/CLR. 'nuff said. 
</li>
          <li>
            <strong>Perl.</strong> Parrot good. Perl syntax and philosophy not one I care for.
Use as a shell scripting tool good. Use as a general-purpose programming language
not one I recommend. Perl 6's incredibly delayed departure, very bad, unless you're
one of those who wants to see Perl become extinct. 
</li>
          <li>
            <strong>{ECMA/Java}Script.</strong> Can we please finally just accept that ES is much
more than just a browser extensibility tool? For most developers, this is their first
exposure to a classless prototype-based object-oriented language, and unfortunately,
most developers don't ever bother exploring it beyond "How do I make my web page do
that floating image thing...?" Gah. 
</li>
          <li>
            <strong>Rhino/FESI/JScript.NET.</strong> {ECMA/Java}Script on the JVM/JVM/CLR. 'nuff
said, though I wish the JScript guys would incorporate the E4X bits. JScript on the
CLR makes for an interesting case study, and maybe (hopefully) they'll use it as another
sanity-check for the DLR. 
</li>
          <li>
            <strong>PowerShell.</strong> Scripting language that finally brings much of the power
of bash and tcsh and other shells to the Windows world and unifies a ton of different
things together into one space: WMI, .NET, COM, and more. Highly necessary for IT
admins who've suffered with batch files for decades. Language syntax isn't too bad,
and I could even consider using it in an application/system as an extension language
to give to power users so I can turn them loose to create emergent behavior without
having to keep coming back to me with their feature requests. 
</li>
          <li>
            <strong>Lisp.</strong> With all apologies to Paul Graham, Lisp's window of opportunity
(the "woo" factor, as Jay Zimmerman likes to call it) is essentially gone. We will
always be looking back at it for ideas, I think, but it's very hard to imagine doing
a project that's even remotely near an IT data center in it, for the same reason that
Ruby or Erlang are hard to imagine here: running on top of an execution environment
that doesn't have managability and monitorability baked in is a non-starter for me.
Despite all that, however, programmers owe it to themselves to learn it, because until
somebody points it out, you never realize you're color-blind. There's so many interesting
ideas in here that you don't even realize what you're missing until you explore it. 
</li>
          <li>
            <strong>Scheme.</strong> See Lisp. 
</li>
          <li>
            <strong>Haskell.</strong> Love it or leave it, but you have to learn it. Functional
languages are becoming big, and Haskell is a major influence on them. 
</li>
          <li>
            <strong>ML.</strong> Ditto to Haskell. If you want to see another functional/object
hybrid language based on ML, check out OCaml. Note that OCaml is the direct predecessor
to F# and the two are frequently (deliberately) syntax-compatible. 
</li>
          <li>
            <strong>Erlang.</strong> Joe Armstrong's baby was built to solve a specific set of
problems at Ericsson, and from it we can learn a phenomenal amount about building
massively parallel concurrent programs. The fact that it runs on its own interpreter,
bad.</li>
        </ul>
        <p>
And there's still so many more to learn..... but that's the subject of another blog
post, coming soon.
</p>
        <p>
          <strong>Update:</strong> Naturally, people complained about the languages that were
left off the list. No slight is intended--there's a lot more that I could have included
here, and I will go into each of these in more detail (I hope), but there's only so
much time in the day, and shipping (or posting, in this case) is always a feature.
;-)
</p>
        <img width="0" height="0" src="http://blogs.tedneward.com/aggbug.ashx?id=bd815751-151d-4876-a86b-bc13fc0349ab" />
        <br />
        <hr />
Enterprise consulting, mentoring or instruction. Java, C++, .NET or XML services.
1-day or multi-day workshops available. <a href="mailto:ted@tedneward.com">Contact
me for details</a>.
</div>
    </content>
  </entry>
  <entry>
    <title>Everything that's wrong with &amp;quot;ESB&amp;quot;</title>
    <link rel="alternate" type="text/html" href="http://blogs.tedneward.com/2008/04/25/Everything+Thats+Wrong+With+QuotESBquot.aspx" />
    <id>http://blogs.tedneward.com/PermaLink,guid,002b0306-7f00-4166-98f9-7cdfbc0e79b5.aspx</id>
    <published>2008-04-25T11:33:36.8753813-07:00</published>
    <updated>2008-04-25T11:33:36.8753813-07:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
This email recently crossed my Inbox, and it just completely typifies everything I
find wrong with the ESB:
</p>
        <blockquote>
          <p>
Title: "Architect Complex Integration with ESB's"
</p>
          <p>
Body:
</p>
          <p>
F1000 Keys and Barriers to ESB Success<b><br /></b><b><em>[Event]</em></b></p>
          <p>
            <strong>Event:  <em>[Name struck to protect the guilty]</em></strong>
            <b>
              <br />
              <strong>Date: </strong>
            </b>  <em>[struck]</em><br /><strong>Times:  </strong><em>[struck]</em><br /><strong>Place:   </strong> Online No-Charge Conference 
</p>
          <p>
  
</p>
          <p>
Gartner reports these 2 facts: 
</p>
          <p>
            <strong>1)</strong> F1000 firms increasingly see the Enterprise Service Bus as a “core
component” in their multi-million-dollar Service-Oriented infrastructure investments. 
</p>
          <p>
            <strong>2)</strong> ESB software is by far the fastest growing application integration
middleware market segment in all of IT – with growth rates exceeding 100% year-over-year! 
</p>
          <p>
  
</p>
          <p>
At <strong><em>[EVENT]</em></strong>, you will hear top ESB and business integration
experts from<strong> IBM, Software AG</strong>, and <strong>Progress Software</strong> show
you how F1000 customers design, build and deploy powerful and flexible ESBs—and cut
risks and boost rewards. 
</p>
          <p>
12noon ET (<b>9AM PT</b>): <strong>Case Studies Roundtable (Keynote Panel)</strong></p>
          <p>
In a fast-paced ESB Case Studies Roundtable, you’ll hear 6 F1000 Case Studies. Our
ESB experts will share details on how ESBs improved business value and ROI for their
F1000 customers. 
</p>
          <p>
            <em>[Name struck]</em>
            <br />
            <strong>IBM </strong>
            <i>
              <br />
WW Marketing Content Lead for SOA Reuse and Connectivity</i>
          </p>
          <p>
            <em>[Name struck]</em>
            <br />
            <strong>Software AG</strong>
            <br