<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>tsJensen.com - Commentary</title>
    <link>http://www.tsjensen.com/blog/</link>
    <description />
    <language>en-us</language>
    <copyright>Tyler Jensen</copyright>
    <lastBuildDate>Fri, 13 Aug 2010 03:34:24 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.1.8139.823</generator>
    <managingEditor>tyler@tsjensen.com</managingEditor>
    <webMaster>tyler@tsjensen.com</webMaster>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=e8c95114-f567-4878-a7eb-ca6a326437b4</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,e8c95114-f567-4878-a7eb-ca6a326437b4.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,e8c95114-f567-4878-a7eb-ca6a326437b4.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e8c95114-f567-4878-a7eb-ca6a326437b4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Before you make up your mind about LightSwitch prior to beta release, watch the <a href="http://channel9.msdn.com/posts/funkyonex/Visual-Studio-LightSwitch-Beyond-the-Basics/">new
video on Channel 9</a>. Before you decide that LightSwitch is for non-developers,
watch Joe Binder in this video extend a LightSwitch application with a Silverlight
user control and a custom WCF RIA Service.
</p>
        <p>
The key point, I believe, made in the video is that EVERY LightSwitch application
is essentially a 3-tier application. The extension of the Data Access tier with WCF
RIA Services makes it possible to extend those tiers into the enterprise infrastructure
easily.
</p>
        <p>
          <a href="http://www.tsjensen.com/blog/content/binary/WindowsLiveWriter/VisualStudioLightSwitchBeyondtheBasics_12F5C/lsoverview_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="lsoverview" border="0" alt="lsoverview" src="http://www.tsjensen.com/blog/content/binary/WindowsLiveWriter/VisualStudioLightSwitchBeyondtheBasics_12F5C/lsoverview_thumb.png" width="556" height="305" />
          </a>
        </p>
        <p>
The demo also makes a very important point. When you write a real LightSwitch application,
you will be writing code. While LightSwitch might be appealing to non-professional
or hobbyist or business types, whoever uses it successfully will in fact end up writing
code. Will they have to be an expert developer. Not if they have support from the
enterprise pros that build the infrastructure for the business.
</p>
        <p>
I still want to see and play with the beta before making up my mind, but what I’ve
seen so far looks very promising.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=e8c95114-f567-4878-a7eb-ca6a326437b4" />
      </body>
      <title>Visual Studio LightSwitch Beyond the Basics</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,e8c95114-f567-4878-a7eb-ca6a326437b4.aspx</guid>
      <link>http://www.tsjensen.com/blog/2010/08/13/Visual+Studio+LightSwitch+Beyond+The+Basics.aspx</link>
      <pubDate>Fri, 13 Aug 2010 03:34:24 GMT</pubDate>
      <description>&lt;p&gt;
Before you make up your mind about LightSwitch prior to beta release, watch the &lt;a href="http://channel9.msdn.com/posts/funkyonex/Visual-Studio-LightSwitch-Beyond-the-Basics/"&gt;new
video on Channel 9&lt;/a&gt;. Before you decide that LightSwitch is for non-developers,
watch Joe Binder in this video extend a LightSwitch application with a Silverlight
user control and a custom WCF RIA Service.
&lt;/p&gt;
&lt;p&gt;
The key point, I believe, made in the video is that EVERY LightSwitch application
is essentially a 3-tier application. The extension of the Data Access tier with WCF
RIA Services makes it possible to extend those tiers into the enterprise infrastructure
easily.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.tsjensen.com/blog/content/binary/WindowsLiveWriter/VisualStudioLightSwitchBeyondtheBasics_12F5C/lsoverview_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="lsoverview" border="0" alt="lsoverview" src="http://www.tsjensen.com/blog/content/binary/WindowsLiveWriter/VisualStudioLightSwitchBeyondtheBasics_12F5C/lsoverview_thumb.png" width="556" height="305"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The demo also makes a very important point. When you write a real LightSwitch application,
you will be writing code. While LightSwitch might be appealing to non-professional
or hobbyist or business types, whoever uses it successfully will in fact end up writing
code. Will they have to be an expert developer. Not if they have support from the
enterprise pros that build the infrastructure for the business.
&lt;/p&gt;
&lt;p&gt;
I still want to see and play with the beta before making up my mind, but what I’ve
seen so far looks very promising.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=e8c95114-f567-4878-a7eb-ca6a326437b4" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,e8c95114-f567-4878-a7eb-ca6a326437b4.aspx</comments>
      <category>Commentary</category>
      <category>LightSwitch</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=4e6317a8-0920-4740-a697-07b5138272e6</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,4e6317a8-0920-4740-a697-07b5138272e6.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,4e6317a8-0920-4740-a697-07b5138272e6.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4e6317a8-0920-4740-a697-07b5138272e6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Two days ago, Microsoft unveiled Visual Studio LightSwitch. I heard about it first
on <a href="http://blogs.msdn.com/b/somasegar/archive/2010/08/03/introducing-visual-studio-lightswitch.aspx">Somasegar's
blog</a> and have followed the chatter and the growing list of blog posts and comments.
I watched the <a href="http://channel9.msdn.com/posts/Dan/Jay-Schmelzer-Introducing-Visual-Studio-LightSwitch/">Channel
9 preview video</a> and the <a href="http://www.microsoft.com/visualstudio/en-us/lightswitch">VS
Live keynote video</a> introducing LightSwitch. And then I watched them again making
notes. 
</p>
        <p>
I'm deeply disappointed in a number of bloggers I regularly read and their many commenters
that have parroted their sentiments. I won't name them here. Their negative reactions
demonstrate an ill informed prejudice and predisposition to discount all 4GL tools
without careful analysis and thoughtful evaluation. 
</p>
        <p>
Based on my careful notes of the demo videos and "official" blog posts about the tool,
these bloggers and many commenters have made statements and critical judgments of
LightSwitch that are demonstrably false or grossly inaccurate. And the first early
beta is not even available yet. This rush to judgment ill becomes the professional
stature and experience of these otherwise well respected members of the .NET development
community. 
</p>
        <p>
From a certain point of view, I understand the nearly autonomic reaction of these
.NET development community leaders. Professional developers have long dealt with the
problems that so often plague solutions created by a host of desktop 4GL tools such
as Access, FoxPro, FileMakerPro, PowerBuilder and many others. These tools have been
highly successful in the business world seeking to just get something working that
they could afford. In enough cases to be considered a plague by many professional
developers, these solutions have far exceeded their limits as the business grew and
ran into some of the hard and harsh limitations of these tools. 
</p>
        <p>
Many professional developers have been put into that crucibal of having to tell the
business owner that their pet solution will not scale, has to be completely rewritten,
and the effort will cost mega dollars to get a similar solution that will scale and
grow with their business. The business owner doesn't want to spend the money, so he
insists that the developer just make the 4GL solution work. Happy developers then
fire their client. Needy and miserable developers then swallow their pride and spend
more hours in frustration dealing with a 4GL too they come to hate more often because
the solution wraps around a database that was designed by someone who thinks of dinner
when you say the word table. 
</p>
        <p>
Scott Adams owes his fame and fortune in no small part to the advent of ill conceived
4GL tools and the more horribly designed solutions created with them by the pointy
haired bosses who fancy themselves tech savvy. 
</p>
        <p>
So I understand the rush to judgment, but the facts are not there to support the negativity
and biased ignorance I've seen in so many recent blog posts and comments. 
</p>
        <p>
Anyone can actually take the time to watch the videos and read the official blog posts
and carefully consider what they have learned. Any professional presented with a tool
for solving a problem that has never been satisfactorily solved in the past who automatically
dismisses the latest attempt does himself and those who respect his opinion a disservice. 
</p>
        <p>
Here is what I've learned after reviewing the demostrations and taking detailed notes
and carefully considering the possibilities without making invalid comparisons to
the host of 4GL tools on the market today. 
</p>
        <ul>
          <li>
LightSwitch is NOT a 4GL in the traditional sense of closed source, desktop bound,
proprietary database, with few if any extension points. 
</li>
          <li>
LightSwitch is a set of .NET assemblies and Visual Studio designers and project templates
that produce a model based on XAML from which a Silverlight 4 and WCF RIA Services
solution is generated. 
</li>
          <li>
LightSwitch is a .NET solution and can be extended in Visual Studio Pro (and up) with
standard Silverlight control projects and server side support projects. 
</li>
          <li>
LightSwitch supports three data sources: SQL Server (and SQL Azure), Sharepoint 2010,
and most importantly WCF RIA Services. In fact, SQL Server access in the 3-tier solution
is done via WCF RIA Services and Entity Framework. I was not able to determine exactly
how Sharepoint access is supported under the covers but would assume that the same
solution is generated, with WCF RIA Services providing access to the Sharepoint list
libraries and other Sharepoint data on the host server. 
</li>
          <li>
There is certainly an incoherent marketing message from Redmond on the subject of
the target audience but it is clear that while marketing speak would have business
buyers believe that they will be able to write applications without code, the fact
is that some coding skill will be required to write even the simplest of applications
in LightSwitch where commonly found business rules such as validations and computed
values on existing data sets are required. 
</li>
        </ul>
        <p>
Based on what I've seen so far, it seems the sweet spot for LightSwitch might be the
entry level developer or what one blogger called the "productivity developer" with
professional support from senior developers and architects constructing back end systems,
designing databases and providing safe and simple WCF RIA Services for the less experienced
developer to consume to deliver line of business applications that may never need
the skilled hands of the top notch developers. 
</p>
        <p>
I want to learn more about LightSwitch and see it and play with it before I make up
my mind about its usefulness. I want to see how easy it is to extend and expand a
LightSwitch application in Visual Studio Pro as promised but not demonstrated. I want
to learn more about the extension points. And I want to see and perhaps participate
in providing constructive and informed feedback. More importantly, I want to see what
the Microsoft team does with that feedback. 
</p>
        <p>
Bottom line. It's far too soon to judge. Let's get the beta and provide Microsoft
with some constructive feedback instead of the diatribes I've seen so much of in the
last couple of days.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=4e6317a8-0920-4740-a697-07b5138272e6" />
      </body>
      <title>Microsoft Visual Studio LightSwitch Unfairly Judged Before Beta Released</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,4e6317a8-0920-4740-a697-07b5138272e6.aspx</guid>
      <link>http://www.tsjensen.com/blog/2010/08/06/Microsoft+Visual+Studio+LightSwitch+Unfairly+Judged+Before+Beta+Released.aspx</link>
      <pubDate>Fri, 06 Aug 2010 04:58:58 GMT</pubDate>
      <description>&lt;p&gt;
Two days ago, Microsoft unveiled Visual Studio LightSwitch. I heard about it first
on &lt;a href="http://blogs.msdn.com/b/somasegar/archive/2010/08/03/introducing-visual-studio-lightswitch.aspx"&gt;Somasegar's
blog&lt;/a&gt; and have followed the chatter and the growing list of blog posts and comments.
I watched the &lt;a href="http://channel9.msdn.com/posts/Dan/Jay-Schmelzer-Introducing-Visual-Studio-LightSwitch/"&gt;Channel
9 preview video&lt;/a&gt; and the &lt;a href="http://www.microsoft.com/visualstudio/en-us/lightswitch"&gt;VS
Live keynote video&lt;/a&gt; introducing LightSwitch. And then I watched them again making
notes. 
&lt;p&gt;
I'm deeply disappointed in a number of bloggers I regularly read and their many commenters
that have parroted their sentiments. I won't name them here. Their negative reactions
demonstrate an ill informed prejudice and predisposition to discount all 4GL tools
without careful analysis and thoughtful evaluation. 
&lt;p&gt;
Based on my careful notes of the demo videos and "official" blog posts about the tool,
these bloggers and many commenters have made statements and critical judgments of
LightSwitch that are demonstrably false or grossly inaccurate. And the first early
beta is not even available yet. This rush to judgment ill becomes the professional
stature and experience of these otherwise well respected members of the .NET development
community. 
&lt;p&gt;
From a certain point of view, I understand the nearly autonomic reaction of these
.NET development community leaders. Professional developers have long dealt with the
problems that so often plague solutions created by a host of desktop 4GL tools such
as Access, FoxPro, FileMakerPro, PowerBuilder and many others. These tools have been
highly successful in the business world seeking to just get something working that
they could afford. In enough cases to be considered a plague by many professional
developers, these solutions have far exceeded their limits as the business grew and
ran into some of the hard and harsh limitations of these tools. 
&lt;p&gt;
Many professional developers have been put into that crucibal of having to tell the
business owner that their pet solution will not scale, has to be completely rewritten,
and the effort will cost mega dollars to get a similar solution that will scale and
grow with their business. The business owner doesn't want to spend the money, so he
insists that the developer just make the 4GL solution work. Happy developers then
fire their client. Needy and miserable developers then swallow their pride and spend
more hours in frustration dealing with a 4GL too they come to hate more often because
the solution wraps around a database that was designed by someone who thinks of dinner
when you say the word table. 
&lt;p&gt;
Scott Adams owes his fame and fortune in no small part to the advent of ill conceived
4GL tools and the more horribly designed solutions created with them by the pointy
haired bosses who fancy themselves tech savvy. 
&lt;p&gt;
So I understand the rush to judgment, but the facts are not there to support the negativity
and biased ignorance I've seen in so many recent blog posts and comments. 
&lt;p&gt;
Anyone can actually take the time to watch the videos and read the official blog posts
and carefully consider what they have learned. Any professional presented with a tool
for solving a problem that has never been satisfactorily solved in the past who automatically
dismisses the latest attempt does himself and those who respect his opinion a disservice. 
&lt;p&gt;
Here is what I've learned after reviewing the demostrations and taking detailed notes
and carefully considering the possibilities without making invalid comparisons to
the host of 4GL tools on the market today. 
&lt;ul&gt;
&lt;li&gt;
LightSwitch is NOT a 4GL in the traditional sense of closed source, desktop bound,
proprietary database, with few if any extension points. 
&lt;/li&gt;
&lt;li&gt;
LightSwitch is a set of .NET assemblies and Visual Studio designers and project templates
that produce a model based on XAML from which a Silverlight 4 and WCF RIA Services
solution is generated. 
&lt;/li&gt;
&lt;li&gt;
LightSwitch is a .NET solution and can be extended in Visual Studio Pro (and up) with
standard Silverlight control projects and server side support projects. 
&lt;/li&gt;
&lt;li&gt;
LightSwitch supports three data sources: SQL Server (and SQL Azure), Sharepoint 2010,
and most importantly WCF RIA Services. In fact, SQL Server access in the 3-tier solution
is done via WCF RIA Services and Entity Framework. I was not able to determine exactly
how Sharepoint access is supported under the covers but would assume that the same
solution is generated, with WCF RIA Services providing access to the Sharepoint list
libraries and other Sharepoint data on the host server. 
&lt;/li&gt;
&lt;li&gt;
There is certainly an incoherent marketing message from Redmond on the subject of
the target audience but it is clear that while marketing speak would have business
buyers believe that they will be able to write applications without code, the fact
is that some coding skill will be required to write even the simplest of applications
in LightSwitch where commonly found business rules such as validations and computed
values on existing data sets are required. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Based on what I've seen so far, it seems the sweet spot for LightSwitch might be the
entry level developer or what one blogger called the "productivity developer" with
professional support from senior developers and architects constructing back end systems,
designing databases and providing safe and simple WCF RIA Services for the less experienced
developer to consume to deliver line of business applications that may never need
the skilled hands of the top notch developers. 
&lt;p&gt;
I want to learn more about LightSwitch and see it and play with it before I make up
my mind about its usefulness. I want to see how easy it is to extend and expand a
LightSwitch application in Visual Studio Pro as promised but not demonstrated. I want
to learn more about the extension points. And I want to see and perhaps participate
in providing constructive and informed feedback. More importantly, I want to see what
the Microsoft team does with that feedback. 
&lt;p&gt;
Bottom line. It's far too soon to judge. Let's get the beta and provide Microsoft
with some constructive feedback instead of the diatribes I've seen so much of in the
last couple of days.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=4e6317a8-0920-4740-a697-07b5138272e6" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,4e6317a8-0920-4740-a697-07b5138272e6.aspx</comments>
      <category>Commentary</category>
      <category>LightSwitch</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=dec50524-f573-4080-938e-1ec2d5c5147f</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,dec50524-f573-4080-938e-1ec2d5c5147f.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,dec50524-f573-4080-938e-1ec2d5c5147f.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=dec50524-f573-4080-938e-1ec2d5c5147f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
My absolute favorite feature of Visual Studio 2010, so far, is the javascript Intellisense
support via the &lt;reference&gt; tag. Add the following line to your .js file and
you get jQuery Intellisense.
</p>
        <pre>
          <font color="#008000"> /// &lt;reference path="/scripts/jquery-1.4.1.js" /&gt;<br /></font>
        </pre>
        <p>
My second favorite feature, so far, was just added with the <a href="http://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef">Visual
Studio 2010 Pro Power Tools</a> just released by Microsoft the other day. It is the
Add Reference Search feature. Behold…
</p>
        <p>
          <a href="http://www.tsjensen.com/blog/content/binary/WindowsLiveWriter/AddReferenceSearchwithVisualStudio2010Pr_7944/addrefsrch_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="addrefsrch" border="0" alt="addrefsrch" src="http://www.tsjensen.com/blog/content/binary/WindowsLiveWriter/AddReferenceSearchwithVisualStudio2010Pr_7944/addrefsrch_thumb.png" width="644" height="372" />
          </a>
        </p>
        <p>
There are a bunch of very cool features added by this small but powerful extension
pack, but not having to scroll through a list of assemblies to find the one I’m looking
for is a godsend.
</p>
        <p>
You can read about all the goodies on the <a href="http://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef">download
page</a>, but two other honorable mentions are:
</p>
        <p>
          <strong>Ctrl+Click </strong>is now the equivalent of right click and selecting Go
to Definition. Booyah!
</p>
        <p>
          <strong>Ctrl+Alt+] </strong>on a selected block of assignments will align the = operator
making your code block far more readable.
</p>
        <p>
I highly recommend this extension. Thanks Microsoft!
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=dec50524-f573-4080-938e-1ec2d5c5147f" />
      </body>
      <title>Add Reference Search with Visual Studio 2010 Pro Power Tools</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,dec50524-f573-4080-938e-1ec2d5c5147f.aspx</guid>
      <link>http://www.tsjensen.com/blog/2010/06/10/Add+Reference+Search+With+Visual+Studio+2010+Pro+Power+Tools.aspx</link>
      <pubDate>Thu, 10 Jun 2010 14:37:21 GMT</pubDate>
      <description>&lt;p&gt;
My absolute favorite feature of Visual Studio 2010, so far, is the javascript Intellisense
support via the &amp;lt;reference&amp;gt; tag. Add the following line to your .js file and
you get jQuery Intellisense.
&lt;/p&gt;
&lt;pre&gt;&lt;font color="#008000"&gt; /// &amp;lt;reference path="/scripts/jquery-1.4.1.js" /&amp;gt;&lt;br&gt;
&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;
My second favorite feature, so far, was just added with the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef"&gt;Visual
Studio 2010 Pro Power Tools&lt;/a&gt; just released by Microsoft the other day. It is the
Add Reference Search feature. Behold…
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.tsjensen.com/blog/content/binary/WindowsLiveWriter/AddReferenceSearchwithVisualStudio2010Pr_7944/addrefsrch_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="addrefsrch" border="0" alt="addrefsrch" src="http://www.tsjensen.com/blog/content/binary/WindowsLiveWriter/AddReferenceSearchwithVisualStudio2010Pr_7944/addrefsrch_thumb.png" width="644" height="372"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
There are a bunch of very cool features added by this small but powerful extension
pack, but not having to scroll through a list of assemblies to find the one I’m looking
for is a godsend.
&lt;/p&gt;
&lt;p&gt;
You can read about all the goodies on the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/d0d33361-18e2-46c0-8ff2-4adea1e34fef"&gt;download
page&lt;/a&gt;, but two other honorable mentions are:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ctrl+Click &lt;/strong&gt;is now the equivalent of right click and selecting Go
to Definition. Booyah!
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Ctrl+Alt+] &lt;/strong&gt;on a selected block of assignments will align the = operator
making your code block far more readable.
&lt;/p&gt;
&lt;p&gt;
I highly recommend this extension. Thanks Microsoft!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=dec50524-f573-4080-938e-1ec2d5c5147f" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,dec50524-f573-4080-938e-1ec2d5c5147f.aspx</comments>
      <category>Commentary</category>
      <category>Tools</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=6ef57132-20fb-4d29-9afa-e422b73321a8</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,6ef57132-20fb-4d29-9afa-e422b73321a8.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,6ef57132-20fb-4d29-9afa-e422b73321a8.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6ef57132-20fb-4d29-9afa-e422b73321a8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you leave your door unlocked and someone enters your house for nefarious purposes,
can you blame your lock manufacturer? Will you switch to a new brand of lock? Or if
you open the door and pickup the the strange package you weren’t expecting from your
doorstep, take it into your home and open it, do you sue the contractor or architect
who built your house when it explodes? Do you declare your house to be unsafe and
abandon it to live in a shed?
</p>
        <p>
Well, it seems that if you’re Google, you do.
</p>
        <p>
          <a href="http://www.pcworld.com/article/197659/google_ditches_microsofts_windows_over_security_issues_report_claims.html">PC
World reports</a> today that Google has announced by leak that they will abandon Windows,
blaming Microsoft for the Chinese invasion they suffered in January. Anyone with the
slightest bit of brains knows this is an economic and political stunt and has nothing
to do with security. The Trojan that Google claims allowed the Chinese hackers into
their computers was, <a href="http://www.symantec.com/connect/blogs/hydraq-attack-mythical-proportions">according
to Symantec, entirely preventable</a>.
</p>
        <p>
Now, five months later we learn that rather than admitting the embarrassing fact that
they either left the door unlocked (had un-patched machines) or invited the hackers
in (opened attachments on vulnerable machines), Google is announcing that they will
toss out their rival’s OS to spite their own face. Instead they will jump on the Linux
for the Desktop and Mac OS bandwagon.
</p>
        <p>
That’s fine. It’s a free country. But Google is just as big a target now as they were
then and any honest security expert will tell you that Linux and Mac OS vulnerabilities
exist and are ripe for exploitation. When Google is attacked again after having put
its head in the sand, who will it blame then?
</p>
        <p>
The bottom line is that you cannot blame your security failures on the lock manufacturer
or the contractor who built your house if you’re not even willing to lock the door
or question the anonymous package left at your doorstep. This is Google’s folly. They
have opted for an effectively placed marketing jab against an opponent while leaving
their left flank exposed for another Chinese hack attack. When it comes, will they
blame the President of the United States or the Secretary General of the U.N.? Or
will Google take responsibility for its own security?
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=6ef57132-20fb-4d29-9afa-e422b73321a8" />
      </body>
      <title>Google’s Folly</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,6ef57132-20fb-4d29-9afa-e422b73321a8.aspx</guid>
      <link>http://www.tsjensen.com/blog/2010/06/01/Googles+Folly.aspx</link>
      <pubDate>Tue, 01 Jun 2010 14:42:00 GMT</pubDate>
      <description>&lt;p&gt;
If you leave your door unlocked and someone enters your house for nefarious purposes,
can you blame your lock manufacturer? Will you switch to a new brand of lock? Or if
you open the door and pickup the the strange package you weren’t expecting from your
doorstep, take it into your home and open it, do you sue the contractor or architect
who built your house when it explodes? Do you declare your house to be unsafe and
abandon it to live in a shed?
&lt;/p&gt;
&lt;p&gt;
Well, it seems that if you’re Google, you do.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.pcworld.com/article/197659/google_ditches_microsofts_windows_over_security_issues_report_claims.html"&gt;PC
World reports&lt;/a&gt; today that Google has announced by leak that they will abandon Windows,
blaming Microsoft for the Chinese invasion they suffered in January. Anyone with the
slightest bit of brains knows this is an economic and political stunt and has nothing
to do with security. The Trojan that Google claims allowed the Chinese hackers into
their computers was, &lt;a href="http://www.symantec.com/connect/blogs/hydraq-attack-mythical-proportions"&gt;according
to Symantec, entirely preventable&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Now, five months later we learn that rather than admitting the embarrassing fact that
they either left the door unlocked (had un-patched machines) or invited the hackers
in (opened attachments on vulnerable machines), Google is announcing that they will
toss out their rival’s OS to spite their own face. Instead they will jump on the Linux
for the Desktop and Mac OS bandwagon.
&lt;/p&gt;
&lt;p&gt;
That’s fine. It’s a free country. But Google is just as big a target now as they were
then and any honest security expert will tell you that Linux and Mac OS vulnerabilities
exist and are ripe for exploitation. When Google is attacked again after having put
its head in the sand, who will it blame then?
&lt;/p&gt;
&lt;p&gt;
The bottom line is that you cannot blame your security failures on the lock manufacturer
or the contractor who built your house if you’re not even willing to lock the door
or question the anonymous package left at your doorstep. This is Google’s folly. They
have opted for an effectively placed marketing jab against an opponent while leaving
their left flank exposed for another Chinese hack attack. When it comes, will they
blame the President of the United States or the Secretary General of the U.N.? Or
will Google take responsibility for its own security?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=6ef57132-20fb-4d29-9afa-e422b73321a8" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,6ef57132-20fb-4d29-9afa-e422b73321a8.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=2b74f54e-81b6-4ac0-b9b1-4a276ef82536</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,2b74f54e-81b6-4ac0-b9b1-4a276ef82536.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,2b74f54e-81b6-4ac0-b9b1-4a276ef82536.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2b74f54e-81b6-4ac0-b9b1-4a276ef82536</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Lately I've become alarmed at the negative level of my thinking at times with respect
to my work which can then spill over into my personal life. I've been wondering how
I can more consistently harness all the latent energy in the pressure to deliver within
the constraints of limited resources, tight deadlines and even tighter budgets and
convert that to more positive thinking. 
</p>
        <p>
I know the value of positive thinking and the resultant self-reinforcing confidence.
It leads to greater achievement, productivity and happiness. And yet negative thinking
can so easily overwhelm us when the deck seems stacked against us. 
</p>
        <p>
I was pondering this question when I remembered a post from Seth Godin called <a href="http://sethgodin.typepad.com/seths_blog/2009/09/the-problem-with-positive-thinking.html">The
Problem with Positive Thinking</a>. Here's part of it: 
</p>
        <blockquote>
          <p>
            <font size="3">
              <font face="Times New Roman">
                <em>“All the evidence I've seen shows
that positive thinking and confidence improves performance. In anything. </em>...
Key question then: why do smart people engage in negative thinking? Are they actually
stupid? ... Negative thinking protects us and lowers expectations. ... If positive
thinking was easy, we'd do it all the time. Compounding this difficulty is our belief
that the easy thing (negative thinking) is actually appropriate, it actually works
for us. The data is irrelevant. We're the exception, so we say. </font>
            </font>
            <font size="3" face="Times New Roman">Positive
thinking is hard. Worth it, though.“ (<a href="http://sethgodin.typepad.com/seths_blog/2009/09/the-problem-with-positive-thinking.html">Seth
Godin, September 2009</a>)</font>
          </p>
        </blockquote>
        <p>
Tomorrow, I will actively think more positively. I will lay aside negative thoughts
and entertain only the positive. I will convert and harness the energy of the pressure
to deliver and channel that energy into positive, productive valuable thinking. Wish
me luck!
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=2b74f54e-81b6-4ac0-b9b1-4a276ef82536" />
      </body>
      <title>Convert Pressure to Deliver into Positive Energy and Thinking</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,2b74f54e-81b6-4ac0-b9b1-4a276ef82536.aspx</guid>
      <link>http://www.tsjensen.com/blog/2010/05/25/Convert+Pressure+To+Deliver+Into+Positive+Energy+And+Thinking.aspx</link>
      <pubDate>Tue, 25 May 2010 03:40:24 GMT</pubDate>
      <description>&lt;p&gt;
Lately I've become alarmed at the negative level of my thinking at times with respect
to my work which can then spill over into my personal life. I've been wondering how
I can more consistently harness all the latent energy in the pressure to deliver within
the constraints of limited resources, tight deadlines and even tighter budgets and
convert that to more positive thinking. 
&lt;p&gt;
I know the value of positive thinking and the resultant self-reinforcing confidence.
It leads to greater achievement, productivity and happiness. And yet negative thinking
can so easily overwhelm us when the deck seems stacked against us. 
&lt;p&gt;
I was pondering this question when I remembered a post from Seth Godin called &lt;a href="http://sethgodin.typepad.com/seths_blog/2009/09/the-problem-with-positive-thinking.html"&gt;The
Problem with Positive Thinking&lt;/a&gt;. Here's part of it: &lt;blockquote&gt; 
&lt;p&gt;
&lt;font size="3"&gt;&lt;font face="Times New Roman"&gt;&lt;em&gt;“All the evidence I've seen shows
that positive thinking and confidence improves performance. In anything. &lt;/em&gt;...
Key question then: why do smart people engage in negative thinking? Are they actually
stupid? ... Negative thinking protects us and lowers expectations. ... If positive
thinking was easy, we'd do it all the time. Compounding this difficulty is our belief
that the easy thing (negative thinking) is actually appropriate, it actually works
for us. The data is irrelevant. We're the exception, so we say. &lt;/font&gt;&lt;/font&gt;&lt;font size="3" face="Times New Roman"&gt;Positive
thinking is hard. Worth it, though.“ (&lt;a href="http://sethgodin.typepad.com/seths_blog/2009/09/the-problem-with-positive-thinking.html"&gt;Seth
Godin, September 2009&lt;/a&gt;)&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Tomorrow, I will actively think more positively. I will lay aside negative thoughts
and entertain only the positive. I will convert and harness the energy of the pressure
to deliver and channel that energy into positive, productive valuable thinking. Wish
me luck!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=2b74f54e-81b6-4ac0-b9b1-4a276ef82536" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,2b74f54e-81b6-4ac0-b9b1-4a276ef82536.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=147a8336-ad89-49dd-9bc2-f2cd896b1ddc</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,147a8336-ad89-49dd-9bc2-f2cd896b1ddc.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,147a8336-ad89-49dd-9bc2-f2cd896b1ddc.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=147a8336-ad89-49dd-9bc2-f2cd896b1ddc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Do you have a hard time making decisions? Even the most decisive of us can get caught
in the headlights of the oncoming project train, unable to choose left, right or straight
ahead. Here’s a few strategies that I’ve found useful and sometimes forgotten about
while stuck on the software development analysis thought pot.
</p>
        <ol>
          <li>
Ready, aim, fire! Research, evaluate, decide. Hesitation breeds doubt. Doubt is the
father of indecision. Make a reasonable degree of confidence your standard and avoid
looking for absolute guarantees. There are none.<br />
 </li>
          <li>
Put away fear of failure and accept the fact that there is more than one acceptable
outcome to life’s challenges, including your project. Learn from mistakes but don’t
be too afraid to make new ones.<br />
 </li>
          <li>
Begin. Make a start. Act. No journey or decision can ever be taken without the first
step. Make a small decision, take action and then improve on your progress by evaluating
regularly. Take digestible course correction decisions. Don’t derail your project
by overcorrecting and rolling the bus at full speed.<br />
 </li>
          <li>
Set a decision deadline and stick to it. Lay out an incremental research and evaluation
plan with a list of questions you need answers to in order to make your decision.
If you don’t have a perfect answer, enumerate what you have anyway and incorporate
it into your final decision.<br />
 </li>
          <li>
When the problem is too big and the decision too overwhelming, break it down into
smaller, more specific pieces. Apply the strategies you find effective on the more
manageable elements. Do that until you’ve put all the pieces together and before you
know it, the puzzle will be complete. 
<br />
 </li>
          <li>
If the outcomes of the decision, regardless of the choice, are equally acceptable,
flip a coin. Move on. Don’t waste time dwelling on equally acceptable paths to different
but relatively satisfying conclusions.<br />
 </li>
          <li>
Go crazy. Make a choice even if you don’t have a reasonable level of confidence. Get
off the ice berg and start swimming. Something will happen and that will lead to something
else. It might turn out to have been a mistake, but at least you’ll have momentum
on your side. A moving car is far easier to turn around than one that is parked.<br />
 </li>
          <li>
Put things into perspective. This project decision you’re worrying about, the one
keeping you up at nights. Can it compare with watching your kid’s school play? Will
your client attend your kid’s wedding? Or your funeral? Beyond successful completion
or abject miserable failure on the project, will the outcome have a permanent impact
on your life in the long term? Will it matter to your grandkids? Perspective can be
a powerful decision making tool.<br />
 </li>
          <li>
If you can’t take the plunge off the high dive, run an experiment. Try out your decision
on a smaller scale. See what happens. Take the results and boldly make the real decision.<br />
 </li>
          <li>
Change your point of view. Look for a distraction. Take a walk in a Japanese garden.
See a movie. Read a good book. Take your wife on a date. Go to church. Do something
to get away from it all, even if just for a few hours. Then come back with a few oxygenated
brain cells and make a decision. Ready, aim, fire!</li>
        </ol>
        <p>
What strategies have you found useful when stuck, unable to make a critical choice
on a project? I’d love to hear from you.
</p>
        <p>
          <strong>Update</strong>: I know these are generalized platitudes, but sometimes a
good platitude can spark the inspiration one needs to find a specific solution to
a real problem.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=147a8336-ad89-49dd-9bc2-f2cd896b1ddc" />
      </body>
      <title>Analysis Paralysis: Ten Strategies for Getting Off the Thought Pot</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,147a8336-ad89-49dd-9bc2-f2cd896b1ddc.aspx</guid>
      <link>http://www.tsjensen.com/blog/2010/05/12/Analysis+Paralysis+Ten+Strategies+For+Getting+Off+The+Thought+Pot.aspx</link>
      <pubDate>Wed, 12 May 2010 22:39:46 GMT</pubDate>
      <description>&lt;p&gt;
Do you have a hard time making decisions? Even the most decisive of us can get caught
in the headlights of the oncoming project train, unable to choose left, right or straight
ahead. Here’s a few strategies that I’ve found useful and sometimes forgotten about
while stuck on the software development analysis thought pot.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Ready, aim, fire! Research, evaluate, decide. Hesitation breeds doubt. Doubt is the
father of indecision. Make a reasonable degree of confidence your standard and avoid
looking for absolute guarantees. There are none.&lt;br&gt;
&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
Put away fear of failure and accept the fact that there is more than one acceptable
outcome to life’s challenges, including your project. Learn from mistakes but don’t
be too afraid to make new ones.&lt;br&gt;
&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
Begin. Make a start. Act. No journey or decision can ever be taken without the first
step. Make a small decision, take action and then improve on your progress by evaluating
regularly. Take digestible course correction decisions. Don’t derail your project
by overcorrecting and rolling the bus at full speed.&lt;br&gt;
&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
Set a decision deadline and stick to it. Lay out an incremental research and evaluation
plan with a list of questions you need answers to in order to make your decision.
If you don’t have a perfect answer, enumerate what you have anyway and incorporate
it into your final decision.&lt;br&gt;
&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
When the problem is too big and the decision too overwhelming, break it down into
smaller, more specific pieces. Apply the strategies you find effective on the more
manageable elements. Do that until you’ve put all the pieces together and before you
know it, the puzzle will be complete. 
&lt;br&gt;
&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
If the outcomes of the decision, regardless of the choice, are equally acceptable,
flip a coin. Move on. Don’t waste time dwelling on equally acceptable paths to different
but relatively satisfying conclusions.&lt;br&gt;
&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
Go crazy. Make a choice even if you don’t have a reasonable level of confidence. Get
off the ice berg and start swimming. Something will happen and that will lead to something
else. It might turn out to have been a mistake, but at least you’ll have momentum
on your side. A moving car is far easier to turn around than one that is parked.&lt;br&gt;
&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
Put things into perspective. This project decision you’re worrying about, the one
keeping you up at nights. Can it compare with watching your kid’s school play? Will
your client attend your kid’s wedding? Or your funeral? Beyond successful completion
or abject miserable failure on the project, will the outcome have a permanent impact
on your life in the long term? Will it matter to your grandkids? Perspective can be
a powerful decision making tool.&lt;br&gt;
&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
If you can’t take the plunge off the high dive, run an experiment. Try out your decision
on a smaller scale. See what happens. Take the results and boldly make the real decision.&lt;br&gt;
&amp;nbsp;&lt;/li&gt;
&lt;li&gt;
Change your point of view. Look for a distraction. Take a walk in a Japanese garden.
See a movie. Read a good book. Take your wife on a date. Go to church. Do something
to get away from it all, even if just for a few hours. Then come back with a few oxygenated
brain cells and make a decision. Ready, aim, fire!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
What strategies have you found useful when stuck, unable to make a critical choice
on a project? I’d love to hear from you.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Update&lt;/strong&gt;: I know these are generalized platitudes, but sometimes a
good platitude can spark the inspiration one needs to find a specific solution to
a real problem.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=147a8336-ad89-49dd-9bc2-f2cd896b1ddc" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,147a8336-ad89-49dd-9bc2-f2cd896b1ddc.aspx</comments>
      <category>Commentary</category>
      <category>Enterprise</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=8f688dfb-2690-4545-b841-35efb16b249b</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,8f688dfb-2690-4545-b841-35efb16b249b.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,8f688dfb-2690-4545-b841-35efb16b249b.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8f688dfb-2690-4545-b841-35efb16b249b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In his <a href="http://www.berkshirehathaway.com/letters/2009ltr.pdf">annual letter
to shareholders</a>, Warren Buffett wrote (emphasis added):
</p>
        <blockquote>
          <p>
“We tend to let our many subsidiaries operate on their own, without our supervising
and monitoring them to any degree. That means we are sometimes late in spotting management
problems and that both operating and capital decisions are occasionally made with
which Charlie and I would have disagreed had we been consulted. Most of our managers,
however, use the independence we grant them magnificently, rewarding our confidence
by maintaining an owneroriented attitude that is invaluable and too seldom found in
huge organizations. <strong>We would rather suffer the visible costs of a few bad
decisions than incur the many invisible costs that come from decisions made too slowly
– or not at all – because of a stifling bureaucracy.</strong>”
</p>
        </blockquote>
        <p>
There are times when working in an enterprise can be frustrating because there are
individuals who deliberately and regularly hinder your work while hiding behind the
plausible deniability and comfortable safety of that stifling bureaucracy of which
Warren Buffett so sagely speaks.
</p>
        <p>
The question is what to do when you find yourself in that situation. There can be
only three answers, I believe. Either you succeed in spite of the efforts of well
seasoned bureaucrats and hope that attrition wins the day or you fail while trying
or even give up somewhere along the line, resigning yourself to failure. The third
alternative is that you find another ball field and another team on which to play
and never look back.
</p>
        <p>
Which one would you choose?
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=8f688dfb-2690-4545-b841-35efb16b249b" />
      </body>
      <title>Why I Would Like to Work for Warren Buffett</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,8f688dfb-2690-4545-b841-35efb16b249b.aspx</guid>
      <link>http://www.tsjensen.com/blog/2010/04/16/Why+I+Would+Like+To+Work+For+Warren+Buffett.aspx</link>
      <pubDate>Fri, 16 Apr 2010 14:58:25 GMT</pubDate>
      <description>&lt;p&gt;
In his &lt;a href="http://www.berkshirehathaway.com/letters/2009ltr.pdf"&gt;annual letter
to shareholders&lt;/a&gt;, Warren Buffett wrote (emphasis added):
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
“We tend to let our many subsidiaries operate on their own, without our supervising
and monitoring them to any degree. That means we are sometimes late in spotting management
problems and that both operating and capital decisions are occasionally made with
which Charlie and I would have disagreed had we been consulted. Most of our managers,
however, use the independence we grant them magnificently, rewarding our confidence
by maintaining an owneroriented attitude that is invaluable and too seldom found in
huge organizations. &lt;strong&gt;We would rather suffer the visible costs of a few bad
decisions than incur the many invisible costs that come from decisions made too slowly
– or not at all – because of a stifling bureaucracy.&lt;/strong&gt;”
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
There are times when working in an enterprise can be frustrating because there are
individuals who deliberately and regularly hinder your work while hiding behind the
plausible deniability and comfortable safety of that stifling bureaucracy of which
Warren Buffett so sagely speaks.
&lt;/p&gt;
&lt;p&gt;
The question is what to do when you find yourself in that situation. There can be
only three answers, I believe. Either you succeed in spite of the efforts of well
seasoned bureaucrats and hope that attrition wins the day or you fail while trying
or even give up somewhere along the line, resigning yourself to failure. The third
alternative is that you find another ball field and another team on which to play
and never look back.
&lt;/p&gt;
&lt;p&gt;
Which one would you choose?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=8f688dfb-2690-4545-b841-35efb16b249b" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,8f688dfb-2690-4545-b841-35efb16b249b.aspx</comments>
      <category>Commentary</category>
      <category>Enterprise</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=6a354e3a-58d6-441d-ad97-f375f3436cfb</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,6a354e3a-58d6-441d-ad97-f375f3436cfb.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,6a354e3a-58d6-441d-ad97-f375f3436cfb.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6a354e3a-58d6-441d-ad97-f375f3436cfb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I rarely just parrot-link another blogger’s post, but I’m going to make an exception
here to give props to Chris Sells and his excellent “<a href="http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=12614">The
Performance Implications of IEnumerable vs. IQueryable</a>.”
</p>
        <p>
Chris, the venerated Microsoft Legend, walks us through a great example of where the
use of IEnumerable vs IQueryable can get you into trouble. With a simple swap, Chris
goes from returning every row in a table to a simple count(*).
</p>
        <p>
The critical thing to learn is that IQueryable is “composable” meaning that you can
make one from another before executing the final “outer” query and having the composed
expression parsed and executed. 
</p>
        <p>
One additional note, however, is the gotcha that can bite you on the keester if you’re
not careful. With an IQueryable dependent upon a data context, don’t lose the context
or you’ll end up with:
</p>
        <blockquote>
          <p>
            <font color="#ff0000">
              <strong>ObjectDisposedException:</strong> Cannot access a disposed
object. Object name: 'DataContext accessed after Dispose.'.</font>
          </p>
        </blockquote>
        <p>
So watch out for the dangling context. :)
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=6a354e3a-58d6-441d-ad97-f375f3436cfb" />
      </body>
      <title>Critical Distinction Between IEnumerable and IQueryable in LINQ to SQL or EF</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,6a354e3a-58d6-441d-ad97-f375f3436cfb.aspx</guid>
      <link>http://www.tsjensen.com/blog/2010/04/07/Critical+Distinction+Between+IEnumerable+And+IQueryable+In+LINQ+To+SQL+Or+EF.aspx</link>
      <pubDate>Wed, 07 Apr 2010 02:58:12 GMT</pubDate>
      <description>&lt;p&gt;
I rarely just parrot-link another blogger’s post, but I’m going to make an exception
here to give props to Chris Sells and his excellent “&lt;a href="http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=12614"&gt;The
Performance Implications of IEnumerable vs. IQueryable&lt;/a&gt;.”
&lt;/p&gt;
&lt;p&gt;
Chris, the venerated Microsoft Legend, walks us through a great example of where the
use of IEnumerable vs IQueryable can get you into trouble. With a simple swap, Chris
goes from returning every row in a table to a simple count(*).
&lt;/p&gt;
&lt;p&gt;
The critical thing to learn is that IQueryable is “composable” meaning that you can
make one from another before executing the final “outer” query and having the composed
expression parsed and executed. 
&lt;/p&gt;
&lt;p&gt;
One additional note, however, is the gotcha that can bite you on the keester if you’re
not careful. With an IQueryable dependent upon a data context, don’t lose the context
or you’ll end up with:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font color="#ff0000"&gt;&lt;strong&gt;ObjectDisposedException:&lt;/strong&gt; Cannot access a disposed
object. Object name: 'DataContext accessed after Dispose.'.&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
So watch out for the dangling context. :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=6a354e3a-58d6-441d-ad97-f375f3436cfb" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,6a354e3a-58d6-441d-ad97-f375f3436cfb.aspx</comments>
      <category>Commentary</category>
      <category>LINQ</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=4486310e-140d-4249-9695-b9e5f9143edd</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,4486310e-140d-4249-9695-b9e5f9143edd.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,4486310e-140d-4249-9695-b9e5f9143edd.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4486310e-140d-4249-9695-b9e5f9143edd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The question of the value of third party UI libraries has often come up in my career.
At one time I was an eager advocate of using a comprehensive UI library. Now my attitude
is a bit more pragmatic. 
</p>
        <p>
Third party UI libraries are sometimes a boon and sometimes a bane. Even for well
seasoned UI frameworks. UI libraries for web applications tend to be particularly
troublesome because they so often have a clumsy, heavyweight configuration and API
that end up requiring more time to use than they save while the vendors race to win
the feature count contest. 
</p>
        <p>
For some years, the trend seemed to lean toward the use of UI libraries because building
a UI by hand was hard regardless of whether you were working with spaghetti script
or with Win32 and MFC. Now Microsoft's toolset supports a much richer set of UI paradigms
making the delivery of a great UI much easier right out of the box. The trend seems
to be gravitating away from reliance on third party controls toward a more simplified
user interface style with a more elegant framework relying more on convention than
a feature bloated configuration and black box API. 
</p>
        <p>
One area where UI libraries seem to continue to do well, in my view of course, is
with Silverlight and WPF (XAML) applications. These UI frameworks and their supporting
third party UI control sets seem to have been made for each other. Both rely heavily
on the powerful UI declarative language XAML. The rich user interfaces that can be
spun up using Silverlight or WPF can be intoxicating. 
</p>
        <p>
Ultimately, we need to use UI libraries judiciously, being careful not to overuse
them where requirements and the effort needed to learn and configure them are not
warranted. One could argue that the limited way in which many third party controls
are used in a variety of applications provide us with a bountiful set of examples
of the gratuitous overuse of these libraries. Sometimes all you need is a good closet
and the kitchen sink that comes with that room builder toolkit is just plain old overkill.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=4486310e-140d-4249-9695-b9e5f9143edd" />
      </body>
      <title>Third Party UI Libraries Can Be Overkill</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,4486310e-140d-4249-9695-b9e5f9143edd.aspx</guid>
      <link>http://www.tsjensen.com/blog/2010/04/02/Third+Party+UI+Libraries+Can+Be+Overkill.aspx</link>
      <pubDate>Fri, 02 Apr 2010 04:27:31 GMT</pubDate>
      <description>&lt;p&gt;
The question of the value of third party UI libraries has often come up in my career.
At one time I was an eager advocate of using a comprehensive UI library. Now my attitude
is a bit more pragmatic. 
&lt;p&gt;
Third party UI libraries are sometimes a boon and sometimes a bane. Even for well
seasoned UI frameworks. UI libraries for web applications tend to be particularly
troublesome because they so often have a clumsy, heavyweight configuration and API
that end up requiring more time to use than they save while the vendors race to win
the feature count contest. 
&lt;p&gt;
For some years, the trend seemed to lean toward the use of UI libraries because building
a UI by hand was hard regardless of whether you were working with spaghetti script
or with Win32 and MFC. Now Microsoft's toolset supports a much richer set of UI paradigms
making the delivery of a great UI much easier right out of the box. The trend seems
to be gravitating away from reliance on third party controls toward a more simplified
user interface style with a more elegant framework relying more on convention than
a feature bloated configuration and black box API. 
&lt;p&gt;
One area where UI libraries seem to continue to do well, in my view of course, is
with Silverlight and WPF (XAML) applications. These UI frameworks and their supporting
third party UI control sets seem to have been made for each other. Both rely heavily
on the powerful UI declarative language XAML. The rich user interfaces that can be
spun up using Silverlight or WPF can be intoxicating. 
&lt;p&gt;
Ultimately, we need to use UI libraries judiciously, being careful not to overuse
them where requirements and the effort needed to learn and configure them are not
warranted. One could argue that the limited way in which many third party controls
are used in a variety of applications provide us with a bountiful set of examples
of the gratuitous overuse of these libraries. Sometimes all you need is a good closet
and the kitchen sink that comes with that room builder toolkit is just plain old overkill.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=4486310e-140d-4249-9695-b9e5f9143edd" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,4486310e-140d-4249-9695-b9e5f9143edd.aspx</comments>
      <category>Commentary</category>
      <category>UI</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=ff0abb3d-69f0-4313-ac45-a53f220505ee</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,ff0abb3d-69f0-4313-ac45-a53f220505ee.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,ff0abb3d-69f0-4313-ac45-a53f220505ee.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ff0abb3d-69f0-4313-ac45-a53f220505ee</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I love <a href="http://www.hatrack.com/">Orson Scott Card</a>’s books. My first and
still all time favorite is <a href="http://www.amazon.com/Enders-Game-Orson-Scott-Card/dp/B001JE23GK/ref=sr_1_8?ie=UTF8&amp;s=books&amp;qid=1270005217&amp;sr=1-8">Ender’s
Game</a>.
</p>
        <p>
If you’re not a fan, go read the book anyway. If you are, you already know what I’m
talking about. The iPad is Ender’s desk, or perhaps its precursor.
</p>
        <p>
Here’s a composite I just made thinking of this concept. One image from <a href="http://www.apple.com">Apple</a> and
the other from a very innovative early childhood education software company called <a href="http://www.imaginelearning.com/">Imagine
Learning</a>.
</p>
        <p>
          <a href="http://www.tsjensen.com/blog/content/binary/WindowsLiveWriter/iPadisEndersDeskorItsPrecursor_12B1C/endersdesk_2.jpg">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="endersdesk" border="0" alt="endersdesk" src="http://www.tsjensen.com/blog/content/binary/WindowsLiveWriter/iPadisEndersDeskorItsPrecursor_12B1C/endersdesk_thumb.jpg" width="354" height="304" />
          </a>
        </p>
        <p>
I’ve never wanted to own an Apple 
</p>
        <del>
produce</del>
product (slip of the finger, but an apple is a fruit after all) or develop software
for it until now.
<p>
When I think of the amazing ways that educational content and interactivity could
be delivered to students using this device, I get very excited. And I imagine a very
smart kid hacking the device and sending rude messages to another student. That makes
me more excited for the future of technology than anything I’ve seen lately.
</p><img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=ff0abb3d-69f0-4313-ac45-a53f220505ee" /></body>
      <title>iPad is Ender’s Desk or Its Precursor</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,ff0abb3d-69f0-4313-ac45-a53f220505ee.aspx</guid>
      <link>http://www.tsjensen.com/blog/2010/03/31/iPad+Is+Enders+Desk+Or+Its+Precursor.aspx</link>
      <pubDate>Wed, 31 Mar 2010 03:15:56 GMT</pubDate>
      <description>&lt;p&gt;
I love &lt;a href="http://www.hatrack.com/"&gt;Orson Scott Card&lt;/a&gt;’s books. My first and
still all time favorite is &lt;a href="http://www.amazon.com/Enders-Game-Orson-Scott-Card/dp/B001JE23GK/ref=sr_1_8?ie=UTF8&amp;amp;s=books&amp;amp;qid=1270005217&amp;amp;sr=1-8"&gt;Ender’s
Game&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
If you’re not a fan, go read the book anyway. If you are, you already know what I’m
talking about. The iPad is Ender’s desk, or perhaps its precursor.
&lt;/p&gt;
&lt;p&gt;
Here’s a composite I just made thinking of this concept. One image from &lt;a href="http://www.apple.com"&gt;Apple&lt;/a&gt; and
the other from a very innovative early childhood education software company called &lt;a href="http://www.imaginelearning.com/"&gt;Imagine
Learning&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.tsjensen.com/blog/content/binary/WindowsLiveWriter/iPadisEndersDeskorItsPrecursor_12B1C/endersdesk_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="endersdesk" border="0" alt="endersdesk" src="http://www.tsjensen.com/blog/content/binary/WindowsLiveWriter/iPadisEndersDeskorItsPrecursor_12B1C/endersdesk_thumb.jpg" width="354" height="304"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
I’ve never wanted to own an Apple 
&lt;del&gt;
produce&lt;/del&gt;
product (slip of the finger, but an apple is a fruit after all) or develop software
for it until now.&gt;
&lt;p&gt;
When I think of the amazing ways that educational content and interactivity could
be delivered to students using this device, I get very excited. And I imagine a very
smart kid hacking the device and sending rude messages to another student. That makes
me more excited for the future of technology than anything I’ve seen lately.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=ff0abb3d-69f0-4313-ac45-a53f220505ee" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,ff0abb3d-69f0-4313-ac45-a53f220505ee.aspx</comments>
      <category>Commentary</category>
      <category>Education</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=6af155e5-15cd-4193-97e0-f7a5f1360923</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,6af155e5-15cd-4193-97e0-f7a5f1360923.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,6af155e5-15cd-4193-97e0-f7a5f1360923.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6af155e5-15cd-4193-97e0-f7a5f1360923</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The .NET technology map keeps expanding, but I have my eye on one particular continent,
a little piece of the .NET 4 world I’m calling the Silverlight 4 Enterprise Stack.
There seems to be focus coalescing on this important piece of technology real estate.
</p>
        <p>
The Patterns &amp; Practices team blog has a great post <a href="http://blogs.msdn.com/simplifying_patterns_and_practices/archive/2010/03/15/prism-a-look-ahead.aspx">looking
into the enterprise crystal ball</a>. Be sure to check out their <a href="http://compositewpf.codeplex.com/Wikipage">Prism
(Composite Application Guidance) on CodePlex</a>.
</p>
        <p>
The primary pieces of the Silverlight 4 Enterprise Stack are:
</p>
        <ul>
          <li>
            <a href="http://www.silverlight.net/getstarted/riaservices/">WCF RIA Services</a>
          </li>
          <li>
            <a href="http://msdn.microsoft.com/en-us/magazine/dd458800.aspx#id0090014">Model-View-ViewModel</a> (<a href="http://channel9.msdn.com/learn/courses/Silverlight4/SL4BusinessModule3/SL4LOB_03_02_MVVM/">video</a>)</li>
          <li>
            <a href="http://mef.codeplex.com/Wikipage">Managed Extensibility Framework</a>
          </li>
        </ul>
        <p>
Other supporting players in the stack are:
</p>
        <ul>
          <li>
            <a href="http://msdn.microsoft.com/en-us/data/default.aspx">Entity Framework 4</a> (and
other LINQ DALs like <a href="http://www.plinqo.com/">PLINQO</a>)</li>
          <li>
            <a href="http://msdn.microsoft.com/en-us/netframework/aa663328.aspx">Windows Workflow
Foundation 4</a>
          </li>
        </ul>
        <p>
With the eminent release of these technologies on April 12, we the Enterprise Software
rank and file have much to look forward to in terms of new toys to play with while
delivering some amazing new user experiences in the enterprise world.
</p>
        <p>
If you want to keep tabs on the Silverlight 4 Enterprise Stack, be sure to set your
RSS reader to tap into these key bloggers:
</p>
        <ul>
          <li>
            <a href="http://blogs.msdn.com/brada/archive/2010/03/29/silverlight-4-ria-services-ready-for-business-exposing-wcf-wsdl-services.aspx">Brad
Abrams</a>
          </li>
          <li>
            <a href="http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2010/03/27/silverlight-4-blend-4-mvvm-binding-dependencyobject.aspx">Mike
Taulty</a>
          </li>
          <li>
            <a href="http://timheuer.com/blog/archive/2010/03/29/msdn-radio-follow-up-answers-riaservices-prism.aspx">Tim
Heuer</a>
          </li>
        </ul>
        <p>
For us enterprise software geeks, the year 2010 is shaping up to be a very good year!
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=6af155e5-15cd-4193-97e0-f7a5f1360923" />
      </body>
      <title>Silverlight 4 Enterprise Stack: WCF RIA Services, MVVM and MEF</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,6af155e5-15cd-4193-97e0-f7a5f1360923.aspx</guid>
      <link>http://www.tsjensen.com/blog/2010/03/31/Silverlight+4+Enterprise+Stack+WCF+RIA+Services+MVVM+And+MEF.aspx</link>
      <pubDate>Wed, 31 Mar 2010 02:45:04 GMT</pubDate>
      <description>&lt;p&gt;
The .NET technology map keeps expanding, but I have my eye on one particular continent,
a little piece of the .NET 4 world I’m calling the Silverlight 4 Enterprise Stack.
There seems to be focus coalescing on this important piece of technology real estate.
&lt;/p&gt;
&lt;p&gt;
The Patterns &amp;amp; Practices team blog has a great post &lt;a href="http://blogs.msdn.com/simplifying_patterns_and_practices/archive/2010/03/15/prism-a-look-ahead.aspx"&gt;looking
into the enterprise crystal ball&lt;/a&gt;. Be sure to check out their &lt;a href="http://compositewpf.codeplex.com/Wikipage"&gt;Prism
(Composite Application Guidance) on CodePlex&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The primary pieces of the Silverlight 4 Enterprise Stack are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.silverlight.net/getstarted/riaservices/"&gt;WCF RIA Services&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://msdn.microsoft.com/en-us/magazine/dd458800.aspx#id0090014"&gt;Model-View-ViewModel&lt;/a&gt; (&lt;a href="http://channel9.msdn.com/learn/courses/Silverlight4/SL4BusinessModule3/SL4LOB_03_02_MVVM/"&gt;video&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://mef.codeplex.com/Wikipage"&gt;Managed Extensibility Framework&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Other supporting players in the stack are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://msdn.microsoft.com/en-us/data/default.aspx"&gt;Entity Framework 4&lt;/a&gt; (and
other LINQ DALs like &lt;a href="http://www.plinqo.com/"&gt;PLINQO&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://msdn.microsoft.com/en-us/netframework/aa663328.aspx"&gt;Windows Workflow
Foundation 4&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
With the eminent release of these technologies on April 12, we the Enterprise Software
rank and file have much to look forward to in terms of new toys to play with while
delivering some amazing new user experiences in the enterprise world.
&lt;/p&gt;
&lt;p&gt;
If you want to keep tabs on the Silverlight 4 Enterprise Stack, be sure to set your
RSS reader to tap into these key bloggers:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/brada/archive/2010/03/29/silverlight-4-ria-services-ready-for-business-exposing-wcf-wsdl-services.aspx"&gt;Brad
Abrams&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2010/03/27/silverlight-4-blend-4-mvvm-binding-dependencyobject.aspx"&gt;Mike
Taulty&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://timheuer.com/blog/archive/2010/03/29/msdn-radio-follow-up-answers-riaservices-prism.aspx"&gt;Tim
Heuer&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
For us enterprise software geeks, the year 2010 is shaping up to be a very good year!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=6af155e5-15cd-4193-97e0-f7a5f1360923" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,6af155e5-15cd-4193-97e0-f7a5f1360923.aspx</comments>
      <category>Commentary</category>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=550bdd98-93d3-46da-9492-ea7a463d6fbe</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,550bdd98-93d3-46da-9492-ea7a463d6fbe.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,550bdd98-93d3-46da-9492-ea7a463d6fbe.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=550bdd98-93d3-46da-9492-ea7a463d6fbe</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Let’s face it. Most of us code slingers have no innate understanding of what makes
a great user experience (UX) design. We spend so many hours in front of multiple user
interfaces that navigating and using software becomes virtually intuitive, instinctual.
But we are not “normal” users.
</p>
        <p>
I’ve just finished reading and mean to re-read <a href="http://insidetech.monster.com/training/articles/7977-building-it-skills-25-guiding-principles-for-ux-designers?page=1">Whitney
Hess’s “25 Guiding Principles for UX Designers”</a> on Inside Tech. It’s a great piece
with some very good references. I recommend you read the entire article multiple times.
Here are some of my favorites (my number is not the same as Whitney’s):
</p>
        <p>
          <strong>1. Understand the underlying problem before attempting to solve it.<br /></strong>How often do we just begin coding and throwing a user interface together
without having spent much, if any, time with the target audience to understand their
needs, challenges, skill level and approach to solving the problem currently?
</p>
        <p>
          <strong>2. Make things simple.</strong>
          <br />
How often do we try to put every feature we can pack into a single view thinking to
make the software powerful and reduce round trips to the server or some other resource?
</p>
        <p>
          <strong>3. Provide context.</strong>
          <br />
How often do we place controls or information in a user interface that we consider
convenient but in reality is out of context and will confuse a user who does not understand
what is going on “under the covers” so to speak?
</p>
        <p>
          <strong>4. Be consistent.</strong>
          <br />
How often do we design one page in a certain way only to bounce the user to another
page in a web application that uses a different design paradigm, making the user spend
some time just to figure out where the OK or Cancel button or link is now?
</p>
        <p>
You can read about these and the 21 principles at Whitney’s article (see link above).
I also recommend the following resources, a selection from those Whitney recommends:
</p>
        <p>
UX Principles and Design Guides
</p>
        <ul>
          <li>
            <a href="http://www.google.com/corporate/ux.html">Google</a>
          </li>
          <li>
            <a href="http://msdn.microsoft.com/en-us/library/dd834141.aspx">Windows</a>
          </li>
          <li>
            <a href="http://www.facebook.com/note.php?note_id=118951047792&amp;ref=mf">Facebook</a>
          </li>
          <li>
            <a href="http://usability.gov/guidelines/index.html">U.S. Government</a>
          </li>
          <li>
            <a href="http://www.useit.com/papers/heuristic/heuristic_list.html">Jakob Nielson
(King of Usability)</a>
          </li>
        </ul>
        <p>
If you have some favorite principles of your own, please share them here.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=550bdd98-93d3-46da-9492-ea7a463d6fbe" />
      </body>
      <title>User Experience Principles for Developers</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,550bdd98-93d3-46da-9492-ea7a463d6fbe.aspx</guid>
      <link>http://www.tsjensen.com/blog/2010/03/25/User+Experience+Principles+For+Developers.aspx</link>
      <pubDate>Thu, 25 Mar 2010 16:25:55 GMT</pubDate>
      <description>&lt;p&gt;
Let’s face it. Most of us code slingers have no innate understanding of what makes
a great user experience (UX) design. We spend so many hours in front of multiple user
interfaces that navigating and using software becomes virtually intuitive, instinctual.
But we are not “normal” users.
&lt;/p&gt;
&lt;p&gt;
I’ve just finished reading and mean to re-read &lt;a href="http://insidetech.monster.com/training/articles/7977-building-it-skills-25-guiding-principles-for-ux-designers?page=1"&gt;Whitney
Hess’s “25 Guiding Principles for UX Designers”&lt;/a&gt; on Inside Tech. It’s a great piece
with some very good references. I recommend you read the entire article multiple times.
Here are some of my favorites (my number is not the same as Whitney’s):
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;1. Understand the underlying problem before attempting to solve it.&lt;br&gt;
&lt;/strong&gt;How often do we just begin coding and throwing a user interface together
without having spent much, if any, time with the target audience to understand their
needs, challenges, skill level and approach to solving the problem currently?
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2. Make things simple.&lt;/strong&gt;
&lt;br&gt;
How often do we try to put every feature we can pack into a single view thinking to
make the software powerful and reduce round trips to the server or some other resource?
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;3. Provide context.&lt;/strong&gt;
&lt;br&gt;
How often do we place controls or information in a user interface that we consider
convenient but in reality is out of context and will confuse a user who does not understand
what is going on “under the covers” so to speak?
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;4. Be consistent.&lt;/strong&gt;
&lt;br&gt;
How often do we design one page in a certain way only to bounce the user to another
page in a web application that uses a different design paradigm, making the user spend
some time just to figure out where the OK or Cancel button or link is now?
&lt;/p&gt;
&lt;p&gt;
You can read about these and the 21 principles at Whitney’s article (see link above).
I also recommend the following resources, a selection from those Whitney recommends:
&lt;/p&gt;
&lt;p&gt;
UX Principles and Design Guides
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.google.com/corporate/ux.html"&gt;Google&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/dd834141.aspx"&gt;Windows&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.facebook.com/note.php?note_id=118951047792&amp;amp;ref=mf"&gt;Facebook&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://usability.gov/guidelines/index.html"&gt;U.S. Government&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.useit.com/papers/heuristic/heuristic_list.html"&gt;Jakob Nielson
(King of Usability)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If you have some favorite principles of your own, please share them here.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=550bdd98-93d3-46da-9492-ea7a463d6fbe" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,550bdd98-93d3-46da-9492-ea7a463d6fbe.aspx</comments>
      <category>Commentary</category>
      <category>Usability (UX)</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=f24b707d-af8c-4835-8b54-6de918d95e74</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,f24b707d-af8c-4835-8b54-6de918d95e74.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,f24b707d-af8c-4835-8b54-6de918d95e74.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f24b707d-af8c-4835-8b54-6de918d95e74</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I’ve been giving the question of why software teams fail some considerable thought
in the past few days. Reading Brad Abrams’ post <a href="https://blogs.msdn.com/brada/archive/2007/05/06/pm-tip-12-don-t-waist-keystrokes.aspx">Don’t
Waste Keystrokes</a> and his statement that “By far the biggest problem I see on teams
of &gt; 1 is communication” led me to compile the following list. Here are some of
the reasons, in addition to the most important one that Brad pointed out already,
that a software team, or any team really, fails:
</p>
        <ol>
          <li>
The team does not practice regularly, no coordinated learning.</li>
          <li>
The coach does not know the strengths and weaknesses of the players.</li>
          <li>
The players do not know their role, their zone or the plays.</li>
          <li>
The players do not get along, they are not one in purpose.</li>
          <li>
The players do not trust or respect the coaching staff.</li>
          <li>
The coaching staff puts players with no skill on the starting lineup for unknown reasons
causing resentment amongst the other players and guaranteeing a loss at game time.</li>
          <li>
The players do not believe the coaching staff understand the game.</li>
          <li>
The players are more focused on individual agendas, they do not work together to win.</li>
          <li>
The rules of the game are not well understood and change during the game.</li>
          <li>
The coaching staff and team captains disagree on how the game should be played.</li>
          <li>
The coaching staff recruits new players looking for players who will agree with their
ideas rather than seeking out players who can actually play.</li>
          <li>
The players fail to improve their skills on their own time.</li>
          <li>
The players lack motivation and fail to come to practice and give only a half-hearted
effort in the game.</li>
          <li>
The team captain spends more time arguing with the coaching staff than he does leading
and motivating the players.</li>
          <li>
Winning becomes secondary to just finishing the season.</li>
        </ol>
        <p>
If you can think of any others, please let me know. And if you have ideas for how
to fix these situations, I would love to hear from you as well.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=f24b707d-af8c-4835-8b54-6de918d95e74" />
      </body>
      <title>Why The Software (or Any) Team Fails</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,f24b707d-af8c-4835-8b54-6de918d95e74.aspx</guid>
      <link>http://www.tsjensen.com/blog/2010/03/24/Why+The+Software+Or+Any+Team+Fails.aspx</link>
      <pubDate>Wed, 24 Mar 2010 16:06:34 GMT</pubDate>
      <description>&lt;p&gt;
I’ve been giving the question of why software teams fail some considerable thought
in the past few days. Reading Brad Abrams’ post &lt;a href="https://blogs.msdn.com/brada/archive/2007/05/06/pm-tip-12-don-t-waist-keystrokes.aspx"&gt;Don’t
Waste Keystrokes&lt;/a&gt; and his statement that “By far the biggest problem I see on teams
of &amp;gt; 1 is communication” led me to compile the following list. Here are some of
the reasons, in addition to the most important one that Brad pointed out already,
that a software team, or any team really, fails:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
The team does not practice regularly, no coordinated learning.&lt;/li&gt;
&lt;li&gt;
The coach does not know the strengths and weaknesses of the players.&lt;/li&gt;
&lt;li&gt;
The players do not know their role, their zone or the plays.&lt;/li&gt;
&lt;li&gt;
The players do not get along, they are not one in purpose.&lt;/li&gt;
&lt;li&gt;
The players do not trust or respect the coaching staff.&lt;/li&gt;
&lt;li&gt;
The coaching staff puts players with no skill on the starting lineup for unknown reasons
causing resentment amongst the other players and guaranteeing a loss at game time.&lt;/li&gt;
&lt;li&gt;
The players do not believe the coaching staff understand the game.&lt;/li&gt;
&lt;li&gt;
The players are more focused on individual agendas, they do not work together to win.&lt;/li&gt;
&lt;li&gt;
The rules of the game are not well understood and change during the game.&lt;/li&gt;
&lt;li&gt;
The coaching staff and team captains disagree on how the game should be played.&lt;/li&gt;
&lt;li&gt;
The coaching staff recruits new players looking for players who will agree with their
ideas rather than seeking out players who can actually play.&lt;/li&gt;
&lt;li&gt;
The players fail to improve their skills on their own time.&lt;/li&gt;
&lt;li&gt;
The players lack motivation and fail to come to practice and give only a half-hearted
effort in the game.&lt;/li&gt;
&lt;li&gt;
The team captain spends more time arguing with the coaching staff than he does leading
and motivating the players.&lt;/li&gt;
&lt;li&gt;
Winning becomes secondary to just finishing the season.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
If you can think of any others, please let me know. And if you have ideas for how
to fix these situations, I would love to hear from you as well.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=f24b707d-af8c-4835-8b54-6de918d95e74" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,f24b707d-af8c-4835-8b54-6de918d95e74.aspx</comments>
      <category>Commentary</category>
      <category>Teams</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=df8c9750-3ac0-4095-9762-276751859d75</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,df8c9750-3ac0-4095-9762-276751859d75.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,df8c9750-3ac0-4095-9762-276751859d75.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=df8c9750-3ac0-4095-9762-276751859d75</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Documentation neglect is a chronic problem in most enterprise application development
efforts. This problem is unrelated to the selected development methodology but there
are some who assume that agile methods eliminate documentation despite the agile manifesto's
declaration that we value "working software over comprehensive documentation." It
does not claim that documentation is not needed.
</p>
        <p>
In my own work, I've found that comprehensive documentation authored by well meaning
individuals, or worse a committee, who possess very little technical expertise, is
often written in confusing, lengthy narrative style that requires a linguistic anthropologist
to decipher. Too often development teams spend days pulling out the real features
and requirements and expected behavior from such documents, generally resulting in
many unanswered questions, the answers to which just cannot be found in the comprehensive
documentation.
</p>
        <p>
Recently we have found greater value in documentation that has relatively strict structures
that guide authors to produce specific, detailed and comprehensible documentation.
The format is simple and adopted from the increasingly popular behavior driven design
(BDD) approach.
</p>
        <p>
The goal of this approach is to define desired behavior and clear acceptance criteria
for specific requirements without mashing them all together in a narrative style that
requires time consuming decomposition. Here's the format:
</p>
        <p>
+++++++++<br /><strong>P[n]: Process Title</strong><br />
Two line description of a process (akin to epic user story)
</p>
        <blockquote>
          <p>
            <strong>F[n]: Function Title (a feature or step in the workflow)</strong>
            <br />
As a role<br />
I want action/process description<br />
so that benefit/value of feature.
</p>
          <blockquote>
            <p>
              <strong>AC[n]: Acceptance Criteria or Scenario Title (p1)</strong>
              <br />
Given some initial context (the givens),<br />
when an event occurs,<br />
then ensure some outcomes.
</p>
          </blockquote>
        </blockquote>
        <p>
+++++++++
</p>
        <p>
It's really not different than BDD. There is only one subtle difference which I've
found can make all the difference in the world. the terms used (process, function
and acceptance criteria) are far less scary to the business than terms like epic,
user story and scenario.
</p>
        <p>
Of course, this won't work for every situation, but where you can break documentation
down into logical units that focus on one feature, one thing at a time, you can eliminate
the time consuming deconstruction of comprehensive documentation that can only be
processed by the most advanced computer in the world: the human brain.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=df8c9750-3ac0-4095-9762-276751859d75" />
      </body>
      <title>Behavior Driven Design Documentation in Software Development</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,df8c9750-3ac0-4095-9762-276751859d75.aspx</guid>
      <link>http://www.tsjensen.com/blog/2010/02/05/Behavior+Driven+Design+Documentation+In+Software+Development.aspx</link>
      <pubDate>Fri, 05 Feb 2010 22:33:35 GMT</pubDate>
      <description>&lt;p&gt;
Documentation neglect is a chronic problem in most enterprise application development
efforts. This problem is unrelated to the selected development methodology but there
are some who assume that agile methods eliminate documentation despite the agile manifesto's
declaration that we value "working software over comprehensive documentation." It
does not claim that documentation is not needed.
&lt;/p&gt;
&lt;p&gt;
In my own work, I've found that comprehensive documentation authored by well meaning
individuals, or worse a committee, who possess very little technical expertise, is
often written in confusing, lengthy narrative style that requires a linguistic anthropologist
to decipher. Too often development teams spend days pulling out the real features
and requirements and expected behavior from such documents, generally resulting in
many unanswered questions, the answers to which just cannot be found in the comprehensive
documentation.
&lt;/p&gt;
&lt;p&gt;
Recently we have found greater value in documentation that has relatively strict structures
that guide authors to produce specific, detailed and comprehensible documentation.
The format is simple and adopted from the increasingly popular behavior driven design
(BDD) approach.
&lt;/p&gt;
&lt;p&gt;
The goal of this approach is to define desired behavior and clear acceptance criteria
for specific requirements without mashing them all together in a narrative style that
requires time consuming decomposition. Here's the format:
&lt;/p&gt;
&lt;p&gt;
+++++++++&lt;br /&gt;
&lt;strong&gt;P[n]: Process Title&lt;/strong&gt;
&lt;br /&gt;
Two line description of a process (akin to epic user story)
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;F[n]: Function Title (a feature or step in the workflow)&lt;/strong&gt;
&lt;br /&gt;
As a role&lt;br /&gt;
I want action/process description&lt;br /&gt;
so that benefit/value of feature.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;strong&gt;AC[n]: Acceptance Criteria or Scenario Title (p1)&lt;/strong&gt;
&lt;br /&gt;
Given some initial context (the givens),&lt;br /&gt;
when an event occurs,&lt;br /&gt;
then ensure some outcomes.
&lt;/p&gt;
&lt;/blockquote&gt; &lt;/blockquote&gt; 
&lt;p&gt;
+++++++++
&lt;/p&gt;
&lt;p&gt;
It's really not different than BDD. There is only one subtle difference which I've
found can make all the difference in the world. the terms used (process, function
and acceptance criteria) are far less scary to the business than terms like epic,
user story and scenario.
&lt;/p&gt;
&lt;p&gt;
Of course, this won't work for every situation, but where you can break documentation
down into logical units that focus on one feature, one thing at a time, you can eliminate
the time consuming deconstruction of comprehensive documentation that can only be
processed by the most advanced computer in the world: the human brain.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=df8c9750-3ac0-4095-9762-276751859d75" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,df8c9750-3ac0-4095-9762-276751859d75.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=798fe9e7-0eff-44ed-b75a-f3a4f45ce221</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,798fe9e7-0eff-44ed-b75a-f3a4f45ce221.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,798fe9e7-0eff-44ed-b75a-f3a4f45ce221.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=798fe9e7-0eff-44ed-b75a-f3a4f45ce221</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I’ve not used this blog for politics in the past, but I’m going to start making some
exceptions where I think there is a technology tie-in. <a href="http://www.washingtonpost.com/wp-dyn/content/article/2009/12/04/AR2009120403073.html">George
Will’s piece</a> on the Copenhagen summit was very interesting. I recommend that you
read it. I am not a climatologist but I am a skeptic of all science based on computer
models, especially models that cannot accurately predict the present observable state
of a system.
</p>
        <p>
The recently hacked emails of the Climate Research Unit (CRU) in Britain reveal a
pattern of behavior that would be more consistent with the corrupt leaders of a cult
whose proclaimed tomes of divinely inspired scripture cannot withstand scrutiny should
certain facts be revealed. In the minds of the true believing disciples or the corrupt
leadership of the cult, the ends justify the means. And truth is not a consideration.   
</p>
        <p>
The software models and data upon which all climate change disciples rely are written
by flawed human beings. Whether a software engineer expertly writes the software to
implement his best understanding of the requirements of the scientist or the real
scientist writes the software with a less than perfect knowledge of software engineering
and design, the outcome is the same. (Hey, not even a PhD can know everything.) All
software is flawed. It is the nature of our art.
</p>
        <p>
Can computer models be a good thing? Sure. Especially when they work. Can they be
a bad thing? Well, consider that a climate model must model the entire earth and its
atmosphere. That’s a few million data points (colossal understatement). These models
must have historical data. And there’s the rub. It’s not there. Not really. So we
extrapolate the data using tree cores and ice cores and, wait for it, more computer
models.
</p>
        <p>
Any software engineer knows that such a model will be inherently complex and that
complex systems are inherently flawed and that very complex systems are inherently
very flawed. No software engineer will declare her (or his) faith in such a model
or its output, but more importantly, they would never bet a week’s salary on it’s
accuracy without full testing and confirmation against known observable data and repeatable
tests. Yet, we are preparing to bet trillions of tax payer dollars on these flawed
models. “Hey, Sam, keep your hands out of my pocket!”
</p>
        <p>
The problem we have is that scientists have put their faith in software models and
data produced by software models as the magical source of all truth and knowledge.
They are either the corrupt leaders of a cult (see the CRU emails) or its blind disciples
insisting on the truth of their models even when observable facts contradict and invalidate
those assertions.
</p>
        <p>
The climate change models and extrapolated data have become scripture. The scientists
who preach daily from the pages of that holy writ are held in prophetic awe and reverence
by the ignorant masses of well intentioned politicians and citizens of the earth.
Except for software engineers and the “deniers” of course.
</p>
        <p>
So back to the question. Can computer models be a bad thing? Yes, when the ignorant
or the corrupt use them as an unquestionable, magical affirmation of their own political
agenda or emotional response to the idea that man is killing the planet and that unless
we do something about it, we will all die. Well nobody wants that.
</p>
        <p>
Oddly, we ridicule and persecute religious nuts who do the same thing. I guess they
just weren’t smart enough to get a PhD and call themselves scientists rather than
prophets. Stupid nuts. 
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=798fe9e7-0eff-44ed-b75a-f3a4f45ce221" />
      </body>
      <title>Computer Models – Magical Scripture of the Climate Change Disciples</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,798fe9e7-0eff-44ed-b75a-f3a4f45ce221.aspx</guid>
      <link>http://www.tsjensen.com/blog/2009/12/05/Computer+Models+Magical+Scripture+Of+The+Climate+Change+Disciples.aspx</link>
      <pubDate>Sat, 05 Dec 2009 05:25:26 GMT</pubDate>
      <description>&lt;p&gt;
I’ve not used this blog for politics in the past, but I’m going to start making some
exceptions where I think there is a technology tie-in. &lt;a href="http://www.washingtonpost.com/wp-dyn/content/article/2009/12/04/AR2009120403073.html"&gt;George
Will’s piece&lt;/a&gt; on the Copenhagen summit was very interesting. I recommend that you
read it. I am not a climatologist but I am a skeptic of all science based on computer
models, especially models that cannot accurately predict the present observable state
of a system.
&lt;/p&gt;
&lt;p&gt;
The recently hacked emails of the Climate Research Unit (CRU) in Britain reveal a
pattern of behavior that would be more consistent with the corrupt leaders of a cult
whose proclaimed tomes of divinely inspired scripture cannot withstand scrutiny should
certain facts be revealed. In the minds of the true believing disciples or the corrupt
leadership of the cult, the ends justify the means. And truth is not a consideration.&amp;nbsp;&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
The software models and data upon which all climate change disciples rely are written
by flawed human beings. Whether a software engineer expertly writes the software to
implement his best understanding of the requirements of the scientist or the real
scientist writes the software with a less than perfect knowledge of software engineering
and design, the outcome is the same. (Hey, not even a PhD can know everything.) All
software is flawed. It is the nature of our art.
&lt;/p&gt;
&lt;p&gt;
Can computer models be a good thing? Sure. Especially when they work. Can they be
a bad thing? Well, consider that a climate model must model the entire earth and its
atmosphere. That’s a few million data points (colossal understatement). These models
must have historical data. And there’s the rub. It’s not there. Not really. So we
extrapolate the data using tree cores and ice cores and, wait for it, more computer
models.
&lt;/p&gt;
&lt;p&gt;
Any software engineer knows that such a model will be inherently complex and that
complex systems are inherently flawed and that very complex systems are inherently
very flawed. No software engineer will declare her (or his) faith in such a model
or its output, but more importantly, they would never bet a week’s salary on it’s
accuracy without full testing and confirmation against known observable data and repeatable
tests. Yet, we are preparing to bet trillions of tax payer dollars on these flawed
models. “Hey, Sam, keep your hands out of my pocket!”
&lt;/p&gt;
&lt;p&gt;
The problem we have is that scientists have put their faith in software models and
data produced by software models as the magical source of all truth and knowledge.
They are either the corrupt leaders of a cult (see the CRU emails) or its blind disciples
insisting on the truth of their models even when observable facts contradict and invalidate
those assertions.
&lt;/p&gt;
&lt;p&gt;
The climate change models and extrapolated data have become scripture. The scientists
who preach daily from the pages of that holy writ are held in prophetic awe and reverence
by the ignorant masses of well intentioned politicians and citizens of the earth.
Except for software engineers and the “deniers” of course.
&lt;/p&gt;
&lt;p&gt;
So back to the question. Can computer models be a bad thing? Yes, when the ignorant
or the corrupt use them as an unquestionable, magical affirmation of their own political
agenda or emotional response to the idea that man is killing the planet and that unless
we do something about it, we will all die. Well nobody wants that.
&lt;/p&gt;
&lt;p&gt;
Oddly, we ridicule and persecute religious nuts who do the same thing. I guess they
just weren’t smart enough to get a PhD and call themselves scientists rather than
prophets. Stupid nuts. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=798fe9e7-0eff-44ed-b75a-f3a4f45ce221" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,798fe9e7-0eff-44ed-b75a-f3a4f45ce221.aspx</comments>
      <category>Commentary</category>
      <category>Politics</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=ad4ef672-47d9-4c5a-8629-72037d70d335</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,ad4ef672-47d9-4c5a-8629-72037d70d335.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,ad4ef672-47d9-4c5a-8629-72037d70d335.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ad4ef672-47d9-4c5a-8629-72037d70d335</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Silverlight WCF RIA Services Beta Released was released recently, replacing the preview
bits I’ve been playing with. You can <a href="http://silverlight.net/getstarted/riaservices/">pick
up the new beta here</a>. I'm still using VS 2008 SP1, but I am using Windows 7, so
I <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=76bb3a07-3846-4564-b0c3-27972bcaabce&amp;displaylang=en">download
directly from here</a>. 
</p>
        <p>
          <strong>WARNING!</strong> If you’re not on Windows 7 or Server 2008 R2, you’ll need
the hotfix mentioned. If you're still on XP or Vista, let this be the final reason
to upgrade and do it. You won't regret it. 
</p>
        <p>
I learned first about the beta release from <a href="http://blogs.msdn.com/brada/archive/2009/11/18/welcome-to-wcf-ria-services-beta.aspx">Dan
Abrams blog post</a>. Some coolness he mentions: 
</p>
        <ul>
          <li>
DataSources window. Drag and drop "tables" exposed by Domain Service onto the form.</li>
          <li>
Simplified error handling on client and server.</li>
          <li>
Data model inheritence flows through the Domain Service.</li>
          <li>
Presentation model hides DAL model with CRUD support.</li>
          <li>
Optimized binary channel by default.</li>
          <li>
Integrated into Silverlight 4 installer.</li>
          <li>
Handling of compositional hiearchy in data models.</li>
          <li>
GAC and bin deployment, with bin taking precedence.</li>
          <li>
Globalization support, user state and persisted sign in with updated Business Application
Template.</li>
          <li>
Go-Live bits for .NET 3.5 SP1 and Silverlight 3. 
</li>
        </ul>
        <p>
Another item of note is the name change with the WCF moniker. RIA Services is now
part of the WCF services family along with ADO.NET Data Services. This seems like
a convergence of technologies in an enterprise ready set of tools and services that
will bring Silverlight into the forefront of enterprise application development and
delivery. 
</p>
        <p>
I'll be working on pulling these new bits together and getting my "Aventure" blog
sample back on track with the new Azure SDK bits and these new WCF RIA Services bits.
Given the plethora of changes, I'll likely start over with fresh new project templates
and pull what little customized code that might be needed from my previous blog post
on the topic.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=ad4ef672-47d9-4c5a-8629-72037d70d335" />
      </body>
      <title>Silverlight WCF RIA Services Beta Released</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,ad4ef672-47d9-4c5a-8629-72037d70d335.aspx</guid>
      <link>http://www.tsjensen.com/blog/2009/11/22/Silverlight+WCF+RIA+Services+Beta+Released.aspx</link>
      <pubDate>Sun, 22 Nov 2009 20:50:42 GMT</pubDate>
      <description>&lt;p&gt;
Silverlight WCF RIA Services Beta Released was released recently, replacing the preview
bits I’ve been playing with. You can &lt;a href="http://silverlight.net/getstarted/riaservices/"&gt;pick
up the new beta here&lt;/a&gt;. I'm still using VS 2008 SP1, but I am using Windows 7, so
I &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=76bb3a07-3846-4564-b0c3-27972bcaabce&amp;amp;displaylang=en"&gt;download
directly from here&lt;/a&gt;. 
&lt;p&gt;
&lt;strong&gt;WARNING!&lt;/strong&gt; If you’re not on Windows 7 or Server 2008 R2, you’ll need
the hotfix mentioned. If you're still on XP or Vista, let this be the final reason
to upgrade and do it. You won't regret it. 
&lt;p&gt;
I learned first about the beta release from &lt;a href="http://blogs.msdn.com/brada/archive/2009/11/18/welcome-to-wcf-ria-services-beta.aspx"&gt;Dan
Abrams blog post&lt;/a&gt;. Some coolness he mentions: 
&lt;ul&gt;
&lt;li&gt;
DataSources window. Drag and drop "tables" exposed by Domain Service onto the form.&lt;/li&gt;
&lt;li&gt;
Simplified error handling on client and server.&lt;/li&gt;
&lt;li&gt;
Data model inheritence flows through the Domain Service.&lt;/li&gt;
&lt;li&gt;
Presentation model hides DAL model with CRUD support.&lt;/li&gt;
&lt;li&gt;
Optimized binary channel by default.&lt;/li&gt;
&lt;li&gt;
Integrated into Silverlight 4 installer.&lt;/li&gt;
&lt;li&gt;
Handling of compositional hiearchy in data models.&lt;/li&gt;
&lt;li&gt;
GAC and bin deployment, with bin taking precedence.&lt;/li&gt;
&lt;li&gt;
Globalization support, user state and persisted sign in with updated Business Application
Template.&lt;/li&gt;
&lt;li&gt;
Go-Live bits for .NET 3.5 SP1 and Silverlight 3. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Another item of note is the name change with the WCF moniker. RIA Services is now
part of the WCF services family along with ADO.NET Data Services. This seems like
a convergence of technologies in an enterprise ready set of tools and services that
will bring Silverlight into the forefront of enterprise application development and
delivery. 
&lt;p&gt;
I'll be working on pulling these new bits together and getting my "Aventure" blog
sample back on track with the new Azure SDK bits and these new WCF RIA Services bits.
Given the plethora of changes, I'll likely start over with fresh new project templates
and pull what little customized code that might be needed from my previous blog post
on the topic.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=ad4ef672-47d9-4c5a-8629-72037d70d335" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,ad4ef672-47d9-4c5a-8629-72037d70d335.aspx</comments>
      <category>Commentary</category>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=5dccbf33-6af1-4b51-8fdd-1835877ff517</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,5dccbf33-6af1-4b51-8fdd-1835877ff517.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,5dccbf33-6af1-4b51-8fdd-1835877ff517.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5dccbf33-6af1-4b51-8fdd-1835877ff517</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>Reliability Equals Simplicity</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,5dccbf33-6af1-4b51-8fdd-1835877ff517.aspx</guid>
      <link>http://www.tsjensen.com/blog/2009/09/10/Reliability+Equals+Simplicity.aspx</link>
      <pubDate>Thu, 10 Sep 2009 02:53:36 GMT</pubDate>
      <description>&lt;p&gt;
I am extremely impressed by the sage wisdom of Sir Charles Antony Richard Hoare's &lt;i&gt;The
Emperor's Old Clothes&lt;/i&gt; given at his acceptance of the Turing Award in 1980 and
subsequently published by the Association for Computing Machinery (ACM) in 1981. Here
are my favorite excerpts. I hope you will read the entire text using the link below.
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
"You know, you shouldn't trust us intelligent programmers. We can think up such good
arguments for convincing ourselves and each other of the utterly absurd."&lt;br /&gt;
...&lt;br /&gt;
"Programmers are always surrounded by complexity; we cannot avoid it. Our applications
are complex because we are ambitious to use our computers in ever more sophisticated
ways. Programming is complex because of the large number of conflicting objectives
for each of our programming projects. If our basic tool, the language in which we
design and code our programs, is also complicated, the language itself becomes part
of the problem rather than part of its solution."&lt;br /&gt;
...&lt;br /&gt;
"At first I hoped that such a technically unsound project would collapse but I soon
realized it was doomed to success. Almost anything in software can be implemented,
sold, and even used given enough determination. There is nothing a mere scientist
can say that will stand against the flood of a hundred million dollars. But there
is one quality that cannot be purchased in this way--and that is reliability. The
price of reliability is the pursuit of the utmost simplicity. It is a price which
the very rich find most hard to pay."&lt;br /&gt;
...&lt;br /&gt;
"The mistakes which have made in the last twenty years are being repeated today on
an even grander scale."&lt;br /&gt;
...&lt;br /&gt;
"If only we could learn the right lessons from the successes of the past, we would
not need to learn from our failures."&lt;br /&gt;
...&lt;br /&gt;
"To have our best advice ignored is the common fate of all who take on the role of
consultant, ever since Cassandra pointed out the dangers of bringing a wooden horse
within the walls of Troy."
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The Emperor's Old Clothes&lt;/strong&gt;
&lt;br /&gt;
&lt;a href="http://en.wikipedia.org/wiki/C._A._R._Hoare"&gt;Sir Charles Antony Richard Hoare&lt;/a&gt;
&lt;br /&gt;
Creator of the Quicksort algorithm&lt;br /&gt;
1980 Turing Award Winner&lt;br /&gt;
&amp;copy; 1981 ACM 0001-0782/81/0200-0075
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cs.yale.edu/homes/arvind/cs422/doc/hoare.pdf"&gt;Full text here in
PDF.&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Having accidentally browsed into this today, I reiterate the axiom that complexity
is the enemy of sound software development and hereby recommit to following the path
of simplification, learning more lessons from my successes to avoid more failures
and to sometimes keeping my best advice to myself.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=5dccbf33-6af1-4b51-8fdd-1835877ff517" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,5dccbf33-6af1-4b51-8fdd-1835877ff517.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=239f43bd-0088-41fa-8206-b7647c224eac</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,239f43bd-0088-41fa-8206-b7647c224eac.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,239f43bd-0088-41fa-8206-b7647c224eac.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=239f43bd-0088-41fa-8206-b7647c224eac</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In anticipation of repaving my Vista x64 machine with Windows 7 after the <a href="http://blogs.msdn.com/msdnsubscriptions/archive/2009/07/22/when-will-subscribers-get-windows-7-rtm-august-6th.aspx">MSDN
release on August 6</a>, I’ve prepared my wish list of hardware upgrades I’d like
to do at the same time I pave the machine with the new OS.
</p>
        <p>
Should the family financial officer (FFO) decline to approve my purchase request,
I’ll at least sneak in the SSD purchase.
</p>
        <p>
          <strong>Update </strong>(new list, bigger appetite):
</p>
        <table border="0" cellspacing="0" cellpadding="2" width="450">
          <tbody>
            <tr>
              <td valign="top" width="44">
                <strong>Qty</strong>
              </td>
              <td valign="top" width="327">
                <strong>Description</strong>
              </td>
              <td valign="top" width="77">
                <p align="right">
                  <strong>Price</strong>
                </p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="44">
2</td>
              <td valign="top" width="327">
SUPER TALENT 12GB (3 x 4GB) 240-Pin DDR3 SDRAM DDR3 1333</td>
              <td valign="top" width="77">
                <p align="right">
$ 739.98
</p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="44">
1</td>
              <td valign="top" width="327">
ASUS Z8NA-D6C Dual LGA 1366 Intel 5500 ATX Dual Intel Xeon 5500 Series</td>
              <td valign="top" width="77">
                <p align="right">
259.99
</p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="44">
2</td>
              <td valign="top" width="327">
Intel Xeon E5520 Nehalem 2.26GHz LGA 1366 80W Quad-Core</td>
              <td valign="top" width="77">
                <p align="right">
765.98
</p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="44">
1</td>
              <td valign="top" width="327">
SUPER TALENT MasterDrive SX SAM56GM25S 2.5" 256GB SATA II MLC Internal SSD</td>
              <td valign="top" width="77">
                <p align="right">
629.99
</p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="44">
                <strong>Total</strong>
              </td>
              <td valign="top" width="327">
                <strong>
                </strong>
              </td>
              <td valign="top" width="77">
                <p align="right">
                  <strong>$ 2,395.94</strong>
                </p>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
What plans do you have for your Windows 7 upgrade?
</p>
        <p>
Drool….
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=239f43bd-0088-41fa-8206-b7647c224eac" />
      </body>
      <title>Windows 7 Repave Checklist</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,239f43bd-0088-41fa-8206-b7647c224eac.aspx</guid>
      <link>http://www.tsjensen.com/blog/2009/07/27/Windows+7+Repave+Checklist.aspx</link>
      <pubDate>Mon, 27 Jul 2009 22:30:03 GMT</pubDate>
      <description>&lt;p&gt;
In anticipation of repaving my Vista x64 machine with Windows 7 after the &lt;a href="http://blogs.msdn.com/msdnsubscriptions/archive/2009/07/22/when-will-subscribers-get-windows-7-rtm-august-6th.aspx"&gt;MSDN
release on August 6&lt;/a&gt;, I’ve prepared my wish list of hardware upgrades I’d like
to do at the same time I pave the machine with the new OS.
&lt;/p&gt;
&lt;p&gt;
Should the family financial officer (FFO) decline to approve my purchase request,
I’ll at least sneak in the SSD purchase.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Update &lt;/strong&gt;(new list, bigger appetite):
&lt;/p&gt;
&lt;table border="0" cellspacing="0" cellpadding="2" width="450"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="44"&gt;
&lt;strong&gt;Qty&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="327"&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="77"&gt;
&lt;p align="right"&gt;
&lt;strong&gt;Price&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="44"&gt;
2&lt;/td&gt;
&lt;td valign="top" width="327"&gt;
SUPER TALENT 12GB (3 x 4GB) 240-Pin DDR3 SDRAM DDR3 1333&lt;/td&gt;
&lt;td valign="top" width="77"&gt;
&lt;p align="right"&gt;
$ 739.98
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="44"&gt;
1&lt;/td&gt;
&lt;td valign="top" width="327"&gt;
ASUS Z8NA-D6C Dual LGA 1366 Intel 5500 ATX Dual Intel Xeon 5500 Series&lt;/td&gt;
&lt;td valign="top" width="77"&gt;
&lt;p align="right"&gt;
259.99
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="44"&gt;
2&lt;/td&gt;
&lt;td valign="top" width="327"&gt;
Intel Xeon E5520 Nehalem 2.26GHz LGA 1366 80W Quad-Core&lt;/td&gt;
&lt;td valign="top" width="77"&gt;
&lt;p align="right"&gt;
765.98
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="44"&gt;
1&lt;/td&gt;
&lt;td valign="top" width="327"&gt;
SUPER TALENT MasterDrive SX SAM56GM25S 2.5" 256GB SATA II MLC Internal SSD&lt;/td&gt;
&lt;td valign="top" width="77"&gt;
&lt;p align="right"&gt;
629.99
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="44"&gt;
&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="327"&gt;
&lt;strong&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top" width="77"&gt;
&lt;p align="right"&gt;
&lt;strong&gt;$ 2,395.94&lt;/strong&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
What plans do you have for your Windows 7 upgrade?
&lt;/p&gt;
&lt;p&gt;
Drool….
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=239f43bd-0088-41fa-8206-b7647c224eac" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,239f43bd-0088-41fa-8206-b7647c224eac.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=875a73b4-8d99-4f0c-be1d-296086ba9643</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,875a73b4-8d99-4f0c-be1d-296086ba9643.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,875a73b4-8d99-4f0c-be1d-296086ba9643.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=875a73b4-8d99-4f0c-be1d-296086ba9643</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Here’s the content of the most exciting email I’ve received lately (invite code redacted
of course):
</p>
        <blockquote>
          <p>
            <font color="#0000ff" face="Courier New">Thank you for your interest in Windows® Azure™. </font>
          </p>
          <p>
            <font color="#0000ff" face="Courier New">Your invitation code is xxxxx-xxxxx-xxxxx-xxxxx-xxxxx. </font>
          </p>
          <p>
            <font color="#0000ff">
              <font face="Courier New">You can now sign up for a Windows Azure
account at </font>
              <font face="Courier New">http://lx.azure.microsoft.com/fs</font>
              <font face="Courier New">.
Please keep this email in a safe place. </font>
            </font>
          </p>
          <p>
            <font color="#0000ff" face="Courier New">This invitation to participate in the Windows
Azure Community Technical Preview is subject to the following usage limits: </font>
          </p>
          <p>
            <font color="#0000ff" face="Courier New">       
Total compute usage: 2000 VM hours<br />
        Cloud storage capacity: 50GB<br />
        Total storage bandwidth: 20GB/day </font>
          </p>
          <p>
            <font color="#0000ff" face="Courier New">During the CTP, we reserve the right to suspend
your account activity (this does not imply we will delete your cloud storage) if you
exceed these usage limits. </font>
          </p>
          <p>
            <font color="#0000ff" face="Courier New">Sincerely,<br />
Windows Azure Platform Team </font>
          </p>
          <p>
            <font color="#0000ff" face="Courier New">You have received this email because you
registered as being interested in the Community Technology Preview (CTP) of Windows
Azure. As a participant in the Windows Azure CTP program, you will continue to receive
emails related to that program unless you end your participation by emailing azinvite@microsoft.com
with “END PARTICIPATION” in the subject line. </font>
          </p>
          <p>
            <font color="#0000ff" face="Courier New">To ensure proper delivery of future updates
please add azinvite@microsoft.com to your address book or safe-senders list. </font>
          </p>
          <p>
            <font color="#0000ff" face="Courier New">Microsoft respects your privacy. To learn
more about Microsoft's privacy policy, please click here. </font>
          </p>
          <p>
            <font color="#0000ff" face="Courier New">Microsoft Corporation<br />
One Microsoft Way<br />
Redmond, WA 98052</font>
          </p>
        </blockquote>
        <p>
I’m very excited to begin learning to develop against Azure in all my spare time.
If I learn anything worthy of note here, I’ll share it. Just too many things to dabble
in and too little time.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=875a73b4-8d99-4f0c-be1d-296086ba9643" />
      </body>
      <title>Getting Started with Windows Azure</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,875a73b4-8d99-4f0c-be1d-296086ba9643.aspx</guid>
      <link>http://www.tsjensen.com/blog/2009/07/21/Getting+Started+With+Windows+Azure.aspx</link>
      <pubDate>Tue, 21 Jul 2009 22:26:23 GMT</pubDate>
      <description>&lt;p&gt;
Here’s the content of the most exciting email I’ve received lately (invite code redacted
of course):
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font color="#0000ff" face="Courier New"&gt;Thank you for your interest in Windows® Azure™. &lt;/font&gt; 
&lt;p&gt;
&lt;font color="#0000ff" face="Courier New"&gt;Your invitation code is xxxxx-xxxxx-xxxxx-xxxxx-xxxxx. &lt;/font&gt; 
&lt;p&gt;
&lt;font color="#0000ff"&gt;&lt;font face="Courier New"&gt;You can now sign up for a Windows Azure
account at &lt;/font&gt;&lt;font face="Courier New"&gt;http://lx.azure.microsoft.com/fs&lt;/font&gt;&lt;font face="Courier New"&gt;.
Please keep this email in a safe place. &lt;/font&gt;&lt;/font&gt; 
&lt;p&gt;
&lt;font color="#0000ff" face="Courier New"&gt;This invitation to participate in the Windows
Azure Community Technical Preview is subject to the following usage limits: &lt;/font&gt; 
&lt;p&gt;
&lt;font color="#0000ff" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
Total compute usage: 2000 VM hours&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cloud storage capacity: 50GB&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Total storage bandwidth: 20GB/day &lt;/font&gt; 
&lt;p&gt;
&lt;font color="#0000ff" face="Courier New"&gt;During the CTP, we reserve the right to suspend
your account activity (this does not imply we will delete your cloud storage) if you
exceed these usage limits. &lt;/font&gt; 
&lt;p&gt;
&lt;font color="#0000ff" face="Courier New"&gt;Sincerely,&lt;br&gt;
Windows Azure Platform Team &lt;/font&gt; 
&lt;p&gt;
&lt;font color="#0000ff" face="Courier New"&gt;You have received this email because you
registered as being interested in the Community Technology Preview (CTP) of Windows
Azure. As a participant in the Windows Azure CTP program, you will continue to receive
emails related to that program unless you end your participation by emailing azinvite@microsoft.com
with “END PARTICIPATION” in the subject line. &lt;/font&gt; 
&lt;p&gt;
&lt;font color="#0000ff" face="Courier New"&gt;To ensure proper delivery of future updates
please add azinvite@microsoft.com to your address book or safe-senders list. &lt;/font&gt; 
&lt;p&gt;
&lt;font color="#0000ff" face="Courier New"&gt;Microsoft respects your privacy. To learn
more about Microsoft's privacy policy, please click here. &lt;/font&gt; 
&lt;p&gt;
&lt;font color="#0000ff" face="Courier New"&gt;Microsoft Corporation&lt;br&gt;
One Microsoft Way&lt;br&gt;
Redmond, WA 98052&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I’m very excited to begin learning to develop against Azure in all my spare time.
If I learn anything worthy of note here, I’ll share it. Just too many things to dabble
in and too little time.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=875a73b4-8d99-4f0c-be1d-296086ba9643" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,875a73b4-8d99-4f0c-be1d-296086ba9643.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=403887ab-b317-4901-8770-29deb0dd371a</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,403887ab-b317-4901-8770-29deb0dd371a.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,403887ab-b317-4901-8770-29deb0dd371a.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=403887ab-b317-4901-8770-29deb0dd371a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
With the release of Silverlight 3 on Friday, I’m wondering whether the enterprise
(that mythical stereotype) will adopt Silverlight 3 for line of business (LOB) applications.
The official “what’s new” section included the following items that I found very interesting:
</p>
        <blockquote>
          <p>
            <b>Improving Rich Internet Application Productivity. </b>New features include: 
</p>
          <ul>
            <li>
              <b>60+ controls with source code : </b>Silverlight 3 is packed with over 60 high-quality,
fully skinnable and customizable out-of-the-box controls such as charting and media,
new layout containers such as dock and viewbox, and controls such as autocomplete,
treeview and datagrid. The controls come with nine professional designed themes and
the source code can be modified/recompiled or utilized as-is. Other additions include
multiple selection in listbox controls, file save dialog making it easier to write
files, and support for multiple page applications with navigation. 
</li>
            <li>
              <b>Deep Linking.</b> Silverlight 3 includes support for deep linking, which enables
bookmarking a page within a RIA. 
</li>
            <li>
              <b>Search Engine Optimization (SEO).</b> Silverlight 3 enables users to solve the
SEO-related challenges posed by RIAs.<b></b>By utilizing business objects on the
server, together with ASP.NET controls and site maps, users can automatically mirror
database-driven RIA content into HTML that is easily indexed by the leading search
engines. 
</li>
            <li>
              <b>Enhanced Data Support </b>Silverlight 3 delivers: 
<ul><li><b>Element to Element binding : </b>UI designers use binding between two UI properties
to create compelling UI experiences. Silverlight now enables property binding to CLR
objects and other UI components via XAML, for instance binding a slider value to the
volume control of a media player. 
</li><li><b>Data Forms. </b>The Data Form control provides support for layout of fields, validation,
updating and paging through data. 
</li><li><b>New features for data validation</b> which automatically catch incorrect input
and warn the user with built-in validation controls. 
</li><li><b>Support for business objects</b> on both client and server with n-Tier data support.
Easily load, sort, filter and page data with added support for working with data.
Includes a new built-in CollectionView to perform a set of complex operations against
server side data. A new set of .NET RIA services supports these features on the server. 
</li></ul></li>
            <li>
              <b>Improved performance, </b>through: 
<ul><li><b>Application library caching</b>,<b></b>which reduces the size of applications
by caching framework on the client in order to improve rendering performance. 
</li><li><b>Enhanced Deep Zoom</b>, allows users to fluidly navigate through larger image collections
by zooming.<b></b></li><li><b>Binary XML</b> allows communication with the server to be compressed, greatly increasing
the speed at which data can be exchanged. 
</li><li><b>Local Connection </b>This feature allows communication between two Silverlight
applications on the client-side without incurring a server roundtrip: for instance
a chart in one control can communicate with a datagrid in another. 
</li></ul></li>
          </ul>
        </blockquote>
        <p>
I’ve just downloaded the bits and will begin exploring the new controls and just how
easy it is or is not to build applications. My only criteria at the moment is whether
or not the applications are as easy to build as a Windows Forms application. Obviously
there are far more important evaluation criteria, but I’m wondering whether my stated
criteria here will be the more common question raised in the enterprise. That is,
can we build apps faster, easier, better with this? If not, I’m not sure the enterprise
will get too awfully excited about it unless a clear case can be made for replacing
the often time consuming, error prone web application development process with a simpler
Silverlight 3 development process. 
</p>
        <p>
One way or another, I’m excited about Silverlight 3 and eager to dive in and have
some fun.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=403887ab-b317-4901-8770-29deb0dd371a" />
      </body>
      <title>Will the Enterprise Adopt Silverlight 3 for LOB?</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,403887ab-b317-4901-8770-29deb0dd371a.aspx</guid>
      <link>http://www.tsjensen.com/blog/2009/07/12/Will+The+Enterprise+Adopt+Silverlight+3+For+LOB.aspx</link>
      <pubDate>Sun, 12 Jul 2009 20:59:43 GMT</pubDate>
      <description>&lt;p&gt;
With the release of Silverlight 3 on Friday, I’m wondering whether the enterprise
(that mythical stereotype) will adopt Silverlight 3 for line of business (LOB) applications.
The official “what’s new” section included the following items that I found very interesting:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;b&gt;Improving Rich Internet Application Productivity. &lt;/b&gt;New features include: 
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;60+ controls with source code : &lt;/b&gt;Silverlight 3 is packed with over 60 high-quality,
fully skinnable and customizable out-of-the-box controls such as charting and media,
new layout containers such as dock and viewbox, and controls such as autocomplete,
treeview and datagrid. The controls come with nine professional designed themes and
the source code can be modified/recompiled or utilized as-is. Other additions include
multiple selection in listbox controls, file save dialog making it easier to write
files, and support for multiple page applications with navigation. 
&lt;li&gt;
&lt;b&gt;Deep Linking.&lt;/b&gt; Silverlight 3 includes support for deep linking, which enables
bookmarking a page within a RIA. 
&lt;li&gt;
&lt;b&gt;Search Engine Optimization (SEO).&lt;/b&gt; Silverlight 3 enables users to solve the
SEO-related challenges posed by RIAs.&lt;b&gt; &lt;/b&gt;By utilizing business objects on the
server, together with ASP.NET controls and site maps, users can automatically mirror
database-driven RIA content into HTML that is easily indexed by the leading search
engines. 
&lt;li&gt;
&lt;b&gt;Enhanced Data Support &lt;/b&gt;Silverlight 3 delivers: 
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Element to Element binding : &lt;/b&gt;UI designers use binding between two UI properties
to create compelling UI experiences. Silverlight now enables property binding to CLR
objects and other UI components via XAML, for instance binding a slider value to the
volume control of a media player. 
&lt;li&gt;
&lt;b&gt;Data Forms. &lt;/b&gt;The Data Form control provides support for layout of fields, validation,
updating and paging through data. 
&lt;li&gt;
&lt;b&gt;New features for data validation&lt;/b&gt; which automatically catch incorrect input
and warn the user with built-in validation controls. 
&lt;li&gt;
&lt;b&gt;Support for business objects&lt;/b&gt; on both client and server with n-Tier data support.
Easily load, sort, filter and page data with added support for working with data.
Includes a new built-in CollectionView to perform a set of complex operations against
server side data. A new set of .NET RIA services supports these features on the server. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
&lt;b&gt;Improved performance, &lt;/b&gt;through: 
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Application library caching&lt;/b&gt;,&lt;b&gt; &lt;/b&gt;which reduces the size of applications
by caching framework on the client in order to improve rendering performance. 
&lt;li&gt;
&lt;b&gt;Enhanced Deep Zoom&lt;/b&gt;, allows users to fluidly navigate through larger image collections
by zooming.&lt;b&gt; &lt;/b&gt; 
&lt;li&gt;
&lt;b&gt;Binary XML&lt;/b&gt; allows communication with the server to be compressed, greatly increasing
the speed at which data can be exchanged. 
&lt;li&gt;
&lt;b&gt;Local Connection &lt;/b&gt;This feature allows communication between two Silverlight
applications on the client-side without incurring a server roundtrip: for instance
a chart in one control can communicate with a datagrid in another. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I’ve just downloaded the bits and will begin exploring the new controls and just how
easy it is or is not to build applications. My only criteria at the moment is whether
or not the applications are as easy to build as a Windows Forms application. Obviously
there are far more important evaluation criteria, but I’m wondering whether my stated
criteria here will be the more common question raised in the enterprise. That is,
can we build apps faster, easier, better with this? If not, I’m not sure the enterprise
will get too awfully excited about it unless a clear case can be made for replacing
the often time consuming, error prone web application development process with a simpler
Silverlight 3 development process. 
&lt;/p&gt;
&lt;p&gt;
One way or another, I’m excited about Silverlight 3 and eager to dive in and have
some fun.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=403887ab-b317-4901-8770-29deb0dd371a" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,403887ab-b317-4901-8770-29deb0dd371a.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=0ed810f1-4207-4bef-983b-be2dfed6745c</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,0ed810f1-4207-4bef-983b-be2dfed6745c.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,0ed810f1-4207-4bef-983b-be2dfed6745c.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0ed810f1-4207-4bef-983b-be2dfed6745c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
After a long search for the right business process management platform that would
allow us to integrate and extend with .NET, my team selected the <a href="http://www.ultimus.com/pages/12/Ultimus-BPM-suite-Adaptive-BPM-Suite/">Ultimus
BPM Suite</a>. The primary factors in the decision were the comprehensive nature of
the solution which would allow us to deploy process management without requiring the
use of some other tool such as InfoPath or SharePoint. Additionally, the solution
would allow an incomplete process to be deployed and have assigned "process experts"
make final decisions about business rules that may not have been clear or available
at the time the process was designed.
</p>
        <p>
I spent all of last week at their North Carolina offices in a "jumpstart" training
course and met many of the key players at the company. Good people all around. Their
technical expertise and willingness to listen to our team's concerns were impressive.
There were a few minor UI glitches that we brought to their attention such as some
scrolling issues when designing a process with limited screen real estate. The Ultimus
people were genuinely interested in our input.
</p>
        <p>
Having initially found and recommended the product, I was even more impressed with
the product as we went through detailed training that brought out a number of features
and illustrated an architecture that gave me even greater confidence in the product.
This was particularly true in the area of integration points with existing systems
and the ability to extend the process using custom developed controls or even process
context aware ASP.NET pages hosted outside of the process server.
</p>
        <p>
Our only disappointment was that some of the the training session content could have
been improved as at times some of the class members were left a little lost and fell
behind. This was in part because the "jumpstart" course was designed to fit a lot
of material into a few days, but it was in part due to a lack of maturity in the content
and presentation. We were very candid with the Ultimus training director about this
and he took our input eagerly and promised improvement. Based on my conversations
with key Ultimus employees, I believe that will happen.
</p>
        <p>
If you are looking for a better way to deliver business process management and enterprise
human-centric workflow solutions, you should consider Ultimus. There were other systems
that were much more expensive that may have fit our requirements, but this was the
only one we found that allowed us the freedom to extend and customize using our .NET
dev skills without requiring coding skills to design and modify and manage processes. 
</p>
        <p>
I'll be writing more about Ultimus as our experience with the product continues. 
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=0ed810f1-4207-4bef-983b-be2dfed6745c" />
      </body>
      <title>Business Process Management with Ultimus and .NET</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,0ed810f1-4207-4bef-983b-be2dfed6745c.aspx</guid>
      <link>http://www.tsjensen.com/blog/2008/12/11/Business+Process+Management+With+Ultimus+And+NET.aspx</link>
      <pubDate>Thu, 11 Dec 2008 15:37:43 GMT</pubDate>
      <description>&lt;p&gt;
After a long search for the right business process management platform that would
allow us to integrate and extend with .NET, my team selected the &lt;a href="http://www.ultimus.com/pages/12/Ultimus-BPM-suite-Adaptive-BPM-Suite/"&gt;Ultimus
BPM Suite&lt;/a&gt;. The primary factors in the decision were the comprehensive nature of
the solution which would allow us to deploy process management without requiring the
use of some other tool such as InfoPath or SharePoint. Additionally, the solution
would allow an incomplete process to be deployed and have assigned "process experts"
make final decisions about business rules that may not have been clear or available
at the time the process was designed.
&lt;/p&gt;
&lt;p&gt;
I spent all of last week at their North Carolina offices in a "jumpstart" training
course and met many of the key players at the company. Good people all around. Their
technical expertise and willingness to listen to our team's concerns were impressive.
There were a few minor UI glitches that we brought to their attention such as some
scrolling issues when designing a process with limited screen real estate. The Ultimus
people were genuinely interested in our input.
&lt;/p&gt;
&lt;p&gt;
Having initially found and recommended the product, I was even more impressed with
the product as we went through detailed training that brought out a number of features
and illustrated an architecture that gave me even greater confidence in the product.
This was particularly true in the area of integration points with existing systems
and the ability to extend the process using custom developed controls or even process
context aware ASP.NET pages hosted outside of the process server.
&lt;/p&gt;
&lt;p&gt;
Our only disappointment was that some of the the training session content could have
been improved as at times some of the class members were left a little lost and fell
behind. This was in part because the "jumpstart" course was designed to fit a lot
of material into a few days, but it was in part due to a lack of maturity in the content
and presentation. We were very candid with the Ultimus training director about this
and he took our input eagerly and promised improvement. Based on my conversations
with key Ultimus employees, I believe that will happen.
&lt;/p&gt;
&lt;p&gt;
If you are looking for a better way to deliver business process management and enterprise
human-centric workflow solutions, you should consider Ultimus. There were other systems
that were much more expensive that may have fit our requirements, but this was the
only one we found that allowed us the freedom to extend and customize using our .NET
dev skills without requiring coding skills to design and modify and manage processes. 
&lt;/p&gt;
&lt;p&gt;
I'll be writing more about Ultimus as our experience with the product continues. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=0ed810f1-4207-4bef-983b-be2dfed6745c" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,0ed810f1-4207-4bef-983b-be2dfed6745c.aspx</comments>
      <category>Commentary</category>
      <category>Review</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=3c0819ae-c91c-4971-bd16-089cf017cb9b</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,3c0819ae-c91c-4971-bd16-089cf017cb9b.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,3c0819ae-c91c-4971-bd16-089cf017cb9b.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3c0819ae-c91c-4971-bd16-089cf017cb9b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The following spam message (less the links) skipped through my spam filters somehow.
If you are not a native speaker of English, this message may appear to be in order
if your skill level with the language is limited. Otherwise, I suspect you will find
this text as amusing as I did. I have not modified a single character. Enjoy...
</p>
        <blockquote> welcome to order, 
<br />
Our company is one of the largest wholesalers in Asia ,and we sell products to all
over the world,we have the authorithed licence issured by Chinese government,all products
in our company ranges from varieties of electronic products like mobilephone ,television,
laptop,DVD,GPS,MP3/4 to photograph video game ,scanner, motorcycle prohector and so
on.. 
<br />
We have earned our reputation in the world through our honesty business practice in
the past years,and obtained many compliments from our clients globally.As we are the
direct wholesalers for many reputable brands in the world,so all the products purchased
in our website are promised to be at a lower price with the high quality,also all
the facuty products will be returned within 7 days,exchange within 14 days,repair
within 2 years without charge.<br />
We will be right here waiting for your visitation. </blockquote>
        <p>
I hope that as software architects and engineers we are producing code and other textual
artifacts that communicate with greater clarity and understanding of the language
and idiom in which we express our ideas. Do we write documentation as badly because
we can only communicate clearly in code? Or vice versa? It is something to think about.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=3c0819ae-c91c-4971-bd16-089cf017cb9b" />
      </body>
      <title>Automated Translation Not Spammer Friendly</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,3c0819ae-c91c-4971-bd16-089cf017cb9b.aspx</guid>
      <link>http://www.tsjensen.com/blog/2008/12/07/Automated+Translation+Not+Spammer+Friendly.aspx</link>
      <pubDate>Sun, 07 Dec 2008 18:19:36 GMT</pubDate>
      <description>&lt;p&gt;
The following spam message (less the links) skipped through my spam filters somehow.
If you are not a native speaker of English, this message may appear to be in order
if your skill level with the language is limited. Otherwise, I suspect you will find
this text as amusing as I did. I have not modified a single character. Enjoy...
&lt;/p&gt;
&lt;blockquote&gt; welcome to order, 
&lt;br /&gt;
Our company is one of the largest wholesalers in Asia ,and we sell products to all
over the world,we have the authorithed licence issured by Chinese government,all products
in our company ranges from varieties of electronic products like mobilephone ,television,
laptop,DVD,GPS,MP3/4 to photograph video game ,scanner, motorcycle prohector and so
on.. 
&lt;br /&gt;
We have earned our reputation in the world through our honesty business practice in
the past years,and obtained many compliments from our clients globally.As we are the
direct wholesalers for many reputable brands in the world,so all the products purchased
in our website are promised to be at a lower price with the high quality,also all
the facuty products will be returned within 7 days,exchange within 14 days,repair
within 2 years without charge.&lt;br /&gt;
We will be right here waiting for your visitation. &lt;/blockquote&gt; 
&lt;p&gt;
I hope that as software architects and engineers we are producing code and other textual
artifacts that communicate with greater clarity and understanding of the language
and idiom in which we express our ideas. Do we write documentation as badly because
we can only communicate clearly in code? Or vice versa? It is something to think about.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=3c0819ae-c91c-4971-bd16-089cf017cb9b" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,3c0819ae-c91c-4971-bd16-089cf017cb9b.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=ad85d194-75db-48fd-9bde-d7c2f7f4fd71</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,ad85d194-75db-48fd-9bde-d7c2f7f4fd71.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,ad85d194-75db-48fd-9bde-d7c2f7f4fd71.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ad85d194-75db-48fd-9bde-d7c2f7f4fd71</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>Apple, I'm a PC and You're a Hypocrite</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,ad85d194-75db-48fd-9bde-d7c2f7f4fd71.aspx</guid>
      <link>http://www.tsjensen.com/blog/2008/11/04/Apple+Im+A+PC+And+Youre+A+Hypocrite.aspx</link>
      <pubDate>Tue, 04 Nov 2008 03:25:45 GMT</pubDate>
      <description>&lt;p&gt;
One of the latest Apple ads makes fun of Microsoft for spending more on marketing
than on fixing Vista. Time for all you fruit computer junkies to face some cold hard
facts:
&lt;/p&gt;
&lt;p&gt;
Let's take our most recent SEC filing quarter for both companies and compare spending
on sales, marketing and administration versus research and development and then average
that spending per employee.
&lt;/p&gt;
&lt;p&gt;
Microsoft spends about $25,000 per employee on R&amp;D and $43,000 on sales, marketing
and administration.&lt;br /&gt;
A ratio of 1 to 1.72.
&lt;/p&gt;
&lt;p&gt;
Apple spends about $16,300 per employee on R&amp;D and $51,200 on sales, marketing and
administration.&lt;br /&gt;
A ratio of 1 to 3.13.
&lt;/p&gt;
&lt;p&gt;
So relatively speaking, Apple spends nearly twice as much on sales, marketing and
administration as Microsoft does.
&lt;/p&gt;
&lt;p&gt;
And that's one reason why I'm a PC. You can keep your fruit computer.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=ad85d194-75db-48fd-9bde-d7c2f7f4fd71" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,ad85d194-75db-48fd-9bde-d7c2f7f4fd71.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=a1f59f86-a95c-40f8-9854-61bc3ec42109</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,a1f59f86-a95c-40f8-9854-61bc3ec42109.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,a1f59f86-a95c-40f8-9854-61bc3ec42109.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a1f59f86-a95c-40f8-9854-61bc3ec42109</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just posted this on a linkedin group to which I belong, but I thought I'd also like
to pose the question here.
</p>
        <p>
I'd like to get a discussion started that attempts to define enterprise software architecture.
My own definition seems to be evolvoing with every enterprise for whom I've worked.
In the abstract, for me, enterprise software architure is the art of putting the pieces
of multiple puzzles together into one great work of art.
</p>
        <p>
There are many puzzles to choose from and every enterprise has a unique mix. There
are multiple teams with various skillsets and experience. There are multiple business
processes sometimes with unique and strange business rules. Technology platforms that
differ, communications protocols that won't communicate with one another, languages,
frameworks, compilers, IDEs, components, and hardware that vary from team to team
and department to department. Ours is the task of taking these disparate and often
incongruous pieces and molding them into one coherent masterpiece of technology and
human resources to get more done, get it done better, quicker, cheaper and easier.
And if we do our jobs well, it may be that no one will notice that we did it at all.
</p>
        <p>
What do you think?
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=a1f59f86-a95c-40f8-9854-61bc3ec42109" />
      </body>
      <title>What is Enterprise Software Architecture</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,a1f59f86-a95c-40f8-9854-61bc3ec42109.aspx</guid>
      <link>http://www.tsjensen.com/blog/2008/11/02/What+Is+Enterprise+Software+Architecture.aspx</link>
      <pubDate>Sun, 02 Nov 2008 19:54:07 GMT</pubDate>
      <description>&lt;p&gt;
I just posted this on a linkedin group to which I belong, but I thought I'd also like
to pose the question here.
&lt;/p&gt;
&lt;p&gt;
I'd like to get a discussion started that attempts to define enterprise software architecture.
My own definition seems to be evolvoing with every enterprise for whom I've worked.
In the abstract, for me, enterprise software architure is the art of putting the pieces
of multiple puzzles together into one great work of art.
&lt;/p&gt;
&lt;p&gt;
There are many puzzles to choose from and every enterprise has a unique mix. There
are multiple teams with various skillsets and experience. There are multiple business
processes sometimes with unique and strange business rules. Technology platforms that
differ, communications protocols that won't communicate with one another, languages,
frameworks, compilers, IDEs, components, and hardware that vary from team to team
and department to department. Ours is the task of taking these disparate and often
incongruous pieces and molding them into one coherent masterpiece of technology and
human resources to get more done, get it done better, quicker, cheaper and easier.
And if we do our jobs well, it may be that no one will notice that we did it at all.
&lt;/p&gt;
&lt;p&gt;
What do you think?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=a1f59f86-a95c-40f8-9854-61bc3ec42109" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,a1f59f86-a95c-40f8-9854-61bc3ec42109.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=0ddcfcc7-864e-4091-97ef-26184626dc07</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,0ddcfcc7-864e-4091-97ef-26184626dc07.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,0ddcfcc7-864e-4091-97ef-26184626dc07.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0ddcfcc7-864e-4091-97ef-26184626dc07</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just posted the following note on a LinkedIn group I follow in answer to a post
about so called "software factories," which is a nice euphemism for overseas developers
working for much less than they deserve struggling to meet the unreasonable demands
of their bosses. This represents my opinion on the subject: 
</p>
        <blockquote>
          <p>
Never forget that you get what you pay for. Hiring an overseas or even local "software
factory" or consultancy to build your software can be problematic at best and a complete
waste of time and money at worst. 
</p>
          <p>
First, if you cannot communicate, forget about it. Building software is 99% communication
and 1% technology. Okay, perhaps I overstate the case. A little. But you cannot overestimate
the importance of clear, effective communication. 
</p>
          <p>
Second, unless you have the internal people required to manage such a relationship,
your project will fail. This means you need project management and technical people
in your own organization that you know well and trust. They need to be supremely competent.
This is especially true if you plan to hire a firm outside of your own geographical
area. 
</p>
          <p>
Third, plan for time and budget overages. It is the nature of consulting to promise
a low price and quick turnaround and then when you are committed to the project and
it is "nearly done," you will be informed that there is much more to do, generally
due to legitimate changes in requirements because you did not fully understand what
you wanted when the project first began. This is the boon and bane of software development
whether internal or external. 
</p>
          <p>
Finally, you can have success outsourcing your software development project, but do
not make the mistake of thinking that it will save you an enormous amount of time
and money, especially for a single application project. It takes time to develop a
working relationship with an outside consultantcy, especially one that is half way
around the world. If you have multiple projects, long term goals, and a huge budget
of time and money, it may in fact be cost effective to have a relationship with a
so called "software factory." But if you are a small organization and have one or
two projects, you will nearly always be better off hiring a professional locally,
usually through one of the many technical recruiting companies, to come into your
organization as a contractor to work on-site building exactly what you want as you
discover over time what it is you want exactly.
</p>
        </blockquote>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=0ddcfcc7-864e-4091-97ef-26184626dc07" />
      </body>
      <title>To Outsource Or Not to Outsource, That is the Question</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,0ddcfcc7-864e-4091-97ef-26184626dc07.aspx</guid>
      <link>http://www.tsjensen.com/blog/2008/10/24/To+Outsource+Or+Not+To+Outsource+That+Is+The+Question.aspx</link>
      <pubDate>Fri, 24 Oct 2008 15:56:19 GMT</pubDate>
      <description>&lt;p&gt;
I just posted the following note on a LinkedIn group I follow in answer to a post
about so called "software factories," which is a nice euphemism for overseas developers
working for much less than they deserve struggling to meet the unreasonable demands
of their bosses. This represents my opinion on the subject: &lt;blockquote&gt; 
&lt;p&gt;
Never forget that you get what you pay for. Hiring an overseas or even local "software
factory" or consultancy to build your software can be problematic at best and a complete
waste of time and money at worst. 
&lt;p&gt;
First, if you cannot communicate, forget about it. Building software is 99% communication
and 1% technology. Okay, perhaps I overstate the case. A little. But you cannot overestimate
the importance of clear, effective communication. 
&lt;p&gt;
Second, unless you have the internal people required to manage such a relationship,
your project will fail. This means you need project management and technical people
in your own organization that you know well and trust. They need to be supremely competent.
This is especially true if you plan to hire a firm outside of your own geographical
area. 
&lt;p&gt;
Third, plan for time and budget overages. It is the nature of consulting to promise
a low price and quick turnaround and then when you are committed to the project and
it is "nearly done," you will be informed that there is much more to do, generally
due to legitimate changes in requirements because you did not fully understand what
you wanted when the project first began. This is the boon and bane of software development
whether internal or external. 
&lt;p&gt;
Finally, you can have success outsourcing your software development project, but do
not make the mistake of thinking that it will save you an enormous amount of time
and money, especially for a single application project. It takes time to develop a
working relationship with an outside consultantcy, especially one that is half way
around the world. If you have multiple projects, long term goals, and a huge budget
of time and money, it may in fact be cost effective to have a relationship with a
so called "software factory." But if you are a small organization and have one or
two projects, you will nearly always be better off hiring a professional locally,
usually through one of the many technical recruiting companies, to come into your
organization as a contractor to work on-site building exactly what you want as you
discover over time what it is you want exactly.
&lt;/p&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=0ddcfcc7-864e-4091-97ef-26184626dc07" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,0ddcfcc7-864e-4091-97ef-26184626dc07.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=143e6e84-645b-471f-b6ed-ed8addf3a422</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,143e6e84-645b-471f-b6ed-ed8addf3a422.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,143e6e84-645b-471f-b6ed-ed8addf3a422.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=143e6e84-645b-471f-b6ed-ed8addf3a422</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I upgraded to the latest version of dasBlog a few days ago and inadvertently allowed
comments without requiring approval. A spambot comment got through and while I quickly
turned on the "require approval" feature, it was too late. Since then I've been bombarded
with stupid link spam comments. I even deleted the one post that seemed to be the
bot target and created a new post with the same content. 
</p>
        <p>
No luck. After many similar spam comments today being posted to the most recent post
on my blog, I'm giving up. I'm taking a comment holiday. It won't bother anyone really
because I don't get many real comments. I'll enable the comment functionality some
day in the future.
</p>
        <p>
Meantime, if you have a comment, feel free to email me and I'll post it as an addendum
to the relevant post.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=143e6e84-645b-471f-b6ed-ed8addf3a422" />
      </body>
      <title>Taking a Comment Holiday to Escape the Spammers</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,143e6e84-645b-471f-b6ed-ed8addf3a422.aspx</guid>
      <link>http://www.tsjensen.com/blog/2008/09/12/Taking+A+Comment+Holiday+To+Escape+The+Spammers.aspx</link>
      <pubDate>Fri, 12 Sep 2008 04:29:40 GMT</pubDate>
      <description>&lt;p&gt;
I upgraded to the latest version of dasBlog a few days ago and inadvertently allowed
comments without requiring approval. A spambot comment got through and while I quickly
turned on the "require approval" feature, it was too late. Since then I've been bombarded
with stupid link spam comments. I even deleted the one post that seemed to be the
bot target and created a new post with the same content. 
&lt;/p&gt;
&lt;p&gt;
No luck. After many similar spam comments today being posted to the most recent post
on my blog, I'm giving up. I'm taking a comment holiday. It won't bother anyone really
because I don't get many real comments. I'll enable the comment functionality some
day in the future.
&lt;/p&gt;
&lt;p&gt;
Meantime, if you have a comment, feel free to email me and I'll post it as an addendum
to the relevant post.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=143e6e84-645b-471f-b6ed-ed8addf3a422" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,143e6e84-645b-471f-b6ed-ed8addf3a422.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=687ef3f0-b7b3-4a6a-8d79-8135876e29fc</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,687ef3f0-b7b3-4a6a-8d79-8135876e29fc.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,687ef3f0-b7b3-4a6a-8d79-8135876e29fc.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=687ef3f0-b7b3-4a6a-8d79-8135876e29fc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Being rather new to Vista this week, I was sorely disappointed to see the severely
dumbed down defrag utility in Vista. A pathetic effort. Really! So after a few highly
scientific Google searches, I settled on <a href="http://www.oo-software.com/home/en/products/oodefrag/">O&amp;O
Defrag</a> and could not be happier.
</p>
        <p>
Here's the lame, incredibly useless UI in Vista's Disk Defragmenter. Note, if
you are going to use some other defragmenter on a schedule, which I would recommend,
be sure to disable the regularly scheduled Vista defragmenter by unchecking the box.
One way of getting there is to go to the Control Panel and then Performance Information
and Tools and then Advanced Tools.
</p>
        <p>
          <img style="WIDTH: 573px; HEIGHT: 280px" height="250" src="http://www.tsjensen.com/blog/content/binary/vistadefrag.jpg" width="547" border="0" />
        </p>
        <p>
And here is only part of the incredibly useful O&amp;O Defrag UI, a shot taken as
it defrags my drives:
</p>
        <p>
          <img style="WIDTH: 623px; HEIGHT: 647px" height="609" src="http://www.tsjensen.com/blog/content/binary/oodefrag.jpg" width="583" border="0" />
        </p>
        <p>
Of course there are other suitable defrag tools such as DiskKeeper and others. Perhaps
Microsoft wanted the Vista tool to cater only to the basic, uninformed user. If so,
they certainly left the market wide open to the more sophisticated tools vendors such
as O&amp;O.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=687ef3f0-b7b3-4a6a-8d79-8135876e29fc" />
      </body>
      <title>Vista Defrag Woefully Inadequate - Enter O&amp;O Defrag</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,687ef3f0-b7b3-4a6a-8d79-8135876e29fc.aspx</guid>
      <link>http://www.tsjensen.com/blog/2008/08/23/Vista+Defrag+Woefully+Inadequate+Enter+OO+Defrag.aspx</link>
      <pubDate>Sat, 23 Aug 2008 20:43:01 GMT</pubDate>
      <description>&lt;p&gt;
Being rather new to Vista this week, I was sorely disappointed to see the severely
dumbed down defrag utility in Vista. A pathetic effort. Really! So after a few highly
scientific Google searches, I settled on &lt;a href="http://www.oo-software.com/home/en/products/oodefrag/"&gt;O&amp;amp;O
Defrag&lt;/a&gt; and could not be happier.
&lt;/p&gt;
&lt;p&gt;
Here's the lame, incredibly useless&amp;nbsp;UI in Vista's Disk Defragmenter. Note, if
you are going to use some other defragmenter on a schedule, which I would recommend,
be sure to disable the regularly scheduled Vista defragmenter by unchecking the box.
One way of getting there is to go to the Control Panel and then Performance Information
and Tools and then Advanced Tools.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="WIDTH: 573px; HEIGHT: 280px" height=250 src="http://www.tsjensen.com/blog/content/binary/vistadefrag.jpg" width=547 border=0&gt;
&lt;/p&gt;
&lt;p&gt;
And here is only part of the incredibly useful O&amp;amp;O Defrag UI, a shot taken as
it defrags my drives:
&lt;/p&gt;
&lt;p&gt;
&lt;img style="WIDTH: 623px; HEIGHT: 647px" height=609 src="http://www.tsjensen.com/blog/content/binary/oodefrag.jpg" width=583 border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Of course there are other suitable defrag tools such as DiskKeeper and others. Perhaps
Microsoft wanted the Vista tool to cater only to the basic, uninformed user. If so,
they certainly left the market wide open to the more sophisticated tools vendors such
as O&amp;amp;O.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=687ef3f0-b7b3-4a6a-8d79-8135876e29fc" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,687ef3f0-b7b3-4a6a-8d79-8135876e29fc.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=d0728031-c78f-4133-91a0-8944390eac16</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,d0728031-c78f-4133-91a0-8944390eac16.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,d0728031-c78f-4133-91a0-8944390eac16.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d0728031-c78f-4133-91a0-8944390eac16</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I finally took the plunge. Now I get to use 4GB out of 4GB except that the bare minimum
I seem to be able to get Vista x64 down to is a 1.2GB footprint. And that's after
hours and hours of experimentation and disabling some visual enhancements, though
I feel no loss there and am experiencing a significantly reduced sense of loss.
</p>
        <p>
Now I'm happy to be able to test on x64 virtual images using VMWare's Workstation,
I'm afraid I may need to buy four 2GB sticks of RAM now. Despite the fact that
the additional memory is available now, the larger footprint nearly wipes out the
gain.
</p>
        <p>
          <img src="http://www.netbrick.net/blog/content/binary/taskm.jpg" border="0" />
        </p>
        <p>
And that's without running any significant applications, except IE, which is quite
a memory hog. I guess the old 640K upper limit days are over.
</p>
        <p>
Yes, RAM is cheap. A quick check on Newegg.com and I found 8GB (4 x 2GB DDR2 800)
for $174. I can't even buy three tanks of gas for my SUV for that.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=d0728031-c78f-4133-91a0-8944390eac16" />
      </body>
      <title>From XP Pro to Vista Ultimate x64</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,d0728031-c78f-4133-91a0-8944390eac16.aspx</guid>
      <link>http://www.tsjensen.com/blog/2008/08/21/From+XP+Pro+To+Vista+Ultimate+X64.aspx</link>
      <pubDate>Thu, 21 Aug 2008 01:54:01 GMT</pubDate>
      <description>&lt;p&gt;
I finally took the plunge. Now I get to use 4GB out of 4GB except that the bare minimum
I seem to be able to get Vista x64 down to is a 1.2GB footprint. And that's after
hours and hours of experimentation and disabling some visual enhancements, though
I feel no loss there and am experiencing a significantly reduced sense of loss.
&lt;/p&gt;
&lt;p&gt;
Now I'm happy to be able to test on x64 virtual images using VMWare's Workstation,
I'm afraid I may need to buy four 2GB sticks of RAM now.&amp;nbsp;Despite the fact that
the additional memory is available now, the larger footprint nearly wipes out the
gain.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.netbrick.net/blog/content/binary/taskm.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
And that's without running any significant applications, except IE, which is quite
a memory hog. I guess the old 640K upper limit days are over.
&lt;/p&gt;
&lt;p&gt;
Yes, RAM is cheap. A quick check on Newegg.com and I found 8GB (4 x 2GB DDR2 800)
for $174. I can't even buy three tanks of gas for my SUV for that.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=d0728031-c78f-4133-91a0-8944390eac16" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,d0728031-c78f-4133-91a0-8944390eac16.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=f9b6db97-22ae-4de1-9c93-4d2cba89d0d3</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,f9b6db97-22ae-4de1-9c93-4d2cba89d0d3.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,f9b6db97-22ae-4de1-9c93-4d2cba89d0d3.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f9b6db97-22ae-4de1-9c93-4d2cba89d0d3</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm getting ready to do some serious <a href="http://office.microsoft.com/en-us/sharepointserver/default.aspx?ofcresset=1">MOSS
2007</a> architecture and development work. In the past, I've used <a href="http://www.microsoft.com/windows/products/winfamily/virtualpc/default.mspx">Virtual
PC 2007</a> to host a virtual development environment running a Windows server operating
system, SQL Server, MOSS and Visual Studio all running in the same virtual machine.
And I've never been very happy with the performance of that virtual machine.
</p>
        <p>
So today I decided to give VMWare a try and downloaded <a href="http://www.vmware.com/products/ws/">VMWare
Workstation 6.5</a>. I installed Windows Server 2008 Standard x86 (full install) on
a new virtual machine with the same disk space and memory as I had allocated for the
same operating system install using Virtual PC 2007. I gave both virtual machines
30GB of disk space and 1GB of RAM. I'm running on a Core 2 Duo 6600 on an ASUS P5B
at factory default speed with 4GB of RAM with virtualization support enabled. Both
virtual machines virtual drives live on the same drive.
</p>
        <p>
The major advantage of VMWare is its ability to utilize both cores where Virtual PC
is stuck with using just one. I'm sure there are additional reasons for the differences
in performance. I used <a href="http://www.passmark.com/products/pt.htm">PerformanceTest
6.1 from PassMark</a>. I'm sure there are other ways to test virtual machine performance,
but this seemed to be a reasonable though unscientific approach. I made sure my machine
was running the same processes and completely idle except for the virtual machine
host application.
</p>
        <p>
I only ran the tests that mattered to me: CPU, 2D, memory, and disk. I don't care
about 3D and CD performance for the virtual machine. Here's the results:
</p>
        <p>
          <table style="WIDTH: 288pt; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="384" border="0">
            <colgroup>
              <col style="WIDTH: 48pt" span="6" width="64" />
              <tbody>
                <tr style="HEIGHT: 15pt" height="20">
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; WIDTH: 48pt; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" width="64" height="20">
                    <font face="Calibri" color="#000000">
                      <strong>vmware</strong>
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; WIDTH: 48pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" width="64">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td class="xl63" style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; WIDTH: 48pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" width="64">
                    <p align="right">
                      <font face="Calibri" color="#000000">test 1</font>
                    </p>
                  </td>
                  <td class="xl63" style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; WIDTH: 48pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" width="64">
                    <p align="right">
                      <font face="Calibri" color="#000000">test 2</font>
                    </p>
                  </td>
                  <td class="xl63" style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; WIDTH: 48pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" width="64">
                    <p align="right">
                      <font face="Calibri" color="#000000">avg</font>
                    </p>
                  </td>
                  <td class="xl63" style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; WIDTH: 48pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" width="64">
                    <p align="right">
                      <font face="Calibri" color="#000000">ratio</font>
                    </p>
                  </td>
                </tr>
                <tr style="HEIGHT: 15pt" height="20">
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height="20">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">cpu:</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">326.6</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">344.4</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">335.5</font>
                  </td>
                  <td class="xl64" style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">2.2x</font>
                  </td>
                </tr>
                <tr style="HEIGHT: 15pt" height="20">
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height="20">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">2D:</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">28.7</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">32.2</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">30.45</font>
                  </td>
                  <td class="xl64" style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">3.3x</font>
                  </td>
                </tr>
                <tr style="HEIGHT: 15pt" height="20">
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height="20">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">Memory:</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">96.7</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">96.2</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">96.45</font>
                  </td>
                  <td class="xl64" style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">1.2x</font>
                  </td>
                </tr>
                <tr style="HEIGHT: 15pt" height="20">
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height="20">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">Disk:</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">469.1</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">454.5</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">461.8</font>
                  </td>
                  <td class="xl64" style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">6.4x</font>
                  </td>
                </tr>
                <tr style="HEIGHT: 15pt" height="20">
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height="20">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">
                      <strong>Total:</strong>
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">
                      <strong>921.1</strong>
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">
                      <strong>927.3</strong>
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">
                      <strong>924.2</strong>
                    </font>
                  </td>
                  <td class="xl64" style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#ff0000">
                      <strong>2.9x</strong>
                    </font>
                  </td>
                </tr>
                <tr style="HEIGHT: 15pt" height="20">
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height="20">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                </tr>
                <tr style="HEIGHT: 15pt" height="20">
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height="20">
                    <font face="Calibri" color="#000000">
                      <strong>vpc 2007</strong>
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                </tr>
                <tr style="HEIGHT: 15pt" height="20">
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height="20">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">cpu:</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">150.7</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">154.1</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">152.4</font>
                  </td>
                  <td class="xl64" style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                </tr>
                <tr style="HEIGHT: 15pt" height="20">
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height="20">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">2D:</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">9.2</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">9.3</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">9.25</font>
                  </td>
                  <td class="xl64" style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                </tr>
                <tr style="HEIGHT: 15pt" height="20">
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height="20">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">Memory:</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">83.3</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">83.2</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">83.25</font>
                  </td>
                  <td class="xl64" style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                </tr>
                <tr style="HEIGHT: 15pt" height="20">
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height="20">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">Disk:</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">69.6</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">73.8</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">71.7</font>
                  </td>
                  <td class="xl64" style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                </tr>
                <tr style="HEIGHT: 15pt" height="20">
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height="20">
                    <font face="Calibri" color="#000000">
                    </font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                    <font face="Calibri" color="#000000">Total:</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">312.8</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">320.4</font>
                  </td>
                  <td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align="right">
                    <font face="Calibri" color="#000000">316.6</font>
                  </td>
                  <td class="xl64" style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent">
                  </td>
                </tr>
              </tbody>
            </colgroup>
          </table>
 
</p>
        <p>
I was amazed to see that overall, the VMWare virtual machine ran 2.9 times faster
than the Virtual PC machine. Even more amazing was the performance improvement of
the 2D and disk tests, 3.3 and 6.4 times faster respectively.
</p>
        <p>
I am now completely sold on the value of the VMWare Workstation license. The best
price I found after a quick search was $161. For all the saved frustration in working
with a slow virtual machine development image for MOSS, the product is well worth
the price. But don't take my word for it, run your own tests if you don't believe
me. Of course, if you aren't running a multicore machine, and what self respecting
developer isn't, you probably won't see any improvement. On the other hand, if you
have at least two cores, choosing save a few bucks seems to penny wise but pound foolish!
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=f9b6db97-22ae-4de1-9c93-4d2cba89d0d3" />
      </body>
      <title>Virtual PC 2007 vs VMWare Workstation 6.5</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,f9b6db97-22ae-4de1-9c93-4d2cba89d0d3.aspx</guid>
      <link>http://www.tsjensen.com/blog/2008/08/19/Virtual+PC+2007+Vs+VMWare+Workstation+65.aspx</link>
      <pubDate>Tue, 19 Aug 2008 03:07:45 GMT</pubDate>
      <description>&lt;p&gt;
I'm getting ready to do some serious &lt;a href="http://office.microsoft.com/en-us/sharepointserver/default.aspx?ofcresset=1"&gt;MOSS
2007&lt;/a&gt; architecture and development work. In the past, I've used &lt;a href="http://www.microsoft.com/windows/products/winfamily/virtualpc/default.mspx"&gt;Virtual
PC 2007&lt;/a&gt; to host a virtual development environment running a Windows server operating
system, SQL Server, MOSS and Visual Studio all running in the same virtual machine.
And I've never been very happy with the performance of that virtual machine.
&lt;/p&gt;
&lt;p&gt;
So today I decided to give VMWare a try and downloaded &lt;a href="http://www.vmware.com/products/ws/"&gt;VMWare
Workstation 6.5&lt;/a&gt;. I installed Windows Server 2008 Standard x86 (full install) on
a new virtual machine with the same disk space and memory as I had allocated for the
same operating system install using Virtual PC 2007. I gave both virtual machines
30GB of disk space and 1GB of RAM. I'm running on a Core 2 Duo 6600 on an ASUS P5B
at factory default speed with 4GB of RAM with virtualization support enabled. Both
virtual machines virtual drives live on the same drive.
&lt;/p&gt;
&lt;p&gt;
The major advantage of VMWare is its ability to utilize both cores where Virtual PC
is stuck with using just one. I'm sure there are additional reasons for the differences
in performance. I used &lt;a href="http://www.passmark.com/products/pt.htm"&gt;PerformanceTest
6.1 from PassMark&lt;/a&gt;. I'm sure there are other ways to test virtual machine performance,
but this seemed to be a reasonable though unscientific approach. I made sure my machine
was running the same processes and completely idle except for the virtual machine
host application.
&lt;/p&gt;
&lt;p&gt;
I only ran the tests that mattered to me: CPU, 2D, memory, and disk. I don't care
about 3D and CD performance for the virtual machine. Here's the results:
&lt;/p&gt;
&lt;p&gt;
&lt;table style="WIDTH: 288pt; BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=0 width=384 border=0&gt;
&lt;colgroup&gt;
&lt;col style="WIDTH: 48pt" span=6 width=64&gt;
&lt;tbody&gt;
&lt;tr style="HEIGHT: 15pt" height=20&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; WIDTH: 48pt; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" width=64 height=20&gt;
&lt;font face=Calibri color=#000000&gt;&lt;strong&gt;vmware&lt;/strong&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; WIDTH: 48pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" width=64&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class=xl63 style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; WIDTH: 48pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" width=64&gt;
&lt;p align=right&gt;
&lt;font face=Calibri color=#000000&gt;test 1&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td class=xl63 style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; WIDTH: 48pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" width=64&gt;
&lt;p align=right&gt;
&lt;font face=Calibri color=#000000&gt;test 2&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td class=xl63 style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; WIDTH: 48pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" width=64&gt;
&lt;p align=right&gt;
&lt;font face=Calibri color=#000000&gt;avg&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;td class=xl63 style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; WIDTH: 48pt; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" width=64&gt;
&lt;p align=right&gt;
&lt;font face=Calibri color=#000000&gt;ratio&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="HEIGHT: 15pt" height=20&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height=20&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;cpu:&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;326.6&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;344.4&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;335.5&lt;/font&gt;&lt;/td&gt;
&lt;td class=xl64 style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;2.2x&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="HEIGHT: 15pt" height=20&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height=20&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;2D:&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;28.7&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;32.2&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;30.45&lt;/font&gt;&lt;/td&gt;
&lt;td class=xl64 style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;3.3x&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="HEIGHT: 15pt" height=20&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height=20&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;Memory:&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;96.7&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;96.2&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;96.45&lt;/font&gt;&lt;/td&gt;
&lt;td class=xl64 style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;1.2x&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="HEIGHT: 15pt" height=20&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height=20&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;Disk:&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;469.1&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;454.5&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;461.8&lt;/font&gt;&lt;/td&gt;
&lt;td class=xl64 style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;6.4x&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="HEIGHT: 15pt" height=20&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height=20&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;&lt;strong&gt;Total:&lt;/strong&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;&lt;strong&gt;921.1&lt;/strong&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;&lt;strong&gt;927.3&lt;/strong&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;&lt;strong&gt;924.2&lt;/strong&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td class=xl64 style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#ff0000&gt;&lt;strong&gt;2.9x&lt;/strong&gt;&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="HEIGHT: 15pt" height=20&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height=20&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="HEIGHT: 15pt" height=20&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height=20&gt;
&lt;font face=Calibri color=#000000&gt;&lt;strong&gt;vpc 2007&lt;/strong&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="HEIGHT: 15pt" height=20&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height=20&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;cpu:&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;150.7&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;154.1&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;152.4&lt;/font&gt;&lt;/td&gt;
&lt;td class=xl64 style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="HEIGHT: 15pt" height=20&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height=20&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;2D:&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;9.2&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;9.3&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;9.25&lt;/font&gt;&lt;/td&gt;
&lt;td class=xl64 style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="HEIGHT: 15pt" height=20&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height=20&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;Memory:&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;83.3&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;83.2&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;83.25&lt;/font&gt;&lt;/td&gt;
&lt;td class=xl64 style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="HEIGHT: 15pt" height=20&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height=20&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;Disk:&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;69.6&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;73.8&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;71.7&lt;/font&gt;&lt;/td&gt;
&lt;td class=xl64 style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="HEIGHT: 15pt" height=20&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; HEIGHT: 15pt; BACKGROUND-COLOR: transparent" height=20&gt;
&lt;font face=Calibri color=#000000&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;font face=Calibri color=#000000&gt;Total:&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;312.8&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;320.4&lt;/font&gt;&lt;/td&gt;
&lt;td style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent" align=right&gt;
&lt;font face=Calibri color=#000000&gt;316.6&lt;/font&gt;&lt;/td&gt;
&lt;td class=xl64 style="BORDER-RIGHT: #ece9d8; BORDER-TOP: #ece9d8; BORDER-LEFT: #ece9d8; BORDER-BOTTOM: #ece9d8; BACKGROUND-COLOR: transparent"&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
I was amazed to see that overall, the VMWare virtual machine ran 2.9 times faster
than the Virtual PC machine. Even more amazing was the performance improvement of
the 2D and disk tests, 3.3 and 6.4 times faster respectively.
&lt;/p&gt;
&lt;p&gt;
I am now completely sold on the value of the VMWare Workstation license. The best
price I found after a quick search was $161. For all the saved frustration in working
with a slow virtual machine development image for MOSS, the product is well worth
the price. But don't take my word for it, run your own tests if you don't believe
me. Of course, if you aren't running a multicore machine, and what self respecting
developer isn't, you probably won't see any improvement. On the other hand, if you
have at least two cores, choosing save a few bucks seems to penny wise but pound foolish!
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=f9b6db97-22ae-4de1-9c93-4d2cba89d0d3" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,f9b6db97-22ae-4de1-9c93-4d2cba89d0d3.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=bdab735c-cb82-440f-9cc9-9f0ca2897c12</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,bdab735c-cb82-440f-9cc9-9f0ca2897c12.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,bdab735c-cb82-440f-9cc9-9f0ca2897c12.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=bdab735c-cb82-440f-9cc9-9f0ca2897c12</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I get a lot of forward email from friends and relatives. I've never felt compelled
to do anything with any of them until, bored this evening, I read this one from my
father-in-law. I don't know if any of these stories are true or not, but whether they
are or aren't, they are. In a time when America seems to be taking much criticism
from within and without, it's good to have reminders like these.
</p>
        <blockquote>
          <p>
When in England, at a fairly large conference, Colin Powell was asked by the Archbishop
of Canterbury if our plans for Iraq were just an example of empire building by George
Bush. He answered by saying, 'Over the years, the United States has sent many of its
fine young men and women into great peril to fight for freedom beyond our borders.
The only amount of land we have ever asked for in return is enough to bury those that
did not return.' 
</p>
          <p>
There was a conference in France where a number of international engineers were taking
part, including French and American. During a break, one of the French engineers came
back into the room saying 'Have you heard the latest dumb stunt Bush has done? He
has sent an aircraft carrier to Indonesia to help the tsunami victims. What does he
intended to do, bomb them?' A Boeing engineer stood up and replied quietly. 'Our carriers
have three hospitals on board that can treat several hundred people; they are nuclear
powered and can supply emergency electrical power to shore facilities; they have three
cafeterias with the capacity to feed 3,000 people three meals a day, they can produce
several thousand gallons of fresh water from sea water each day, and they carry half
a dozen helicopters for use in transporting victims and injured to and from their
flight deck. We have eleven such ships, how many does FRANCE HAVE?'
</p>
          <p>
A U.S. Navy Admiral was attending a naval conference that included Admirals from the
U.S., English, Canadian, Australian and French Navies. At a cocktail reception, he
found himself standing with a large group of Officers that included personnel from
most of those countries. Everyone was chatting away in English as they sipped their
drinks but a French admiral suddenly complained that, whereas Europeans learn many
languages, Americans learn only English. He then asked, 'Why is it that we always
have to speak English in these conferences rather than speaking French?' Without hesitating,
the American Admiral replied "maybe it's because the Brits, Canadians, Aussies and
Americans arranged it so you wouldn't have to speak German.'
</p>
          <p>
An elderly American gentleman of 83, arrived in Paris by plane. At French Customs,
he took a few minutes to locate his passport in his carry on. 'You have been to France
before, monsieur?' the customs officer asked sarcastically. The man admitted that
he had been to France previously. 'Then you should know enough to have your passport
ready.' The American said, 'The last time I was here, I didn't have to show it. 'Impossible.
Americans always have to show your passports on arrival in France !' The American
senior gave the Frenchman a long hard look. Then he quietly explained, 'Well, when
I came ashore at Omaha Beach on D-Day in 1944 to help liberate this country, I couldn't
find a single Frenchmen to show a passport to.'
</p>
        </blockquote>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=bdab735c-cb82-440f-9cc9-9f0ca2897c12" />
      </body>
      <title>Some Things are True Whether They are True or Not</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,bdab735c-cb82-440f-9cc9-9f0ca2897c12.aspx</guid>
      <link>http://www.tsjensen.com/blog/2008/07/18/Some+Things+Are+True+Whether+They+Are+True+Or+Not.aspx</link>
      <pubDate>Fri, 18 Jul 2008 04:30:41 GMT</pubDate>
      <description>&lt;p&gt;
I get a lot of forward email from friends and relatives. I've never felt compelled
to do anything with any of them until, bored this evening, I read this one from my
father-in-law. I don't know if any of these stories are true or not, but whether they
are or aren't, they are. In a time when America seems to be taking much criticism
from within and without, it's good to have reminders like these.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
When in England, at a fairly large conference, Colin Powell was asked by the Archbishop
of Canterbury if our plans for Iraq were just an example of empire building by George
Bush. He answered by saying, 'Over the years, the United States has sent many of its
fine young men and women into great peril to fight for freedom beyond our borders.
The only amount of land we have ever asked for in return is enough to bury those that
did not return.' 
&lt;/p&gt;
&lt;p&gt;
There was a conference in France where a number of international engineers were taking
part, including French and American. During a break, one of the French engineers came
back into the room saying 'Have you heard the latest dumb stunt Bush has done? He
has sent an aircraft carrier to Indonesia to help the tsunami victims. What does he
intended to do, bomb them?' A Boeing engineer stood up and replied quietly. 'Our carriers
have three hospitals on board that can treat several hundred people; they are nuclear
powered and can supply emergency electrical power to shore facilities; they have three
cafeterias with the capacity to feed 3,000 people three meals a day, they can produce
several thousand gallons of fresh water from sea water each day, and they carry half
a dozen helicopters for use in transporting victims and injured to and from their
flight deck. We have eleven such ships, how many does FRANCE HAVE?'
&lt;/p&gt;
&lt;p&gt;
A U.S. Navy Admiral was attending a naval conference that included Admirals from the
U.S., English, Canadian, Australian and French Navies. At a cocktail reception, he
found himself standing with a large group of Officers that included personnel from
most of those countries. Everyone was chatting away in English as they sipped their
drinks but a French admiral suddenly complained that, whereas Europeans learn many
languages, Americans learn only English. He then asked, 'Why is it that we always
have to speak English in these conferences rather than speaking French?' Without hesitating,
the American Admiral replied "maybe it's because the Brits, Canadians, Aussies and
Americans arranged it so you wouldn't have to speak German.'
&lt;/p&gt;
&lt;p&gt;
An elderly American gentleman of 83, arrived in Paris by plane. At French Customs,
he took a few minutes to locate his passport in his carry on. 'You have been to France
before, monsieur?' the customs officer asked sarcastically. The man admitted that
he had been to France previously. 'Then you should know enough to have your passport
ready.' The American said, 'The last time I was here, I didn't have to show it. 'Impossible.
Americans always have to show your passports on arrival in France !' The American
senior gave the Frenchman a long hard look. Then he quietly explained, 'Well, when
I came ashore at Omaha Beach on D-Day in 1944 to help liberate this country, I couldn't
find a single Frenchmen to show a passport to.'
&lt;/p&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=bdab735c-cb82-440f-9cc9-9f0ca2897c12" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,bdab735c-cb82-440f-9cc9-9f0ca2897c12.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=c2832acb-e3d9-434c-91a9-d0909b1c6d2f</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,c2832acb-e3d9-434c-91a9-d0909b1c6d2f.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,c2832acb-e3d9-434c-91a9-d0909b1c6d2f.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=c2832acb-e3d9-434c-91a9-d0909b1c6d2f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A week after being laid off finds me wondering why I've neglected this blog. I'm currently
experiencing the self recriminatory state one goes into at the end of the dead end
street having recently passed the Dead End sign. Brake, execute the multi-point 180
and head back to find the turn you missed. And then realizing that the turn you missed
should have been as obvious as the nose on your face. 
</p>
        <p>
My conscience tells me not to be too hard on myself. In one week I've had an interview
or two. Have another scheduled for tomorrow. And one or two inquiries from other potential
employers. Met with more than one recruiter and talked with several more. Polished
the resume a bit more and started working the neglected network of friends and former
coworkers--neglect as a result of me working from my home office with little real
world interaction. Note to self: get out more and talk with humans face to face.
</p>
        <p>
I've even taken more than one meeting from possible business partners with ideas that
may or may not pan out, but I'm not taking anything off the table until I replace
my mainstream income.
</p>
        <p>
So if anyone needs a C# dev guy with some architecture leanings, grab my resume and
give me a shout.
</p>
        <a href="http://www.netbrick.net/blog/content/binary/TylerJensen2008web.doc">TylerJensen2008web.doc
(47.5 KB)</a>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=c2832acb-e3d9-434c-91a9-d0909b1c6d2f" />
      </body>
      <title>Seven Days Past the Layoff</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,c2832acb-e3d9-434c-91a9-d0909b1c6d2f.aspx</guid>
      <link>http://www.tsjensen.com/blog/2008/01/25/Seven+Days+Past+The+Layoff.aspx</link>
      <pubDate>Fri, 25 Jan 2008 03:19:48 GMT</pubDate>
      <description>&lt;p&gt;
A week after being laid off finds me wondering why I've neglected this blog. I'm currently
experiencing the self recriminatory state one goes into at the end of the dead end
street having recently passed the Dead End sign. Brake, execute the multi-point 180
and head back to find the turn you missed. And then realizing that the turn you missed
should have been as obvious as the nose on your face. 
&lt;/p&gt;
&lt;p&gt;
My conscience tells me not to be too hard on myself. In one week I've had an interview
or two. Have another scheduled for tomorrow. And one or two inquiries from other potential
employers. Met with more than one recruiter and talked with several more. Polished
the resume a bit more and started working the neglected network of friends and former
coworkers--neglect as a result of me working from my home office with little real
world interaction. Note to self: get out more and talk with humans face to face.
&lt;/p&gt;
&lt;p&gt;
I've even taken more than one meeting from possible business partners with ideas that
may or may not pan out, but I'm not taking anything off the table until I replace
my mainstream income.
&lt;/p&gt;
&lt;p&gt;
So if anyone needs a C# dev guy with some architecture leanings, grab my resume and
give me a shout.
&lt;/p&gt;
&lt;a href="http://www.netbrick.net/blog/content/binary/TylerJensen2008web.doc"&gt;TylerJensen2008web.doc
(47.5 KB)&lt;/a&gt;&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=c2832acb-e3d9-434c-91a9-d0909b1c6d2f" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,c2832acb-e3d9-434c-91a9-d0909b1c6d2f.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=19a08987-bd9f-47d9-9d78-eeea3fad0d78</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,19a08987-bd9f-47d9-9d78-eeea3fad0d78.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,19a08987-bd9f-47d9-9d78-eeea3fad0d78.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=19a08987-bd9f-47d9-9d78-eeea3fad0d78</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Sometimes the odd helper class is useful. This one might even be a decent candidate
for some .NET 3.5 extension methods. These URL utilities are quite self explanatory
and by no means are a complete set of URL helper methods that would be useful, but
who knows, they might have something you're looking for.
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">using</span> System;<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">using</span> System.Collections.Generic;<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">using</span> System.Text;<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">namespace</span> HelperCode<br />
{<br />
    <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">internal</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">static</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">class</span> UrlUtils<br />
    {<br />
        <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">internal</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">static</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">string</span> GetTldFromUrl(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">string</span> url)<br />
        {<br />
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">string</span> tld <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> UrlUtils.GetHostFromUrl(url);<br />
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">if</span> (tld
!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">null</span> &amp;&amp;
tld.Contains('.'))<br />
            {<br />
                <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">string</span>[]
parts <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> tld.Split('.');<br />
                <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">if</span> (parts.Length
&gt; 0)<br />
                {<br />
                    tld <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> parts[parts.Length <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">-</span> 1];<br />
                }<br />
            }<br />
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">return</span> tld;<br />
        }<br /><br />
        <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">internal</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">static</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">string</span> GetHostFromUrl(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">string</span> url)<br />
        {<br />
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">string</span> retval <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">null</span>;<br />
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">try</span><br />
            {<br />
                Uri
uri <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> Uri(url);<br />
                retval <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> uri.Host.ToLower();<br />
            }<br />
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">catch</span><br />
            {<br />
                retval <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">null</span>;<br />
            }<br />
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">return</span> retval;<br />
        }<br /><br />
        <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">internal</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">static</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">string</span> GetSchemeFromUrl(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">string</span> url)<br />
        {<br />
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">string</span> retval <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">null</span>;<br />
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">try</span><br />
            {<br />
                Uri
uri <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> Uri(url);<br />
                retval <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> uri.Scheme.ToLower();<br />
            }<br />
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">catch</span><br />
            {<br />
                retval <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">null</span>;<br />
            }<br />
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">return</span> retval;<br />
        }<br />
    }<br />
}<br /></span>
        </p>
        <p>
If you have a better way to do it, please, by all means, let us know. There are no
doubt better ways. :)
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=19a08987-bd9f-47d9-9d78-eeea3fad0d78" />
      </body>
      <title>Url Utils Helper Class May Be Helpful</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,19a08987-bd9f-47d9-9d78-eeea3fad0d78.aspx</guid>
      <link>http://www.tsjensen.com/blog/2007/11/18/Url+Utils+Helper+Class+May+Be+Helpful.aspx</link>
      <pubDate>Sun, 18 Nov 2007 22:48:10 GMT</pubDate>
      <description>&lt;p&gt;
Sometimes the odd helper class is useful. This one might even be a decent candidate
for some .NET 3.5 extension methods. These URL utilities are quite self explanatory
and by no means are a complete set of URL helper methods that would be useful, but
who knows, they might have something you're looking for.
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;using&lt;/span&gt; System;&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;using&lt;/span&gt; System.Text;&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;namespace&lt;/span&gt; HelperCode&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;internal&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;static&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;class&lt;/span&gt; UrlUtils&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;internal&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;static&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;string&lt;/span&gt; GetTldFromUrl(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;string&lt;/span&gt; url)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;string&lt;/span&gt; tld &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; UrlUtils.GetHostFromUrl(url);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; (tld
!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;null&lt;/span&gt; &amp;amp;&amp;amp;
tld.Contains('.'))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;string&lt;/span&gt;[]
parts &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; tld.Split('.');&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; (parts.Length
&amp;gt; 0)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tld &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; parts[parts.Length &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;-&lt;/span&gt; 1];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;return&lt;/span&gt; tld;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;internal&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;static&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;string&lt;/span&gt; GetHostFromUrl(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;string&lt;/span&gt; url)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;string&lt;/span&gt; retval &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;null&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;try&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Uri
uri &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/span&gt; Uri(url);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;retval &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; uri.Host.ToLower();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;catch&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;retval &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;null&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;return&lt;/span&gt; retval;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;internal&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;static&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;string&lt;/span&gt; GetSchemeFromUrl(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;string&lt;/span&gt; url)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;string&lt;/span&gt; retval &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;null&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;try&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Uri
uri &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/span&gt; Uri(url);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;retval &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; uri.Scheme.ToLower();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;catch&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;retval &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;null&lt;/span&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;return&lt;/span&gt; retval;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
}&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
If you have a better way to do it, please, by all means, let us know. There are no
doubt better ways. :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=19a08987-bd9f-47d9-9d78-eeea3fad0d78" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,19a08987-bd9f-47d9-9d78-eeea3fad0d78.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=a8064bfc-b29a-4066-bc96-2c576679199e</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,a8064bfc-b29a-4066-bc96-2c576679199e.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,a8064bfc-b29a-4066-bc96-2c576679199e.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a8064bfc-b29a-4066-bc96-2c576679199e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Whether it be in code or business deals, complexity kills. If you're an architect
and you love the elegance of endless inheritance where everything is a descendant
of MyCoolRootObject or an venture capitalist trying to tie off every risk with carefully
structured language that leaves a founder in the lurch and you in the driver's seat
of the getaway car, you are the enemy of success. If you flout the team's style guild
and name your class members with freaky names and patterns only you can recognize,
you are an enemy of success. If you're a framework developer and you believe you have
to add every possible toy feature in the universe to your framework, you are an enemy
of success.
</p>
        <p>
And enemies of success lose! Lovers of complexity may win a battle here or there,
but the ash heap of history is full of them. Consider any number of technologies that
have become so overbloated and difficult to work with that developers and architects
look for simpler solutions. Examine the many thousands of failed startups killed by
pencil pushing pinheads with no other agenda than to make the deal difficult in hopes
of making it perfect, only to kill the deal with a stulted obsession with detail and
gaining the advantage in every paragraph.
</p>
        <p>
Simplicity is the key to success.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=a8064bfc-b29a-4066-bc96-2c576679199e" />
      </body>
      <title>Complexity is the Enemy of Success</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,a8064bfc-b29a-4066-bc96-2c576679199e.aspx</guid>
      <link>http://www.tsjensen.com/blog/2007/11/03/Complexity+Is+The+Enemy+Of+Success.aspx</link>
      <pubDate>Sat, 03 Nov 2007 21:11:58 GMT</pubDate>
      <description>&lt;p&gt;
Whether it be in code or business deals, complexity kills. If you're an architect
and you love the elegance of endless inheritance where everything is a descendant
of MyCoolRootObject or an venture capitalist trying to tie off every risk with carefully
structured language that leaves a founder in the lurch and you in the driver's seat
of the getaway car, you are the enemy of success. If you flout the team's style guild
and name your class members with freaky names and patterns only you can recognize,
you are an enemy of success. If you're a framework developer and you believe you have
to add every possible toy feature in the universe to your framework, you are an enemy
of success.
&lt;/p&gt;
&lt;p&gt;
And enemies of success lose! Lovers of complexity may win a battle here or there,
but the ash heap of history is full of them. Consider any number of technologies that
have become so overbloated and difficult to work with that developers and architects
look for simpler solutions. Examine the many thousands of failed startups killed by
pencil pushing pinheads with no other agenda than to make the deal difficult in hopes
of making it perfect, only to kill the deal with a stulted obsession with detail and
gaining the advantage in every paragraph.
&lt;/p&gt;
&lt;p&gt;
Simplicity is the key to success.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=a8064bfc-b29a-4066-bc96-2c576679199e" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,a8064bfc-b29a-4066-bc96-2c576679199e.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=f14ea1fe-9590-4fc8-9ff0-a10bb74cdafb</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,f14ea1fe-9590-4fc8-9ff0-a10bb74cdafb.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,f14ea1fe-9590-4fc8-9ff0-a10bb74cdafb.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f14ea1fe-9590-4fc8-9ff0-a10bb74cdafb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I recently picked up Booch, Jacobsen and Rumbaugh's new book <a href="http://www.aw-bc.com/catalog/academic/product/0,1144,020189551X,00.html">Object
Oriented Analysis and Design with Applications</a>. It's like the textbook I never
had in the OO classes I never took. (Yeah, I'm just another self taught bozo who knows
the difference between a five minute class exercise and a multiple month enterprise
development project.)
</p>
        <p>
Among others, I have especially enjoyed Chapter 6 called simply Process. Let me quote
the opening paragraph and you'll know why.
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
"The amateur software engineer is always in search of magic, some sensational method
or tool whose application promises to render software development trivial. It is the
mark of the professional software engineer to know that no such panacea exists. Amateurs
often want to follow cook-book steps; professionals know that such approches to development
usually lead to inept design products, born of a progression of lies, and behind which
developers can shield themselves from accepting responsibility for earlier misguided
decisions." pg.247
</p>
        </blockquote>
        <p>
There's more and the book is a treasure trove of wisdom, but when I read this paragraph,
it was nice to feel as if I had met the estimeed Booch, Jacobsen and Rumbaugh definition
of professional software engineer. 
</p>
        <p>
I do remember looking for magic bullets when I first started teaching myself how to
do software development. Fortunately through long trial and error and even greater
opportunities to learn from true professionals, I gave up on looking for magic solutions
long ago. Since then my life has been easier and busier and much more rewarding with
regard to software development.
</p>
        <p>
To their credit, the authors in Chapter 6 review the strengths and weaknesses of both
agile and more traditional plan driven (sometimes called waterfall) process approaches.
They begin their thesis in this chapter in addressing the traits of a successful project.
Now having this is true magic. Here they are:
</p>
        <ul>
          <li>
"Existence of a strong architectural vision." 
</li>
          <li>
"Application of a well managed iterative and incremental development lifecycle."</li>
        </ul>
        <p>
The killer qualifiers in those two statements are: "strong" and "well managed." Yikes!
These are qualifications that are difficult to come by. When you do, grab them up
and hold on to them for dear life. I think most of us can agree that "weak" and "poorly
managed" will result in disaster every time.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=f14ea1fe-9590-4fc8-9ff0-a10bb74cdafb" />
      </body>
      <title>Process Magic Booch Style</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,f14ea1fe-9590-4fc8-9ff0-a10bb74cdafb.aspx</guid>
      <link>http://www.tsjensen.com/blog/2007/10/07/Process+Magic+Booch+Style.aspx</link>
      <pubDate>Sun, 07 Oct 2007 19:28:37 GMT</pubDate>
      <description>&lt;p&gt;
I recently picked up Booch, Jacobsen and Rumbaugh's new book &lt;a href="http://www.aw-bc.com/catalog/academic/product/0,1144,020189551X,00.html"&gt;Object
Oriented Analysis and Design with Applications&lt;/a&gt;. It's like the textbook I never
had in the OO classes I never took. (Yeah, I'm just another self taught bozo who knows
the difference between a five minute class exercise and a&amp;nbsp;multiple month enterprise
development project.)
&lt;/p&gt;
&lt;p&gt;
Among others, I have especially enjoyed Chapter 6 called simply Process. Let me quote
the opening paragraph and you'll know why.
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
"The amateur software engineer is always in search of magic, some sensational method
or tool whose application promises to render software development trivial. It is the
mark of the professional software engineer to know that no such panacea exists. Amateurs
often want to follow cook-book steps; professionals know that such approches to development
usually lead to inept design products, born of a progression of lies, and behind which
developers can shield themselves from accepting responsibility for earlier misguided
decisions." pg.247
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
There's more and the book is a treasure trove of wisdom, but when I read this paragraph,
it was nice to feel as if I had met the estimeed Booch, Jacobsen and Rumbaugh definition
of professional software engineer. 
&lt;/p&gt;
&lt;p&gt;
I do remember looking for magic bullets when I first started teaching myself how to
do software development. Fortunately through long trial and error and even greater
opportunities to learn from true professionals, I gave up on looking for magic solutions
long ago. Since then my life has been easier and busier and much more rewarding with
regard to software development.
&lt;/p&gt;
&lt;p&gt;
To their credit, the authors in Chapter 6 review the strengths and weaknesses of both
agile and more traditional plan driven (sometimes called waterfall) process approaches.
They begin their thesis in this chapter in addressing the traits of a successful project.
Now having this is true magic. Here they are:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
"Existence of a strong architectural vision." 
&lt;li&gt;
"Application of a well managed iterative and incremental development lifecycle."&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
The killer qualifiers in those two statements are: "strong" and "well managed." Yikes!
These are qualifications that are difficult to come by. When you do, grab them up
and hold on to them for dear life. I think most of us can agree that "weak" and "poorly
managed" will result in disaster every time.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=f14ea1fe-9590-4fc8-9ff0-a10bb74cdafb" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,f14ea1fe-9590-4fc8-9ff0-a10bb74cdafb.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=d1980af4-b2e5-41bf-b857-7f73ad03ed3e</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,d1980af4-b2e5-41bf-b857-7f73ad03ed3e.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,d1980af4-b2e5-41bf-b857-7f73ad03ed3e.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d1980af4-b2e5-41bf-b857-7f73ad03ed3e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In an ever more agile development world, we gradually learn to accept that requirements
change constantly. Of course, it has always been thus, but I do remember a time when
we pretended that requirements were locked and could not be changed. But then I remember
delivering a product some months later which did not then meet the client's requirements
despite what they had agreed to only months before. Their requirements changed, you
see.
</p>
        <p>
Now I work in an environment where this norm is the norm. Requirements change and
they change often. Or better put, requirements are discovered daily and old requirements
change into new requirements nearly as often. This is the unavoidable nature of the
business I'm in. I accept it.
</p>
        <p>
What I hate and cannot accept in this ever changing world are requirements documents
written in a proprietary binary format. Sure they're stored in source control, so
when I do a little update on my Subversion client in the morning and see that several
requirements documents have changed, I'd like to just do a nice simple DIFF on them
and see what's changed. But no. Oh, sure there are probably some diff tools out there
I could get, but why should I when we could have just written the requirements in
text or even a simple transformable XML rather than the binary gobbledygook in a Word
or Excel file.
</p>
        <p>
And can anyone tell me how to "blame" a change in a particular line in a Word doc
on a certain author? Oh sure, I could use the gooey sticky messy change tracking--no
thanks. Just give me a good text file and an editor that can handle it well.
</p>
        <p>
Is my rant a cry for a product or what? Is there an existing product you can recommend?
If so, please tell me. And then maybe we can ban the use of Word and Excel for the
production and maintenance of requirements. We can say goodbye to the lack of transparency
and traceability. We can say hello to simplicity and accountability. Ah, how would
it be.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=d1980af4-b2e5-41bf-b857-7f73ad03ed3e" />
      </body>
      <title>Requirements in Text or Why I Hate Microsoft Word and Excel</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,d1980af4-b2e5-41bf-b857-7f73ad03ed3e.aspx</guid>
      <link>http://www.tsjensen.com/blog/2007/09/22/Requirements+In+Text+Or+Why+I+Hate+Microsoft+Word+And+Excel.aspx</link>
      <pubDate>Sat, 22 Sep 2007 18:59:48 GMT</pubDate>
      <description>&lt;p&gt;
In an ever more agile development world, we gradually learn to accept that requirements
change constantly. Of course, it has always been thus, but I do remember a time when
we pretended that requirements were locked and could not be changed. But then I remember
delivering a product some months later which did not then meet the client's requirements
despite what they had agreed to only months before. Their requirements changed, you
see.
&lt;/p&gt;
&lt;p&gt;
Now I work in an environment where this norm is the norm. Requirements change and
they change often. Or better put, requirements are discovered daily and old requirements
change into new requirements nearly as often. This is the unavoidable nature of the
business I'm in. I accept it.
&lt;/p&gt;
&lt;p&gt;
What I hate and cannot accept in this ever changing world are requirements documents
written in a proprietary binary format. Sure they're stored in source control, so
when I do a little update on my Subversion client in the morning and see that several
requirements documents have changed, I'd like to just do a nice simple DIFF on them
and see what's changed. But no. Oh, sure there are probably some diff tools out there
I could get, but why should I when we could have just written the requirements in
text or even a simple transformable XML rather than the binary gobbledygook in a Word
or Excel file.
&lt;/p&gt;
&lt;p&gt;
And can anyone tell me how to "blame" a change in a particular line in a Word doc
on a certain author? Oh sure, I could use the gooey sticky messy change tracking--no
thanks. Just give me a good text file and an editor that can handle it well.
&lt;/p&gt;
&lt;p&gt;
Is my rant a cry for a product or what? Is there an existing product you can recommend?
If so, please tell me. And then maybe we can ban the use of Word and Excel for the
production and maintenance of requirements. We can say goodbye to the lack of transparency
and traceability. We can say hello to simplicity and accountability. Ah, how would
it be.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=d1980af4-b2e5-41bf-b857-7f73ad03ed3e" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,d1980af4-b2e5-41bf-b857-7f73ad03ed3e.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=b58449a8-d783-4914-b571-2837fc6aa9f7</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,b58449a8-d783-4914-b571-2837fc6aa9f7.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,b58449a8-d783-4914-b571-2837fc6aa9f7.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b58449a8-d783-4914-b571-2837fc6aa9f7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm currently working on a rather complex ETL system in the medical industry. There
are new business rules uncovered daily as development and analysis proceeds in parallel
due to overwhelming business urgencies. The use cases in the system are limited pretty
much to "Process File." Everything else is buried in a system of business rules more
complex than I care to think about very often and a series of events and event handlers
which process the file and implement the business rules. 
</p>
        <p>
My own approach to this challenge could have been much more organized had I purchased <a href="http://www.microsoft.com/MSPress/books/9347.aspx">Karl
E. Weigers's book More About Software Requirements</a> earlier on in this project.
He says, "Use cases are less valuable for projects involving data warehouses, batch
processes, hardware projects with embedded control software, and computationally intensive
applications. In these softs of systems, the deep complexity doesn't lie in the user-system
interactions. It might be might be worthwhile to identify use cases for such a product,
but use case analysis will fall short as a technique for defining all the system's
behavior."
</p>
        <p>
I could not agree more. Weigers goes on to recommend the use of event-response tables
to provide a way of documenting the requirements of such complex systems which have
little if any interaction with users. Granted, you could write a use case using the
machine or file system or OS or scheduler or some other non-human entity as the actor,
but the analogies break down when trying to document the requirements of the complex
rules within the case.
</p>
        <p>
The event-response table is a simple approach to organizing these details that in
fact works much better than an ad hoc method of writing it all down in sequential
paragraphs and then asking developers, in this case that developer being me, to interpret
those requirements and design and code a solution that really works.
</p>
        <p>
You simply need a three column table with the following headers: Event, System State,
and Response.
</p>
        <p>
Breaking up functional requirements in a complex rules-driven system with minimal
human interaction can be a daunting task. You can make it a bit easier by using some
simple organizing structures such as the event-response table.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=b58449a8-d783-4914-b571-2837fc6aa9f7" />
      </body>
      <title>The Case Against Use Cases</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,b58449a8-d783-4914-b571-2837fc6aa9f7.aspx</guid>
      <link>http://www.tsjensen.com/blog/2007/08/11/The+Case+Against+Use+Cases.aspx</link>
      <pubDate>Sat, 11 Aug 2007 15:38:44 GMT</pubDate>
      <description>&lt;p&gt;
I'm currently working on a rather complex ETL system in the medical industry. There
are new business rules uncovered daily as development and analysis proceeds in parallel
due to overwhelming business urgencies. The use cases in the system are limited pretty
much to "Process File." Everything else is buried in a system of business rules more
complex than I care to think about very often and a series of events and event handlers
which process the file and implement the business rules. 
&lt;/p&gt;
&lt;p&gt;
My own approach to this challenge could have been much more organized had I purchased &lt;a href="http://www.microsoft.com/MSPress/books/9347.aspx"&gt;Karl
E. Weigers's book More About Software Requirements&lt;/a&gt; earlier on in this project.
He says, "Use cases are less valuable for projects involving data warehouses, batch
processes, hardware projects with embedded control software, and computationally intensive
applications. In these softs of systems, the deep complexity doesn't lie in the user-system
interactions. It might be might be worthwhile to identify use cases for such a product,
but use case analysis will fall short as a technique for defining all the system's
behavior."
&lt;/p&gt;
&lt;p&gt;
I could not agree more. Weigers goes on to recommend the use of event-response tables
to provide a way of documenting the requirements of such complex systems which have
little if any interaction with users. Granted, you could write a use case using the
machine or file system or OS or scheduler or some other non-human entity as the actor,
but the analogies break down when trying to document the requirements of the complex
rules within the case.
&lt;/p&gt;
&lt;p&gt;
The event-response table is a simple approach to organizing these details that in
fact works much better than an ad hoc method of writing it all down in sequential
paragraphs and then asking developers, in this case that developer being me, to interpret
those requirements and design and code a solution that really works.
&lt;/p&gt;
&lt;p&gt;
You simply need a three column table with the following headers: Event, System State,
and Response.
&lt;/p&gt;
&lt;p&gt;
Breaking up functional requirements in a complex rules-driven system with minimal
human interaction can be a daunting task. You can make it a bit easier by using some
simple organizing structures such as the event-response table.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=b58449a8-d783-4914-b571-2837fc6aa9f7" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,b58449a8-d783-4914-b571-2837fc6aa9f7.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=92491d59-ef7a-4e95-9d45-c58bd7423480</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,92491d59-ef7a-4e95-9d45-c58bd7423480.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,92491d59-ef7a-4e95-9d45-c58bd7423480.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=92491d59-ef7a-4e95-9d45-c58bd7423480</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Thanks to <a href="http://tirania.org/blog/archive/2007/Jan-06-2.html">Miguel and
his team</a> for making it easier than ever for us Windows-bound .NET geeks to give
Mono a try. It's a fairly big download but well worth it. You can now download a VMWare
virtual machine image of <a href="http://www.mono-project.com/Downloads">Mono 1.2.2.1
on openSUSE 10.2</a> and the free VMWare Player. Install the player and open
the unzipped VM file. Easy peasy. I had to play with network settings a bit but
that was easy.
</p>
        <p>
There is no easier way to check out Mono on Linux. No partitions to worry about.
No setup to worry about. No drivers to mess with such as the constant failure I would
get with my dual monitor card when I tried earlier to get SUSE running on a separate
partition on my box which led to me giving up.
</p>
        <p>
I recommend you give it a try. Amazing what the Mono team has done. Kudos again
to Miguel and his team and all those who have contributed to the Mono project. 
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=92491d59-ef7a-4e95-9d45-c58bd7423480" />
      </body>
      <title>Get Mono the Easy Way</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,92491d59-ef7a-4e95-9d45-c58bd7423480.aspx</guid>
      <link>http://www.tsjensen.com/blog/2007/01/08/Get+Mono+The+Easy+Way.aspx</link>
      <pubDate>Mon, 08 Jan 2007 17:23:15 GMT</pubDate>
      <description>&lt;p&gt;
Thanks to &lt;a href="http://tirania.org/blog/archive/2007/Jan-06-2.html"&gt;Miguel and
his team&lt;/a&gt; for making it easier than ever for us Windows-bound .NET geeks to give
Mono a try. It's a fairly big download but well worth it. You can now download a VMWare
virtual machine image of &lt;a href="http://www.mono-project.com/Downloads"&gt;Mono 1.2.2.1
on openSUSE 10.2&lt;/a&gt; and the free VMWare Player. Install the player and&amp;nbsp;open
the unzipped&amp;nbsp;VM file. Easy peasy. I had to play with network settings a bit but
that was easy.
&lt;/p&gt;
&lt;p&gt;
There is no easier way&amp;nbsp;to check out Mono on Linux. No partitions to worry about.
No setup to worry about. No drivers to mess with such as the constant failure I would
get with my dual monitor card when I tried earlier to get SUSE running on a separate
partition on my box which led to me giving up.
&lt;/p&gt;
&lt;p&gt;
I recommend you give&amp;nbsp;it a try. Amazing what the Mono team has done. Kudos again
to Miguel and his team and all those who have contributed to the Mono project.&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=92491d59-ef7a-4e95-9d45-c58bd7423480" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,92491d59-ef7a-4e95-9d45-c58bd7423480.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=0923a2be-8b16-4a7b-86ad-2dcb7526d4ab</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,0923a2be-8b16-4a7b-86ad-2dcb7526d4ab.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,0923a2be-8b16-4a7b-86ad-2dcb7526d4ab.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0923a2be-8b16-4a7b-86ad-2dcb7526d4ab</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p align="left">
There is much ado about the coming <a href="http://en.wikipedia.org/wiki/Semantic_Web">Semantic
Web</a> and the dream of objectifying all the data in the world allowing machines
to exchange mindshare, yada, yada, yada. But what happens to old web pages when they
die? Do they go to HTTP heaven? And when this glorious web for machines supplants
the Legacy Web (that messy old WWW), what will we all do with our fancy browsers?
Where will we find the fuel to power our AJAX rocket engines? And how will humans
survive the rising tide of <font face="Courier New">&lt;tag&gt;&lt;mytag&gt;<br />
&lt;yourtag&gt;hey&lt;/yourtag&gt;<br />
&lt;/mytag&gt;&lt;/tag&gt;</font> drive by taggings?
</p>
        <p align="left">
The truth is that while the semantic web will find some heavy hitters to knock it
out of the park in a variety of industrial and scientific arenas, I'm not sure the
messy old WWW is ready for retirement just yet. I doubt the content switch will occur
very rapidly in most corners of the world given that most users of the web currently
are human and they use the mundane web browser occasionally flicking the AJAX booster
switch and dreaming of the connected client days of yore.
</p>
        <p align="left">
We humans like messes. Just look around your office if you don't believe me. Four
out of five dentists recommend a messy desk for a healthy work life. And if you don't
believe me, <a href="http://evolvingtrends.wordpress.com/2006/06/26/wikipedia-30-the-end-of-google/">Google
it</a>.
</p>
        <p align="left">
Still, the semantic web bears some level of intrigue beyond its obvious usefulness
in some areas of business and science. In fact, I'd love to have a browser that would
help me make more sense of the mess on the WWW or even the mess on my desk.
</p>
        <p align="left">
My New Year's resolution is to explore that idea and determine whether or not it can
be done in the messy old WWW world without holding a gun to the head of all those
gumbah's with an HTML six shooter in their belt.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=0923a2be-8b16-4a7b-86ad-2dcb7526d4ab" />
      </body>
      <title>Semantic Web and Legacy Web</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,0923a2be-8b16-4a7b-86ad-2dcb7526d4ab.aspx</guid>
      <link>http://www.tsjensen.com/blog/2007/01/02/Semantic+Web+And+Legacy+Web.aspx</link>
      <pubDate>Tue, 02 Jan 2007 03:43:40 GMT</pubDate>
      <description>&lt;p align=left&gt;
There is much ado about the coming &lt;a href="http://en.wikipedia.org/wiki/Semantic_Web"&gt;Semantic
Web&lt;/a&gt; and the dream of objectifying all the data in the world allowing machines
to exchange mindshare, yada, yada, yada. But what happens to old web pages when they
die? Do they go to HTTP heaven? And when this glorious web for machines supplants
the Legacy Web (that messy old WWW), what will we all do with our fancy browsers?
Where will we find the fuel to power our AJAX rocket engines? And how will humans
survive the&amp;nbsp;rising tide of &lt;font face="Courier New"&gt;&amp;lt;tag&amp;gt;&amp;lt;mytag&amp;gt;&lt;br&gt;
&amp;lt;yourtag&amp;gt;hey&amp;lt;/yourtag&amp;gt;&lt;br&gt;
&amp;lt;/mytag&amp;gt;&amp;lt;/tag&amp;gt;&lt;/font&gt; drive by taggings?
&lt;/p&gt;
&lt;p align=left&gt;
The truth is that while the semantic web will find some heavy hitters to knock it
out of the park in a variety of industrial and scientific arenas, I'm not sure the
messy old WWW is ready for retirement just yet. I doubt the content switch will occur
very rapidly in most corners of the world given that most users of the web currently
are human and they use the mundane web browser occasionally flicking the AJAX booster
switch and dreaming of the connected client days of yore.
&lt;/p&gt;
&lt;p align=left&gt;
We humans like messes. Just look around your office if you don't believe me. Four
out of five dentists recommend a messy desk for a healthy work life. And if you don't
believe me, &lt;a href="http://evolvingtrends.wordpress.com/2006/06/26/wikipedia-30-the-end-of-google/"&gt;Google
it&lt;/a&gt;.
&lt;/p&gt;
&lt;p align=left&gt;
Still, the semantic web bears some level of intrigue beyond its obvious usefulness
in some areas of business and science. In fact, I'd love to have a browser that would
help me make more sense of the mess on the WWW or even the mess on my desk.
&lt;/p&gt;
&lt;p align=left&gt;
My New Year's resolution is to explore that idea and determine whether or not it can
be done in the messy old WWW world without holding a gun to the head of all those
gumbah's with an HTML six shooter in their belt.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=0923a2be-8b16-4a7b-86ad-2dcb7526d4ab" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,0923a2be-8b16-4a7b-86ad-2dcb7526d4ab.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=d2152463-055b-4d7b-8cac-0e13fbaada60</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,d2152463-055b-4d7b-8cac-0e13fbaada60.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,d2152463-055b-4d7b-8cac-0e13fbaada60.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d2152463-055b-4d7b-8cac-0e13fbaada60</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p align="left">
I've been busy. Yeah. Sad excuse, but true. 
<br />
 <br />
On November 7, 2006, about two months after I was hired, my employer "invited" me
to resign my position because I refused to sign a mandatory arbitration agreement
which among other things included the following language: "I understand that by agreeing
to this binding arbitration provision, both I and [company name] give up our respective
rights to a trial by jury."
</p>
        <p align="left">
I told my employer that I didn't think I should have to waive my constitutional right
to petition the government for redress just because so many others abuse that right.
I had researched the issue on the Internet and found that these agreements are enforced
by the courts and that in about 99% of all cases, the employee loses, regardless of
the issues and facts.
</p>
        <p align="left">
I was annoyed. More at the law than at my employer. I know the law stands behind employers
on this issue. And I even support the idea of arbitration as a first option, but I
cannot abide the idea of just waiving my right to go to court just to keep a job.
I don't think the law should allow an employer to require such a concession upon employees,
but it does. Specifically, as long as both parties give up the same rights, the contract
is enforceable.
</p>
        <p align="left">
This would be just fine except for the fact that in arbitration, the little guy is
viewed by most arbiters (usually retired judges) as the money grubbing whiner and
the employer as the victim of the evil, greedy employee. So you give up the same rights
but you put yourself, as an employee, at a significant disadvantage if you run into
some dispute with an employer.
</p>
        <p align="left">
All that said, I've never been sued by an employer and I've never sued an employer.
Still, if I had to, I'd like to preserve the option of having a real court and a real
jury hear my case rather than an arbiter who answers to no one regardless of his or
her conduct and decisions in the face of the evidence. Take those odds? No thanks.
</p>
        <p align="left">
I was lucky. I found another job the same day I was "asked" to leave which happily
pays even better. And I've been super busy with the new gig ever since. Not everyone
has the same opportunity and flexibility that I enjoy, so I recognize this development
as a true blessing. 
</p>
        <p align="left">
Since that day, I've spent an hour or so contacting legislators about the issue. They
are generally either indifferent or completely ignorant or in some cases both. Senator
Hatch sent me a nice, completely off-base form letter reply referring me to legal
counsel despite the fact that I had just asked for his opinion on whether employers
should be allowed to continue this practice and whether he would support legislation
to prohibit it. Many others just never responded. It's pretty sad when elected officials
care so little about the way that employers are now forcing their employees to give
up their constitutionally protected rights just because they are afraid of employees
who abuse those rights.
</p>
        <p align="left">
It's typical fare for our culture. Punish those who have done nothing wrong in the
false hope of protecting yourself from the real bad guys. Similar examples are not
difficult to find. Such draconian practices are not needed. If you're going to get
sued by employees, you're going to get sued. And if it happens a lot, you might want
to consider changing your behavior and/or changing who and how you hire.
</p>
        <p align="left">
If you're reading this and you've signed employment documents without really reading
them, you may have signed a similar document. I recommend reading every document your
employer "invites" you to sign. Despite your excitement to have a new job and your
high opinion of the people you'll be working for, you may be surprised at what they've
asked you to agree to. There's only one way out of such an agreement. Don't sign it
in the first place. I really liked the people at the former job, but regardless of
my regard for them, I was not about to give up my rights in order to work for them.
</p>
        <p align="left">
Of course, everything I've said here is my own opinion. I'm sure my former employer
sees it completely differently. I bear them no ill will and certainly have no plans
to waste time and energy on the lawsuit that so many of my friends have recommended
that I bring against them. I would just hope that they would see their actions for
the paranoia I believe it to be and revise their agreements with their existing employees.
I think it would be the right and moral thing to do. But that's up to them.
</p>
        <p align="left">
With that all said, I'll get back to coding and promise some real .NET coding
posts here in the future.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=d2152463-055b-4d7b-8cac-0e13fbaada60" />
      </body>
      <title>Beware the Arbitration Agreement</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,d2152463-055b-4d7b-8cac-0e13fbaada60.aspx</guid>
      <link>http://www.tsjensen.com/blog/2006/12/21/Beware+The+Arbitration+Agreement.aspx</link>
      <pubDate>Thu, 21 Dec 2006 00:44:01 GMT</pubDate>
      <description>&lt;p align=left&gt;
I've been busy. Yeah. Sad excuse, but true. 
&lt;br&gt;
&amp;nbsp;&lt;br&gt;
On November 7, 2006, about two months after I was hired, my employer "invited" me
to resign my position because I refused to sign a mandatory arbitration agreement
which among other things included the following language: "I understand that by agreeing
to this binding arbitration provision, both I and [company name] give up our respective
rights to a trial by jury."
&lt;/p&gt;
&lt;p align=left&gt;
I told my employer that I didn't think I should have to waive my constitutional right
to petition the government for redress just because so many others abuse that right.
I had researched the issue on the Internet and found that these agreements are enforced
by the courts and that in about 99% of all cases, the employee loses, regardless of
the issues and facts.
&lt;/p&gt;
&lt;p align=left&gt;
I was annoyed. More at the law than at my employer. I know the law stands behind employers
on this issue. And I even support the idea of arbitration as a first option, but I
cannot abide the idea of just waiving my right to go to court just to keep a job.
I don't think the law should allow an employer to require such a concession upon employees,
but it does. Specifically, as long as both parties give up the same rights, the contract
is enforceable.
&lt;/p&gt;
&lt;p align=left&gt;
This would be just fine except for the fact that in arbitration, the little guy is
viewed by most arbiters (usually retired judges) as the money grubbing whiner and
the employer as the victim of the evil, greedy employee. So you give up the same rights
but you put yourself, as an employee, at a significant disadvantage if you run into
some dispute with an employer.
&lt;/p&gt;
&lt;p align=left&gt;
All that said, I've never been sued by an employer and I've never sued an employer.
Still, if I had to, I'd like to preserve the option of having a real court and a real
jury hear my case rather than an arbiter who answers to no one regardless of his or
her conduct and decisions in the face of the evidence. Take those odds? No thanks.
&lt;/p&gt;
&lt;p align=left&gt;
I was lucky. I found another job the same day I was "asked" to leave which happily
pays even better. And I've been super busy with the new gig ever since. Not everyone
has the same opportunity and flexibility that I enjoy, so I recognize this development
as a true blessing. 
&lt;/p&gt;
&lt;p align=left&gt;
Since that day, I've spent an hour or so contacting legislators about the issue. They
are generally either indifferent or completely ignorant or in some cases both. Senator
Hatch sent me a nice, completely off-base form letter reply referring me to legal
counsel despite the fact that I had just asked for his opinion on whether employers
should be allowed to continue this practice and whether he would support legislation
to prohibit it. Many others just never responded. It's pretty sad when elected officials
care so little about the way that employers are now forcing their employees to give
up their constitutionally protected rights just because they are afraid of employees
who abuse those rights.
&lt;/p&gt;
&lt;p align=left&gt;
It's typical fare for our culture. Punish those who have done nothing wrong in the
false hope of protecting yourself from the real bad guys. Similar examples are not
difficult to find. Such draconian practices are not needed. If you're going to get
sued by employees, you're going to get sued. And if it happens a lot, you might want
to consider changing your behavior and/or changing who and how you hire.
&lt;/p&gt;
&lt;p align=left&gt;
If you're reading this and you've signed employment documents without really reading
them, you may have signed a similar document. I recommend reading every document your
employer "invites" you to sign. Despite your excitement to have a new job and your
high opinion of the people you'll be working for, you may be surprised at what they've
asked you to agree to. There's only one way out of such an agreement. Don't sign it
in the first place. I really liked the people at the former job, but regardless of
my regard for them, I was not about to give up my rights in order to work for them.
&lt;/p&gt;
&lt;p align=left&gt;
Of course, everything I've said here is my own opinion. I'm sure my former employer
sees it completely differently. I bear them no ill will and certainly have no plans
to waste time and energy on the lawsuit that so many of my friends have recommended
that I bring against them. I would just hope that they would see their actions for
the paranoia I believe it to be and revise their agreements with their existing employees.
I think it would be the right and moral thing to do. But that's up to them.
&lt;/p&gt;
&lt;p align=left&gt;
With that all said, I'll get back to coding and promise some&amp;nbsp;real .NET coding
posts here in the future.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=d2152463-055b-4d7b-8cac-0e13fbaada60" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,d2152463-055b-4d7b-8cac-0e13fbaada60.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=50fae93d-3ac1-4b04-b755-3c842c853246</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,50fae93d-3ac1-4b04-b755-3c842c853246.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,50fae93d-3ac1-4b04-b755-3c842c853246.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=50fae93d-3ac1-4b04-b755-3c842c853246</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Thanks to Google CoOp, <a href="http://www.netbrick.net">www.netbrick.net</a> is now
my personal .NET developer search engine. With the help of a few friends, the list
of domains searched remains relevant to .NET development. This helps eliminate all
the clutter I get when hitting Google directly.
</p>
        <p>
Thanks to <a href="http://www.paulallen.net">Paul Allen</a> for alerting me to this
very cool feature. And if you use it, don't be afraid to click on the ads. :)
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=50fae93d-3ac1-4b04-b755-3c842c853246" />
      </body>
      <title>The .NET Developer Search Engine - Google CoOp</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,50fae93d-3ac1-4b04-b755-3c842c853246.aspx</guid>
      <link>http://www.tsjensen.com/blog/2006/10/27/The+NET+Developer+Search+Engine+Google+CoOp.aspx</link>
      <pubDate>Fri, 27 Oct 2006 19:44:36 GMT</pubDate>
      <description>&lt;p&gt;
Thanks to Google CoOp, &lt;a href="http://www.netbrick.net"&gt;www.netbrick.net&lt;/a&gt; is now
my personal .NET developer search engine. With the help of a few friends, the list
of domains searched remains relevant to .NET development. This helps eliminate all
the clutter I get when hitting Google directly.
&lt;/p&gt;
&lt;p&gt;
Thanks to &lt;a href="http://www.paulallen.net"&gt;Paul Allen&lt;/a&gt; for alerting me to this
very cool feature. And if you use it, don't be afraid to click on the ads. :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=50fae93d-3ac1-4b04-b755-3c842c853246" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,50fae93d-3ac1-4b04-b755-3c842c853246.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=381ba477-c099-4f81-8291-1449eac48b99</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,381ba477-c099-4f81-8291-1449eac48b99.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,381ba477-c099-4f81-8291-1449eac48b99.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=381ba477-c099-4f81-8291-1449eac48b99</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today I attended my first UCNUG meeting. It was great. Easy location. Perfect size
crowd. <a href="http://blog.devstone.com/aaron/archive/2006/10/25/2018.aspx">Great
presentation by Aaron Zupancic on refactoring</a>.
</p>
        <p>
Previous meetings have been held at <a href="http://www.uvsc.edu/">UVSC</a>, but fortunately
they got kicked out of there. I'm lazy by nature and didn't want to bother with finding
the room on a campus I don't know. This one was hosted gratiously by <a href="http://www.nuskin.com/">NuSkin</a> at
the East Bay location and that was easy to find.
</p>
        <p>
Aaron gave a well thought out, cogent presentation on the ins and outs of refactoring.
I actually learned some things. And for me, that makes any presentation valuable.
But it was a good presentation as much for what Aaron did not do as what he did do.
He did not just read from the book. Martin Fowler is great but the presentation was
really valuable because Aaron pulled examples and ideas into slides with even better
code examples.
</p>
        <p>
I've attended the <a href="http://www.utahdnug.org/">Utah .NET Users Group</a>, where
Aaron is the president, a few times. The presentations are generally good, including
Aaron's, but this one was much better. I'm trying to convice a buddy of mine to present
on CruiseControl.Net, NUnit and automated build and testing in general. I'll post
it here if I can get him to commit.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=381ba477-c099-4f81-8291-1449eac48b99" />
      </body>
      <title>Refactoring Utah County Dot Net Users Group</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,381ba477-c099-4f81-8291-1449eac48b99.aspx</guid>
      <link>http://www.tsjensen.com/blog/2006/10/26/Refactoring+Utah+County+Dot+Net+Users+Group.aspx</link>
      <pubDate>Thu, 26 Oct 2006 04:26:41 GMT</pubDate>
      <description>&lt;p&gt;
Today I attended my first UCNUG meeting. It was great. Easy location. Perfect size
crowd. &lt;a href="http://blog.devstone.com/aaron/archive/2006/10/25/2018.aspx"&gt;Great
presentation by Aaron Zupancic on refactoring&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Previous meetings have been held at &lt;a href="http://www.uvsc.edu/"&gt;UVSC&lt;/a&gt;, but fortunately
they got kicked out of there. I'm lazy by nature and didn't want to bother with finding
the room on a campus I don't know. This one was hosted gratiously by &lt;a href="http://www.nuskin.com/"&gt;NuSkin&lt;/a&gt; at
the East Bay location and that was easy to find.
&lt;/p&gt;
&lt;p&gt;
Aaron gave a well thought out, cogent presentation on the ins and outs of refactoring.
I actually learned some things. And for me, that makes any presentation valuable.
But it was a good presentation as much for what Aaron did not do as what he did do.
He did not just read from the book. Martin Fowler is great but the presentation was
really valuable because Aaron pulled examples and ideas into slides with even better
code examples.
&lt;/p&gt;
&lt;p&gt;
I've attended the &lt;a href="http://www.utahdnug.org/"&gt;Utah .NET Users Group&lt;/a&gt;, where
Aaron is the president,&amp;nbsp;a few times. The presentations are generally good, including
Aaron's, but this one was much better. I'm trying to convice a buddy of mine to present
on CruiseControl.Net, NUnit and automated build and testing in general. I'll post
it here if I can get him to commit.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=381ba477-c099-4f81-8291-1449eac48b99" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,381ba477-c099-4f81-8291-1449eac48b99.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=39f984d8-c292-4d8c-9a57-584547509a18</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,39f984d8-c292-4d8c-9a57-584547509a18.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,39f984d8-c292-4d8c-9a57-584547509a18.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=39f984d8-c292-4d8c-9a57-584547509a18</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Installed <a href="http://www.microsoft.com/ie">IE7 (7.0.5730.11)</a> over the top
of the beta. Everything working well so far. Ah, but now, because of the increasing
clutter on my drive, I'm running out of space and will soon be rebuilding my machine.
Just another chance to install, install, install.
</p>
        <p>
Point, click, wait. Repeat.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=39f984d8-c292-4d8c-9a57-584547509a18" />
      </body>
      <title>IE7 So Far So Good</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,39f984d8-c292-4d8c-9a57-584547509a18.aspx</guid>
      <link>http://www.tsjensen.com/blog/2006/10/20/IE7+So+Far+So+Good.aspx</link>
      <pubDate>Fri, 20 Oct 2006 02:27:39 GMT</pubDate>
      <description>&lt;p&gt;
Installed &lt;a href="http://www.microsoft.com/ie"&gt;IE7 (7.0.5730.11)&lt;/a&gt; over the top
of the beta. Everything working well so far. Ah, but now, because of the increasing
clutter on my drive, I'm running out of space and will soon be rebuilding my machine.
Just another chance to install, install, install.
&lt;/p&gt;
&lt;p&gt;
Point, click, wait. Repeat.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=39f984d8-c292-4d8c-9a57-584547509a18" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,39f984d8-c292-4d8c-9a57-584547509a18.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=51f7f1dd-e0c4-4fa1-80c2-454808ad7f91</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,51f7f1dd-e0c4-4fa1-80c2-454808ad7f91.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,51f7f1dd-e0c4-4fa1-80c2-454808ad7f91.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=51f7f1dd-e0c4-4fa1-80c2-454808ad7f91</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It's been less than a week and my <a href="http://www.photohistorydoc.com">www.photohistorydoc.com</a> site
has caught up by many RegNow affiliates, hacked by some warez hackers in the UK, Israel,
and Australia, and indexed by Google. The question I have is why does Google continue
to index warez sites whose primary purpose is to sabotage the shareware and commercial
software industry.
</p>
        <p>
So, Google, why? Why do you help promote these low lifes whose only goal seems to
be to troll for software thieves susceptible to the enticements of porn in order to
make money from the click flips to the real porn sites. Why? These sites don't use
AdSense, so there does not seem to be a monetary motive. What else can it be?
</p>
        <p>
Does anyone have a clue?
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=51f7f1dd-e0c4-4fa1-80c2-454808ad7f91" />
      </body>
      <title>Google and Warez - Why?</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,51f7f1dd-e0c4-4fa1-80c2-454808ad7f91.aspx</guid>
      <link>http://www.tsjensen.com/blog/2006/10/19/Google+And+Warez+Why.aspx</link>
      <pubDate>Thu, 19 Oct 2006 20:26:10 GMT</pubDate>
      <description>&lt;p&gt;
It's been less than a week and my &lt;a href="http://www.photohistorydoc.com"&gt;www.photohistorydoc.com&lt;/a&gt; site
has caught up by many RegNow affiliates, hacked by some warez hackers in the UK, Israel,
and Australia, and indexed by Google. The question I have is why does Google continue
to index warez sites whose primary purpose is to sabotage the shareware and commercial
software industry.
&lt;/p&gt;
&lt;p&gt;
So, Google, why? Why do you help promote these low lifes whose only goal seems to
be to troll for software thieves susceptible to the enticements of porn in order to
make money from the click flips to the real porn sites. Why? These sites don't use
AdSense, so there does not seem to be a monetary motive. What else can it be?
&lt;/p&gt;
&lt;p&gt;
Does anyone have a clue?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=51f7f1dd-e0c4-4fa1-80c2-454808ad7f91" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,51f7f1dd-e0c4-4fa1-80c2-454808ad7f91.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=af29b812-73fb-4293-8754-bd98dfde675b</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,af29b812-73fb-4293-8754-bd98dfde675b.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,af29b812-73fb-4293-8754-bd98dfde675b.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=af29b812-73fb-4293-8754-bd98dfde675b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
After two months of working nights and weekends, I've finally finished Photo History
Doc, my little contribution to the shareware world. I'd love to hear what you think
about it. Visit <a href="http://www.photohistorydoc.com">http://www.photohistorydoc.com</a> and
download it and let me know what you think.
</p>
        <p>
I'll post more about it and how it gets received out in the world later.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=af29b812-73fb-4293-8754-bd98dfde675b" />
      </body>
      <title>Photo History Doc Released</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,af29b812-73fb-4293-8754-bd98dfde675b.aspx</guid>
      <link>http://www.tsjensen.com/blog/2006/10/14/Photo+History+Doc+Released.aspx</link>
      <pubDate>Sat, 14 Oct 2006 19:49:55 GMT</pubDate>
      <description>&lt;p&gt;
After two months of working nights and weekends, I've finally finished Photo History
Doc, my little contribution to the shareware world. I'd love to hear what you think
about it. Visit &lt;a href="http://www.photohistorydoc.com"&gt;http://www.photohistorydoc.com&lt;/a&gt; and
download it and let me know what you think.
&lt;/p&gt;
&lt;p&gt;
I'll post more about it and how it gets received out in the world later.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=af29b812-73fb-4293-8754-bd98dfde675b" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,af29b812-73fb-4293-8754-bd98dfde675b.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=e106141d-a497-4aa2-b8a4-2905aa4ae0e9</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,e106141d-a497-4aa2-b8a4-2905aa4ae0e9.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,e106141d-a497-4aa2-b8a4-2905aa4ae0e9.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e106141d-a497-4aa2-b8a4-2905aa4ae0e9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm disabling trackback on my blog because one particular post gets spammed with about
30 porn trackback spams a week. All of them in one batch. They point to seemingly
empty places. So if you want to trackback here, sorry, too bad. It's too much of a
pain to delete all the spam trackbacks and there is no easy way to track the offender
or block him/her/it.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=e106141d-a497-4aa2-b8a4-2905aa4ae0e9" />
      </body>
      <title>Trackback Spammers Deserve a Horrible Death</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,e106141d-a497-4aa2-b8a4-2905aa4ae0e9.aspx</guid>
      <link>http://www.tsjensen.com/blog/2006/10/07/Trackback+Spammers+Deserve+A+Horrible+Death.aspx</link>
      <pubDate>Sat, 07 Oct 2006 19:07:40 GMT</pubDate>
      <description>&lt;p&gt;
I'm disabling trackback on my blog because one particular post gets spammed with about
30 porn trackback spams a week. All of them in one batch. They point to seemingly
empty places. So if you want to trackback here, sorry, too bad. It's too much of a
pain to delete all the spam trackbacks and there is no easy way to track the offender
or block him/her/it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=e106141d-a497-4aa2-b8a4-2905aa4ae0e9" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,e106141d-a497-4aa2-b8a4-2905aa4ae0e9.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=649797c5-fe1e-4635-b2e9-25245ba829dc</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,649797c5-fe1e-4635-b2e9-25245ba829dc.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,649797c5-fe1e-4635-b2e9-25245ba829dc.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=649797c5-fe1e-4635-b2e9-25245ba829dc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I want a T-shirt with these words on it:
</p>
        <p>
Bad Code is Platform Independent
</p>
        <p>
All the political and religious debates about platform superiority all come to an
end when running bad code. It amazes me how much bad code is out there (some of mine
included). And yet we so often jump to blame the platform, runtime, operating system,
tools, or some other outside element.
</p>
        <p>
Where have all the good coders gone? More to the point. Were there ever any?
</p>
        <p>
Bad coders never die, they just pick a new platform.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=649797c5-fe1e-4635-b2e9-25245ba829dc" />
      </body>
      <title>Bad Code is Platform Independent</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,649797c5-fe1e-4635-b2e9-25245ba829dc.aspx</guid>
      <link>http://www.tsjensen.com/blog/2006/09/12/Bad+Code+Is+Platform+Independent.aspx</link>
      <pubDate>Tue, 12 Sep 2006 17:17:00 GMT</pubDate>
      <description>&lt;p&gt;
I want a T-shirt with these words on it:
&lt;/p&gt;
&lt;p&gt;
Bad Code is Platform Independent
&lt;/p&gt;
&lt;p&gt;
All the political and religious debates about platform superiority all come to an
end when running bad code. It amazes me how much bad code is out there (some of mine
included). And yet we so often jump to blame the platform, runtime, operating system,
tools, or some other outside element.
&lt;/p&gt;
&lt;p&gt;
Where have all the good coders gone? More to the point. Were there ever any?
&lt;/p&gt;
&lt;p&gt;
Bad coders never die, they just pick a new platform.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=649797c5-fe1e-4635-b2e9-25245ba829dc" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,649797c5-fe1e-4635-b2e9-25245ba829dc.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=7b237d17-b93b-4610-af47-5275042f4f28</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,7b237d17-b93b-4610-af47-5275042f4f28.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,7b237d17-b93b-4610-af47-5275042f4f28.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7b237d17-b93b-4610-af47-5275042f4f28</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Nothing like a great laugh to perk up your day. Stumbled onto this <a href="http://archive.computerhistory.org/resources/text/Zilog/Zilog.Z8000.1979.102646293.pdf">Captain
Zilog</a> on computerhistory.org today. Take a moment and read it. What happened to
those good old days? Did the <a href="http://www.zilog.com/">dolldrums of reality take
over</a>?
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
"Systems designer Nick Stacey works late into the night, unknown to him, a small eerie
comet passes overhead..."
</p>
          <p>
"I am known to men as...opportunity! I give you the key to man's destiny in a brave
new world!"
</p>
          <p>
"It is the beginning of a new freedom for man's imagination! It is a microprocessor!
I bestow upon you all of the knowledge that goes with it, but use it wisely! Now,
go!"
</p>
        </blockquote>
        <p>
Corny? Yes. Prescient? Definitely. It was 1979. I was in junior high school. It was
the battle of the little, inventive, hungry geek vs. the titans of business with deeper
pockets than I could imagine. It was an epoc battle that went to the best and the
brightest, not to the most powerful. Or so it seemed. But as a kid, I was only barely
aware of the war that raged in the world of technology in those days. To me, it was
just an exciting time of change. 
</p>
        <p>
Now, change is more terrifying because I have responsibilities. I have four kids,
a mortgage and car payments. Just like everybody else I know. And a lot has changed
in the last couple of months. And it's been terrifying. And exciting. Two days ago,
I blogged about the ethics of meta-searching. It came as a shock to others involved
in the project because I had not discussed it with them. I blindsided them. That was
fundamentally unfair. And yet, even had I wrung my hands over the issue and discussed
it with them, it would probably not have changed the end result. Things changed. And
it scared the heck out me. Some of them are probably still angry with me. I don't
blame them. I would be too. 
</p>
        <p>
Looking back to the days of Captain Zilog made me laugh. It also made me think. Zilog
is not a player in the huge PC market. But it's still alive and from all appearances,
it's doing well. They innovated. They struggled. They stayed alive and ultimately
found a niche market that has served them well. Are they comparable to giants like
Intel and Microsoft? No way. But did they survive? Did they make money. I'm guessing
that they must have given the fact that they're still around and still selling the
Z8 line.
</p>
        <p>
So what is our challenge? We must find a way to survive. Find a way to innovate something
truly useful. Believe in that thing. Work hard to make that thing succeed, even if
it's in a market you had not originally foreseen. In other words, we must adapt without
losing a sense of who we are or what we've created. Time will tell if we, as technologists
and entrepreneurs will do just that.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=7b237d17-b93b-4610-af47-5275042f4f28" />
      </body>
      <title>Captain Zilog - Redux</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,7b237d17-b93b-4610-af47-5275042f4f28.aspx</guid>
      <link>http://www.tsjensen.com/blog/2006/08/23/Captain+Zilog+Redux.aspx</link>
      <pubDate>Wed, 23 Aug 2006 04:09:32 GMT</pubDate>
      <description>&lt;p&gt;
Nothing like a great laugh to perk up your day. Stumbled onto this &lt;a href="http://archive.computerhistory.org/resources/text/Zilog/Zilog.Z8000.1979.102646293.pdf"&gt;Captain
Zilog&lt;/a&gt; on computerhistory.org today. Take a moment and read it. What happened to
those good old days? Did the &lt;a href="http://www.zilog.com/"&gt;dolldrums of reality&amp;nbsp;take
over&lt;/a&gt;?
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
"Systems designer Nick Stacey works late into the night, unknown to him, a small eerie
comet passes overhead..."
&lt;/p&gt;
&lt;p&gt;
"I am known to men as...opportunity! I give you the key to man's destiny in a brave
new world!"
&lt;/p&gt;
&lt;p&gt;
"It is the beginning of a new freedom for man's imagination! It is a microprocessor!
I bestow upon you all of the knowledge that goes with it, but use it wisely! Now,
go!"
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Corny? Yes. Prescient? Definitely. It was 1979. I was in junior high school. It was
the battle of the little, inventive, hungry geek vs. the titans of business with deeper
pockets than I could imagine. It was an epoc battle that went to the best and the
brightest, not to the most powerful. Or so it seemed. But as a kid, I was only barely
aware of the war that raged in the world of technology in those days. To me, it was
just an exciting time of change. 
&lt;/p&gt;
&lt;p&gt;
Now, change is more terrifying because I have responsibilities. I have four kids,
a mortgage and car payments. Just like everybody else I know. And a lot has changed
in the last couple of months. And it's been terrifying. And exciting. Two days ago,
I blogged about the ethics of meta-searching. It came as a shock to others involved
in the project because I had not discussed it with them. I blindsided them. That was
fundamentally unfair. And yet, even had I wrung my hands over the issue and discussed
it with them, it would probably not have changed the end result. Things changed. And
it scared the heck out me. Some of them are probably still angry with me. I don't
blame them. I would be too. 
&lt;/p&gt;
&lt;p&gt;
Looking back to the days of Captain Zilog made me laugh. It also made me think. Zilog
is not a player in the huge PC market. But it's still alive and from all appearances,
it's doing well. They innovated. They struggled. They stayed alive and ultimately
found a niche market that has served them well. Are they comparable to giants like
Intel and Microsoft? No way. But did they survive? Did they make money. I'm guessing
that they must have given the fact that they're still around and still selling the
Z8 line.
&lt;/p&gt;
&lt;p&gt;
So what is our challenge? We must find a way to survive. Find a way to innovate something
truly useful. Believe in that thing. Work hard to make that thing succeed, even if
it's in a market you had not originally foreseen. In other words, we must adapt without
losing a sense of who we are or what we've created. Time will tell if we, as technologists
and entrepreneurs will do just that.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=7b237d17-b93b-4610-af47-5275042f4f28" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,7b237d17-b93b-4610-af47-5275042f4f28.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=9322f17b-7fd4-4708-9419-c14a6a7726f6</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,9322f17b-7fd4-4708-9419-c14a6a7726f6.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,9322f17b-7fd4-4708-9419-c14a6a7726f6.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9322f17b-7fd4-4708-9419-c14a6a7726f6</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font size="1">(Modified slightly on Monday, August 21, 2006, after considering issues
of fairness and further introspection.)</font>
        </p>
        <p>
For the first seven months of this year I worked on a project which, in part, was
a meta-search tool designed to bypass the router pacing algorithms used by sites
such as Google, Yahoo and MSN. I have come to believe that even if this were not a
violation of their terms of use, it would be fundamentally unethical. I cannot claim
the high road in having come to this conclusion. I did not arrive at this conclusion
until some time after becoming unemployed and then re-employed.
</p>
        <p>
Yesterday I began to question myself more seriously about the ethics of meta-searching
than I had done before. Without doing any online research, a rarity for me, I
just wrote down in long hand some basic questions and let one lead to another. My
conclusion was that I could not ethically or morally justify the acquisition of data
and resale of it in some form or another using meta-search techniques in violation
of the source's terms of use.
</p>
        <p>
On July 21, 2006, I was <a href="http://www.phil801.com/wpblog/2006/08/16/breaking-the-silence-provo-labs/">suddenly
unemployed</a> along with the rest of the development team at <a href="http://www.provolabs.com/">Provo
Labs LLC</a>, a <a href="http://www.paulallen.net/">Paul Allen (the lesser)</a> venture.
I didn't abandon the project even then. I looked for ways to keep the project alive.
After all, I had spent months, including nearly every Saturday and Sunday, working
on the code for this project. It was my baby. I was the only developer on it. A week
or so after that fateful day in July, reality set in. I had no income and four children
to feed. I had to find a job. And I did. A great job! The timing could not have been
better.
</p>
        <p>
In my first three days on the new job, I was impressed by the effort and expense the
company is willing to expend to be sure that copyrighted material used in their product
is properly licensed. This reminded me of a conversation I had had with management
at Provo Labs earlier in the year. I had raised the question of the ethics of meta-searching
and collecting data using automation from public search engines and other resources
whose terms of use statements clearly prohibit such behavior. The discussion was brief
and the subject was quickly swept aside. It boiled down to "everybody does it, including
the search engines, so that makes it okay". I filed that rationalization away and
kept going.
</p>
        <p>
The intellectual property transfer from Provo Labs LLC to the new company Phil Burns
is starting had not yet happened. I had even contemplated using my company, NetBrick
Inc, an S corp of which I am the sole shareholder, as a holding company for this new
venture. But I had become impatient and as Phil put it, "emotional and panicky". 
</p>
        <p>
I had my doubts about the whole deal and so today I pulled myself out of the deal
entirely in part because I had lost faith that we would successfully negotiate the
intellectual property rights to this product, in part because I did not believe I
would have time to continue working on the project, but mostly because I had come
to believe that it would simply be the wrong thing to do.
</p>
        <p>
This process of introspection has been painful. I had to admit to myself that for
the last seven months of my life, I have been building, enthusiastically, a product
that was in large measure designed to violate the terms of use and possibly violate
the law in the acquisition of meta-data from search engines and other sites for the
express purpose of reselling that data in the form of market research and other such
reports. I had rationalized this by thinking that we would not sell the data but only
the conclusions we reached from the data. Splitting hairs like this was just another
way to sweep the ethical inconsistency under the rug.
</p>
        <p>
Today I informed Phil and Paul that I will no longer be involved with the project
as it stands and that I will deliver the code in its existing form. I did not
share with them my reasoning behind my decision because I really did not want to engage
them in a debate on the merits of my decision. We had already been down that
road. 
</p>
        <p>
After I informed Phil and Paul by email, I did some online research--something I really
should have done, and unbelievably did not ever do, prior to starting the project.
From any of the big three engines (Google, Yahoo, and MSN), you can click one or two
links to get to the following terms of service information.
</p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <strong>Google</strong>
            <br />
            <a href="http://www.google.com/intl/en/terms_of_service.html">http://www.google.com/intl/en/terms_of_service.html</a>
            <br />
"The Google Services are made available for your personal, non-commercial use only.
You may not use the Google Services to sell a product or service, or to increase traffic
to your Web site for commercial reasons... You may not take the results from a Google
search and reformat and display them... You may not "meta-search" Google... You may
not send automated queries of any sort to Google's system without express permission
in advance from Google. Note that "sending automated queries" includes, among other
things: using any software which sends queries to Google to determine how a website
or webpage "ranks" on Google for various queries; 
<br />
"meta-searching" Google; and performing "offline" searches on Google.
</p>
          <p>
            <strong>MSN<br /></strong>
            <a href="http://tou.live.com/en-us/">http://tou.live.com/en-us/</a>
            <br />
"In using the service, you may not:...use any automated process or service to access
and/or use the service (such as a BOT, a spider, periodic caching of information stored
by Microsoft, or “meta-searching”);"
</p>
          <p>
            <strong>Yahoo &amp; Overture</strong>
            <br />
            <a href="http://docs.yahoo.com/info/terms/">http://docs.yahoo.com/info/terms/</a>
            <br />
"Except as expressly authorized by Yahoo! or advertisers, you agree not to modify,
rent, lease, loan, sell, distribute or create derivative works based on the Service
or the Software, in whole or in part."
</p>
        </blockquote>
        <p>
Clearly, these search engines do not want you to use automated search software to
mine their meta-data presented in search results and the results of other search related
queries. It is clear that their intent is to only allow individual users through
a normal web browser to access and use this information. Yahoo is more vague
than the other two but the intent is still there.
</p>
        <p>
So is the search engine behavior of crawling the content and indexing the content
of other web sites unethical or immoral? Does that violate the terms of use posted
by many other sites? Will the search engines remove your content from their site if
you request it? I do not believe that it is unethical or immoral to drive traffic
to a web site because its content contains what a search engine user probably wants
to find. The search engine is not repackaging and reselling the data they find on
the crawled sites. Yet they do profit in some measure from mining that content, for
without the content, they would have no users. It seems to be a trade that most web
site owners are willing to make. 
</p>
        <p>
I want to make it clear here and now that I believe that if I had made my concerns
known to Provo Labs management more forcefully in the early days of this project,
they would not have required me to work on it. They would have, I think, found something
else for me to do. I hope this illustrates the flaw in my own character,
which I hope to remedy in this, and does not leave the reader of this post to
believe that Provo Labs LLC acted in an unethical manner.
</p>
        <p>
The code is powerful and capable of being extended and used in a variety of ways. A
friend of mine pointed out to me that not everything it does is a violation of terms
of use document. In fact there is a lot of things that it is designed to do which
goes no further than a typical web crawler in terms of gathering data. Perhaps a means
can be found to make use of what it can do without violating terms of use policies.
Perhaps the power of the code can be leveraged within the framework of licensed
APIs. This is something that will have be determined.
</p>
        <p>
Until that time, I'll continue my work at my new job and focus my personal coding
efforts on my Forseti Project to keep my coding skills as sharp as I can. And I will
take away an important lesson from this whole roller coaster ride: always
examine and question the ethics of a project and then listen to your instincts.
</p>
        <p>
If you'd like to comment and berate me here, go right ahead. I deserve it. If you're
particularly vicious, I reserve the right to edit or remove the comment. If you've
had similar experiences and stood up more valiantly, I'd like to hear about it and
how it all turned out for you.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=9322f17b-7fd4-4708-9419-c14a6a7726f6" />
      </body>
      <title>Respecting Terms of Use -- The Ethics of Meta-Searching</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,9322f17b-7fd4-4708-9419-c14a6a7726f6.aspx</guid>
      <link>http://www.tsjensen.com/blog/2006/08/21/Respecting+Terms+Of+Use+The+Ethics+Of+MetaSearching.aspx</link>
      <pubDate>Mon, 21 Aug 2006 04:07:02 GMT</pubDate>
      <description>&lt;p&gt;
&lt;font size=1&gt;(Modified slightly on Monday, August 21, 2006, after considering issues
of fairness and further introspection.)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
For the first seven months of this year I worked on a project which, in part, was
a&amp;nbsp;meta-search tool designed to bypass the router pacing algorithms used by sites
such as Google, Yahoo and MSN. I have come to believe that even if this were not a
violation of their terms of use, it would be fundamentally unethical. I cannot claim
the high road in having come to this conclusion. I did not arrive at this conclusion
until some time after becoming unemployed and then re-employed.
&lt;/p&gt;
&lt;p&gt;
Yesterday I began to question myself more seriously about the ethics of meta-searching
than I had&amp;nbsp;done before. Without doing any online research, a rarity for me, I
just wrote down in long hand some basic questions and let one lead to another. My
conclusion was that I could not ethically or morally justify the acquisition of data
and resale of it in some form or another using meta-search techniques in violation
of the source's terms of use.
&lt;/p&gt;
&lt;p&gt;
On July 21, 2006, I was &lt;a href="http://www.phil801.com/wpblog/2006/08/16/breaking-the-silence-provo-labs/"&gt;suddenly
unemployed&lt;/a&gt; along with the rest of the development team at &lt;a href="http://www.provolabs.com/"&gt;Provo
Labs LLC&lt;/a&gt;, a &lt;a href="http://www.paulallen.net/"&gt;Paul Allen (the lesser)&lt;/a&gt; venture.
I didn't abandon the project even then. I looked for ways to keep the project alive.
After all, I had spent months, including nearly every Saturday and Sunday, working
on the code for this project. It was my baby. I was the only developer on it. A week
or so after that fateful day in July, reality set in. I had no income and four children
to feed. I had to find a job. And I did. A great job! The timing could not have been
better.
&lt;/p&gt;
&lt;p&gt;
In my first three days on the new job, I was impressed by the effort and expense the
company is willing to expend to be sure that copyrighted material used in their product
is properly licensed. This reminded me of a conversation I had had with management
at Provo Labs earlier in the year. I had raised the question of the ethics of meta-searching
and collecting data using automation from public search engines and other resources
whose terms of use statements clearly prohibit such behavior. The discussion was brief
and the subject was quickly swept aside. It boiled down to "everybody does it, including
the search engines, so that makes it okay". I filed that rationalization away and
kept going.
&lt;/p&gt;
&lt;p&gt;
The intellectual property transfer from Provo Labs LLC to the new company Phil Burns
is starting had not yet happened. I had even contemplated using my company, NetBrick
Inc, an S corp of which I am the sole shareholder, as a holding company for this new
venture. But I had become impatient and as Phil put it, "emotional and panicky". 
&lt;/p&gt;
&lt;p&gt;
I had my doubts about the whole deal and so today I pulled myself out of the deal
entirely in part because I had lost faith that we would successfully negotiate the
intellectual property rights to this product, in part because I did not believe I
would have time to continue working on the project, but mostly because I had come
to believe that it would simply be the wrong thing to do.
&lt;/p&gt;
&lt;p&gt;
This process of introspection has been painful. I had to admit to myself that for
the last seven months of my life, I have been building, enthusiastically, a product
that was in large measure designed to violate the terms of use and possibly violate
the law in the acquisition of meta-data from search engines and other sites for the
express purpose of reselling that data in the form of market research and other such
reports. I had rationalized this by thinking that we would not sell the data but only
the conclusions we reached from the data. Splitting hairs like this was just another
way to sweep the ethical inconsistency under the rug.
&lt;/p&gt;
&lt;p&gt;
Today I informed Phil and Paul that I will no longer be involved with the project
as it stands&amp;nbsp;and that I will deliver the code in its existing form. I did not
share with them my reasoning behind my decision because I really did not want to engage
them in a debate on the&amp;nbsp;merits of my decision. We had already been down that
road. 
&lt;/p&gt;
&lt;p&gt;
After I informed Phil and Paul by email, I did some online research--something I really
should have done, and unbelievably did not ever do, prior to starting the project.
From any of the big three engines (Google, Yahoo, and MSN), you can click one or two
links to get to the following terms of service information.
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
&lt;strong&gt;Google&lt;/strong&gt;
&lt;br&gt;
&lt;a href="http://www.google.com/intl/en/terms_of_service.html"&gt;http://www.google.com/intl/en/terms_of_service.html&lt;/a&gt;
&lt;br&gt;
"The Google Services are made available for your personal, non-commercial use only.
You may not use the Google Services to sell a product or service, or to increase traffic
to your Web site for commercial reasons... You may not take the results from a Google
search and reformat and display them... You may not "meta-search" Google... You may
not send automated queries of any sort to Google's system without express permission
in advance from Google. Note that "sending automated queries" includes, among other
things: using any software which sends queries to Google to determine how a website
or webpage "ranks" on Google for various queries; 
&lt;br&gt;
"meta-searching" Google; and performing "offline" searches on Google.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;MSN&lt;br&gt;
&lt;/strong&gt;&lt;a href="http://tou.live.com/en-us/"&gt;http://tou.live.com/en-us/&lt;/a&gt;
&lt;br&gt;
"In using the service, you may not:...use any automated process or service to access
and/or use the service (such as a BOT, a spider, periodic caching of information stored
by Microsoft, or “meta-searching”);"
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Yahoo &amp;amp; Overture&lt;/strong&gt;
&lt;br&gt;
&lt;a href="http://docs.yahoo.com/info/terms/"&gt;http://docs.yahoo.com/info/terms/&lt;/a&gt;
&lt;br&gt;
"Except as expressly authorized by Yahoo! or advertisers, you agree not to modify,
rent, lease, loan, sell, distribute or create derivative works based on the Service
or the Software, in whole or in part."
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Clearly, these search engines do not want you to use automated search software to
mine their meta-data presented in search results and the results of other search related
queries. It is clear that their intent&amp;nbsp;is to only allow individual users through
a normal web browser to&amp;nbsp;access and use this information. Yahoo is more vague
than the other two but the intent is still there.
&lt;/p&gt;
&lt;p&gt;
So is the search engine behavior of crawling the content and indexing the content
of other web sites unethical or immoral? Does that violate the terms of use posted
by many other sites? Will the search engines remove your content from their site if
you request it? I do not believe that it is unethical or immoral to drive traffic
to a web site because its content contains what a search engine user probably wants
to find. The search engine is not repackaging and reselling the data they find on
the crawled sites. Yet they do profit in some measure from mining that content, for
without the content, they would have no users. It seems to be a trade that most web
site owners are willing to make. 
&lt;/p&gt;
&lt;p&gt;
I want to make it clear here and now that I believe that if I had made my concerns
known&amp;nbsp;to Provo Labs management more forcefully in the early days of this project,
they would not have required me to work on it. They would have, I think, found something
else for me to do. I hope this&amp;nbsp;illustrates the flaw in my own&amp;nbsp;character,
which I hope to remedy in this,&amp;nbsp;and does not leave the reader of this post to
believe that Provo Labs LLC acted in an unethical manner.
&lt;/p&gt;
&lt;p&gt;
The code is powerful and capable of being extended and used in a variety of ways.&amp;nbsp;A
friend of mine pointed out to me that not everything it does is a violation of terms
of use document. In fact there is a lot of things that it is designed to do which
goes no further than a typical web crawler in terms of gathering data. Perhaps a means
can be found to make&amp;nbsp;use of what it can do without violating terms of use policies.
Perhaps the power of the code can be leveraged within the framework of&amp;nbsp;licensed
APIs.&amp;nbsp;This is something that will have be determined.
&lt;/p&gt;
&lt;p&gt;
Until that time, I'll continue my work at my new job and focus my personal coding
efforts on my Forseti Project to keep my coding skills as sharp as I can. And I will
take away&amp;nbsp;an important&amp;nbsp;lesson from this whole roller coaster ride: always
examine and question the ethics of a project and then listen to your instincts.
&lt;/p&gt;
&lt;p&gt;
If you'd like to comment and berate me here, go right ahead. I deserve it. If you're
particularly vicious, I reserve the right to edit or remove the comment. If you've
had similar experiences and stood up more valiantly, I'd like to hear about it and
how it all turned out for you.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=9322f17b-7fd4-4708-9419-c14a6a7726f6" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,9322f17b-7fd4-4708-9419-c14a6a7726f6.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=45d06e0a-55fd-4dbd-b594-bc3b6b485b49</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,45d06e0a-55fd-4dbd-b594-bc3b6b485b49.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,45d06e0a-55fd-4dbd-b594-bc3b6b485b49.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=45d06e0a-55fd-4dbd-b594-bc3b6b485b49</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Just found this referenced on an FTPOnline story: <a href="http://www.turboexplorer.com/">http://www.turboexplorer.com/</a></p>
        <p>
For an old Delphi aficionado (version 5 was my last), I can't wait to download the
Explorer versions to see what they've done with the place.
</p>
        <p>
I've always felt that starting with a Borland tool was a better place for a beginner
to start. And then you take a corporate job and everyone is drinking the blue coolaid.
Don't get me wrong. I like the coolaid too. Visual Studio 2005 is hands down the best
IDE I've worked with. And no, for you Eclipse fans, I've not tried that highly vaunted
IDE. I do know people that have used both and they invariably have good things to
say about both.
</p>
        <p>
Borland is spinning off the tools, so they say. So where will they be spun and how
do these new dolled up Turbo versions fit into the equation. And so I don't have to
wait so long, is there anyone at Borland that can get me a sneak peek copy. 
</p>
        <p>
I promise to run it through it's paces and report back here. I'm especially eager
to try the C++ flavor. Could the good old days of Turbo be back? Let's see....
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=45d06e0a-55fd-4dbd-b594-bc3b6b485b49" />
      </body>
      <title>Revive an Old Turbo Flame?</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,45d06e0a-55fd-4dbd-b594-bc3b6b485b49.aspx</guid>
      <link>http://www.tsjensen.com/blog/2006/08/09/Revive+An+Old+Turbo+Flame.aspx</link>
      <pubDate>Wed, 09 Aug 2006 03:37:28 GMT</pubDate>
      <description>&lt;p&gt;
Just found this referenced on an FTPOnline story: &lt;a href="http://www.turboexplorer.com/"&gt;http://www.turboexplorer.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
For an old Delphi aficionado (version 5 was my last), I can't wait to download the
Explorer versions to see what they've done with the place.
&lt;/p&gt;
&lt;p&gt;
I've always felt that starting with a Borland tool was a better place for a beginner
to start. And then you take a corporate job and everyone is drinking the blue coolaid.
Don't get me wrong. I like the coolaid too. Visual Studio 2005 is hands down the best
IDE I've worked with. And no, for you Eclipse fans, I've not tried that highly vaunted
IDE. I do know people that have used both and they invariably have good things to
say about both.
&lt;/p&gt;
&lt;p&gt;
Borland is spinning off the tools, so they say. So where will they be spun and how
do these new dolled up Turbo versions fit into the equation. And so I don't have to
wait so long, is there anyone at Borland that can get me a sneak peek copy. 
&lt;/p&gt;
&lt;p&gt;
I promise to run it through it's paces and report back here. I'm especially eager
to try the C++ flavor. Could the good old days of Turbo be back? Let's see....
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=45d06e0a-55fd-4dbd-b594-bc3b6b485b49" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,45d06e0a-55fd-4dbd-b594-bc3b6b485b49.aspx</comments>
      <category>Commentary</category>
    </item>
    <item>
      <trackback:ping>http://www.tsjensen.com/blog/Trackback.aspx?guid=6e6f35b7-e4c6-442b-a214-6753d9ec8b81</trackback:ping>
      <pingback:server>http://www.tsjensen.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.tsjensen.com/blog/PermaLink,guid,6e6f35b7-e4c6-442b-a214-6753d9ec8b81.aspx</pingback:target>
      <dc:creator>Tyler Jensen</dc:creator>
      <wfw:comment>http://www.tsjensen.com/blog/CommentView,guid,6e6f35b7-e4c6-442b-a214-6753d9ec8b81.aspx</wfw:comment>
      <wfw:commentRss>http://www.tsjensen.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6e6f35b7-e4c6-442b-a214-6753d9ec8b81</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>SOAP vs REST<br /></strong>In my work I've had occassion to use both SOAP and REST in the client and
the server. SOAP is easy if you have good tools. Hard wiring a WSDL is not my thing.
At the risk of committing a pun foul, I'd rather eat a bar of soap than hard code
good WSDL. Fortunately, .NET makes WSDL for simple web services easy, both on the
server and client end of things. And <a href="http://www.netbrick.net/blog/PermaLink,guid,ffb778ac-f53f-4dd3-a32d-fb68dd3c60f6.aspx">WSCF</a> makes
more complex web services easy in the .NET world.
</p>
        <p>
At the same time, REST is more comfortable, especially for those without nice support
tools for consuming SOAP on a plate of WSDL. A nice simple HTTP POST. A simple agreement
between friends to pass X, Y, and Z data along in a simple name value pair model. 
</p>
        <p>
          <strong>Trust or Verify</strong>
          <br />
I guess in some ways it comes down to trust. Do you trust the client to submit clean
data? Can you trust your server application to parse through and make safe any data
that is not clean? Or would you rather automate some of that authentication via schema
and the rigidity of SOAP? For me, it all depends on the circumstances. 
</p>
        <p>
          <strong>The Illusion of SOAP and Schema</strong>
          <br />
How tight are your contracts? A good lawyer will take a two page agreement and expand
it to ninety pages. Not only because she wants to bill you more but because she needs
to cover all the bases. Are your web service contract bases covered? Is the schema
and secondary validation sufficient.
</p>
        <p>
          <strong>Can REST Be Secure?</strong>
          <br />
This line of thought takes me to the question. Can we trust REST? Well, the short
answer is no. But the longer answer is, yes, just as much as we trust SOAP. The brilliance
of SOAP is the contract is carried with the data, or at least that data is transported
in a container with which the contract may be validated. So is that really better?
Well, the underlying truth is that someone else wrote a bunch of helper code to help
us perform the first level of validation in the message--form. But what about content.
Yes, schema validation can do some content validation as well, especially of the type
type of validation. Beyond that, it's up to you pretty much.
</p>
        <p>
          <strong>Validation Bottom Line</strong>
          <br />
Ultimately the value and robustness of a web service, whether you use REST for it's
simplicity or SOAP for the niceties of automated tools, will be determined by the
code you write to validate and execute and respond with an appropriately formed response.
</p>
        <p>
          <strong>Consider Your Audience</strong>
          <br />
Back in my poor old days as a technical writer, I had to always keep in mind
and understand my audience. It really does matter. For example, my mother would not
understand a single word of this post. If you are publishing web services, you
must consider who will consume them. Will they be a hodge podge of PHP, JSP, ASP,
and many other forms of "server pages" technology? Or will they be hard driving Visual
Studio SOAP users who would rather have the tool do the heavy lifting and eliminate
the need to parse? 
</p>
        <p>
Give your users what they want. And to do that, you may have to give them both SOAP
and REST. I guess that won't hurt us too much. After all, a hot shower is always a
good combination with a good night's rest.
</p>
        <img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=6e6f35b7-e4c6-442b-a214-6753d9ec8b81" />
      </body>
      <title>SOAP vs REST -- Clean vs Comfortable</title>
      <guid isPermaLink="false">http://www.tsjensen.com/blog/PermaLink,guid,6e6f35b7-e4c6-442b-a214-6753d9ec8b81.aspx</guid>
      <link>http://www.tsjensen.com/blog/2006/08/02/SOAP+Vs+REST+Clean+Vs+Comfortable.aspx</link>
      <pubDate>Wed, 02 Aug 2006 00:34:39 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;SOAP vs REST&lt;br&gt;
&lt;/strong&gt;In my work I've had occassion to use both SOAP and REST in the client and
the server. SOAP is easy if you have good tools. Hard wiring a WSDL is not my thing.
At the risk of committing a pun foul, I'd rather eat a bar of soap than hard code
good WSDL. Fortunately, .NET makes WSDL for simple web services easy, both on the
server and client end of things. And &lt;a href="http://www.netbrick.net/blog/PermaLink,guid,ffb778ac-f53f-4dd3-a32d-fb68dd3c60f6.aspx"&gt;WSCF&lt;/a&gt; makes
more complex web services easy in the .NET world.
&lt;/p&gt;
&lt;p&gt;
At the same time, REST is more comfortable, especially for those without nice support
tools for consuming SOAP on a plate of WSDL. A nice simple HTTP POST. A simple agreement
between friends to pass X, Y, and Z data along in a simple name value pair model. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Trust or Verify&lt;/strong&gt;
&lt;br&gt;
I guess in some ways it comes down to trust. Do you trust the client to submit clean
data? Can you trust your server application to parse through and make safe any data
that is not clean? Or would you rather automate some of that authentication via schema
and the rigidity of SOAP? For me, it all depends on the circumstances. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The Illusion of SOAP and Schema&lt;/strong&gt;
&lt;br&gt;
How tight are your contracts? A good lawyer will take a two page agreement and expand
it to ninety pages. Not only because she wants to bill you more but because she needs
to cover all the bases. Are your web service contract bases covered? Is the schema
and secondary validation sufficient.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Can REST Be Secure?&lt;/strong&gt;
&lt;br&gt;
This line of thought takes me to the question. Can we trust REST? Well, the short
answer is no. But the longer answer is, yes, just as much as we trust SOAP. The brilliance
of SOAP is the contract is carried with the data, or at least that data is transported
in a container with which the contract may be validated. So is that really better?
Well, the underlying truth is that someone else wrote a bunch of helper code to help
us perform the first level of validation in the message--form. But what about content.
Yes, schema validation can do some content validation as well, especially of the type
type of validation. Beyond that, it's up to you pretty much.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Validation Bottom Line&lt;/strong&gt;
&lt;br&gt;
Ultimately the value and robustness of a web service, whether you use REST for it's
simplicity or SOAP for the niceties of automated tools, will be determined by the
code you write to validate and execute and respond with an appropriately formed response.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Consider Your Audience&lt;/strong&gt;
&lt;br&gt;
Back in my poor old days as a technical writer,&amp;nbsp;I had to always keep in mind
and understand my audience. It really does matter. For example, my mother would not
understand a single word of this post.&amp;nbsp;If you are publishing web services, you
must consider who will consume them. Will they be a hodge podge of PHP, JSP, ASP,
and many other forms of "server pages" technology? Or will they be hard driving Visual
Studio SOAP users who would rather have the tool do the heavy lifting and eliminate
the need to parse? 
&lt;/p&gt;
&lt;p&gt;
Give your users what they want. And to do that, you may have to give them both SOAP
and REST. I guess that won't hurt us too much. After all, a hot shower is always a
good combination with a good night's rest.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.tsjensen.com/blog/aggbug.ashx?id=6e6f35b7-e4c6-442b-a214-6753d9ec8b81" /&gt;</description>
      <comments>http://www.tsjensen.com/blog/CommentView,guid,6e6f35b7-e4c6-442b-a214-6753d9ec8b81.aspx</comments>
      <category>Commentary</category>
    </item>
  </channel>
</rss>