<?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>The Imaginative Universal</title>
    <link>http://www.imaginativeuniversal.com/blog/</link>
    <description>Studies in Virtual Phenomenology</description>
    <language>en-us</language>
    <copyright>James Ashley</copyright>
    <lastBuildDate>Sat, 06 Mar 2010 21:10:24 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.2.8279.16125</generator>
    <managingEditor>james.ashley.magenic@gmail.com</managingEditor>
    <webMaster>james.ashley.magenic@gmail.com</webMaster>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=cbd313d2-93ed-460f-b732-8d2a560934df</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,cbd313d2-93ed-460f-b732-8d2a560934df.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,cbd313d2-93ed-460f-b732-8d2a560934df.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=cbd313d2-93ed-460f-b732-8d2a560934df</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="rainbow-bridge" border="0" alt="rainbow-bridge" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/BridgingtheSilverlightCodeDesignGap_E3B1/rainbow-bridge_3.jpg" width="244" height="196" />
        </p>
        <p>
Several friends and associates have been sending me links to Blend resources since
my last post on the Silverlight Code – Design Gap.  I would like to thank a few
in particular: <a href="http://www.85turns.com/" target="_blank">Corey Schuman</a>, <a href="http://adamkinney.wordpress.com/" target="_blank">Adam
Kinney</a> and <a href="http://www.meetup.com/The-Atlanta-Silverlight-Meetup-Group/members/8031807/" target="_blank">Amos
Kabaki</a>.
</p>
        <p>
          <strong>ShineDraw</strong>: Amos told me about a site called <a href="http://www.shinedraw.com" target="_blank">ShineDraw</a> that
has a <a href="http://www.shinedraw.com/flash-vs-silverlight-gallery/" target="_blank">Flash
vs Silverlight Gallery</a> demonstrating how the same effect can be accomplished in
Flash and in Silverlight.  Best of all, the examples are downloadable.
</p>
        <p>
          <strong>Project Rosetta</strong>: Both Corey and Adam clued me in to the recent <a href="http://adamkinney.wordpress.com/2010/03/03/big-update-for-the-project-rosetta-site-today/" target="_blank">reboot</a> of <a href="http://visitmix.com/labs/rosetta" target="_blank">Project
Rosetta</a>.  Project Rosetta is quickly adding content to be the first stop
for designers to learn to work with Blend and Silverlight.  There is a rich getting
started guide, a guide that helps designers <a href="http://visitmix.com/labs/rosetta/FTSL/Guide/" target="_blank">map</a> Flash
concepts to Silverlight concepts, and many, many tutorials including an essential
introduction on <a href="http://visitmix.com/labs/rosetta/EyesOfBlend/Import/" target="_blank">importing</a> Photoshop
files into Blend.
</p>
        <p>
          <strong>Expression Community</strong>: Not everyone knows about the <a href="http://social.expression.microsoft.com/Forums/en-US/category/expressionstudio" target="_blank">forum</a> for
Expression Blend developers. It is set up along the same lines as the ASP.NET and
Silverlight.NET forums with – clearly – a Blend bent.  There is also an associated <a href="http://gallery.expression.microsoft.com/en-us/" target="_blank">gallery</a> for
those looking for a bit of inspiration.
</p>
        <p>
If you are aware of additional Blend and Silverlight resources for designers, dear
reader, please add them to the comments.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=cbd313d2-93ed-460f-b732-8d2a560934df" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Bridging the Silverlight Code – Design Gap</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,cbd313d2-93ed-460f-b732-8d2a560934df.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/BridgingTheSilverlightCodeDesignGap.aspx</link>
      <pubDate>Sat, 06 Mar 2010 21:10:24 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="rainbow-bridge" border="0" alt="rainbow-bridge" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/BridgingtheSilverlightCodeDesignGap_E3B1/rainbow-bridge_3.jpg" width="244" height="196" /&gt; 
&lt;/p&gt;
&lt;p&gt;
Several friends and associates have been sending me links to Blend resources since
my last post on the Silverlight Code – Design Gap.&amp;#160; I would like to thank a few
in particular: &lt;a href="http://www.85turns.com/" target="_blank"&gt;Corey Schuman&lt;/a&gt;, &lt;a href="http://adamkinney.wordpress.com/" target="_blank"&gt;Adam
Kinney&lt;/a&gt; and &lt;a href="http://www.meetup.com/The-Atlanta-Silverlight-Meetup-Group/members/8031807/" target="_blank"&gt;Amos
Kabaki&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;ShineDraw&lt;/strong&gt;: Amos told me about a site called &lt;a href="http://www.shinedraw.com" target="_blank"&gt;ShineDraw&lt;/a&gt; that
has a &lt;a href="http://www.shinedraw.com/flash-vs-silverlight-gallery/" target="_blank"&gt;Flash
vs Silverlight Gallery&lt;/a&gt; demonstrating how the same effect can be accomplished in
Flash and in Silverlight.&amp;#160; Best of all, the examples are downloadable.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Project Rosetta&lt;/strong&gt;: Both Corey and Adam clued me in to the recent &lt;a href="http://adamkinney.wordpress.com/2010/03/03/big-update-for-the-project-rosetta-site-today/" target="_blank"&gt;reboot&lt;/a&gt; of &lt;a href="http://visitmix.com/labs/rosetta" target="_blank"&gt;Project
Rosetta&lt;/a&gt;.&amp;#160; Project Rosetta is quickly adding content to be the first stop
for designers to learn to work with Blend and Silverlight.&amp;#160; There is a rich getting
started guide, a guide that helps designers &lt;a href="http://visitmix.com/labs/rosetta/FTSL/Guide/" target="_blank"&gt;map&lt;/a&gt; Flash
concepts to Silverlight concepts, and many, many tutorials including an essential
introduction on &lt;a href="http://visitmix.com/labs/rosetta/EyesOfBlend/Import/" target="_blank"&gt;importing&lt;/a&gt; Photoshop
files into Blend.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Expression Community&lt;/strong&gt;: Not everyone knows about the &lt;a href="http://social.expression.microsoft.com/Forums/en-US/category/expressionstudio" target="_blank"&gt;forum&lt;/a&gt; for
Expression Blend developers. It is set up along the same lines as the ASP.NET and
Silverlight.NET forums with – clearly – a Blend bent.&amp;#160; There is also an associated &lt;a href="http://gallery.expression.microsoft.com/en-us/" target="_blank"&gt;gallery&lt;/a&gt; for
those looking for a bit of inspiration.
&lt;/p&gt;
&lt;p&gt;
If you are aware of additional Blend and Silverlight resources for designers, dear
reader, please add them to the comments.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=cbd313d2-93ed-460f-b732-8d2a560934df" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,cbd313d2-93ed-460f-b732-8d2a560934df.aspx</comments>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=a3300470-f774-4095-b4e0-6098ec979855</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,a3300470-f774-4095-b4e0-6098ec979855.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,a3300470-f774-4095-b4e0-6098ec979855.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a3300470-f774-4095-b4e0-6098ec979855</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
.NET developers tend to love Silverlight because it gives them the ability to write
cool applications using programming idioms they are familiar with.  Everything
about it screams out cool.  Furthermore, .NET developers do not need to learn
Flash to get Flash-like effects.  They can drop into the XAML (good ol’ XML)
in Visual Studio and start typing away with Intellisense standing by to help.
</p>
        <p>
Expression Blend is a little trickier.  It is a different idiom and .NET coders
have a hard time using it.  All the same, it is not completely alien.  A
.NET developer can still drop into the XAML if he wants to, and it is possible to
mentally translate between the drag-and-drop designer and the XAML that is produced
to the objects one assumes are being generated at runtime.  The bits that are
foreign are assumed to be there for designers.
</p>
        <p>
Yet designers have not embraced Expression Blend and finding out why is essential
to building an effective Silverlight development story. 
</p>
        <p>
Allison Richter recently joined the <a href="http://www.silverlightatlanta.net/" target="_blank">Silverlight
Atlanta User Group</a>.  In her introduction to the group she mentioned that
she is a designer who is mastering Silverlight but finding the experience frustrating. 
When I asked her about this she did more than simply offer a quick reply.  She
wrote an enlightening essay on her website <a href="http://2foldesign.com/index.html" target="_blank">2foldesign</a> explaining
the gap between designers and Silverlight coders.  You can read the entire essay <a href="http://2foldesign.com/thoughts.html" target="_blank">here</a> (the
speaker she refers to near the bottom is <a href="http://smartypantscoding.com/" target="_blank">Roger
Peters</a>, a lead Silverlight developer for IQ Interactive):
</p>
        <blockquote style="border-bottom: #000000 1px groove; text-align: left; border-left: #000000 1px groove; padding-bottom: 4px; margin: 4px auto 8px; padding-left: 12px; padding-right: 12px; background: #f5f5f5; border-top: #000000 1px groove; border-right: #000000 1px groove; padding-top: 4px">
          <p>
Reasons why designers may not be seeking a change to Silverlight could be that code
is not necessarily their passion. Code is what allows them to place their design into
a workable format. Kind of like when I paint, I may need to know how to stretch a
canvas onto a frame so I can paint, but I do not love doing so. So code is a necessity,
but not a passion. Most developers I know love to code. They love new code, new solutions.
They would just as easily go home and work on the computer all night after coding
all day for enjoyment. Designers want to pursue what they enjoy: design. Painting,
drawing, logos, ID, branding. I know personally I'll lay out $20 per mag for things
like a new Image FX without a second thought to see what other people are doing. Yet
I may not go out and research a new code language with as much zeal. 
</p>
          <p>
            <br />
On the question of frustration, there are many many areas so I will name a few. 
</p>
          <p>
            <br />
            <strong>Blend/Silverlight creates a dependency.</strong> True, most applications will
need a developer to work in concert with the designer to create a dynamic amazing
product. I also recognize that Flash does not have the capabilities that Silverlight
has. However first off when using Blend and Silverlight I had to be set up. This is
off-putting to many designers. We want something we can do ourselves. Adobe has it’s
products packaged up nicely and all we have to do is load. My developer had to help
sift through the right files, work with dlls, set up my environment etc. I have all
of my Expression software loaded, my Visual Studio hooked up, the toolkit downloaded
etc. If I had started out on my own as a designer I would have already been lost.
When I create with Flash, it’s one product in which I already know how to create everything
I need to create, then drop what is published into my HTML and CSS …
</p>
          <p>
My expectations before I started with Blend and XAML was that Silverlight would be
like Flash. The Blend software itself is very unlike Flash in many ways. I would relate
it more to ASP.NET than I would to Flash. The toolkit, the way you code in the XAML,
the types of containers that you apply. These seem to be very much like ASP.NET …
</p>
          <p>
            <strong>The toolkit controls are difficult to edit.</strong> I will go and watch as
many videos as I can before trying to create what I want. For example, I need to create
an accordion. Yes, there is a tool for that. Yes, you can learn how to edit it. Most
of the videos don’t explain all the parts of the XAML, they assume that you will just
use the properties area in Blend. Then they jump to the code behind and start doing
things that I would need my developer to do. So then I come to a grinding halt …
</p>
          <p>
            <strong>[Terminology] is misleading.</strong> From a designer standpoint things like <em>border</em> mean
a tiny thin line. You learn to put colored borders on all your divs/spans … to see
what you are doing in CSS. So now I’m created entire blocks of items within a border?
A border has a background? It’s not familiar to a designer. This makes the comparison
between what we know already and what the new code is maddening …
</p>
          <p>
            <strong>There is no one to ask.</strong> Most of the places I have worked after college,
I am the only designer. Other designers do not want to work with new technologies.
The old ones cater to the right side of the brain, so to speak. They know how to use
these programs, and time is money. The forums, information, videos seem mostly to
be for developers. As the speaker from last night said, there is no elusive Blend
designer with a background in Flash – good luck finding one. You guys [coders] can
pool your resources together and talk about what to do and how you got there, but
there is not a large resource of people for me to ask. 
</p>
        </blockquote>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=a3300470-f774-4095-b4e0-6098ec979855" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>The Silverlight Code – Design Gap</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,a3300470-f774-4095-b4e0-6098ec979855.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/TheSilverlightCodeDesignGap.aspx</link>
      <pubDate>Sat, 27 Feb 2010 19:23:39 GMT</pubDate>
      <description>&lt;p&gt;
.NET developers tend to love Silverlight because it gives them the ability to write
cool applications using programming idioms they are familiar with.&amp;#160; Everything
about it screams out cool.&amp;#160; Furthermore, .NET developers do not need to learn
Flash to get Flash-like effects.&amp;#160; They can drop into the XAML (good ol’ XML)
in Visual Studio and start typing away with Intellisense standing by to help.
&lt;/p&gt;
&lt;p&gt;
Expression Blend is a little trickier.&amp;#160; It is a different idiom and .NET coders
have a hard time using it.&amp;#160; All the same, it is not completely alien.&amp;#160; A
.NET developer can still drop into the XAML if he wants to, and it is possible to
mentally translate between the drag-and-drop designer and the XAML that is produced
to the objects one assumes are being generated at runtime.&amp;#160; The bits that are
foreign are assumed to be there for designers.
&lt;/p&gt;
&lt;p&gt;
Yet designers have not embraced Expression Blend and finding out why is essential
to building an effective Silverlight development story. 
&lt;/p&gt;
&lt;p&gt;
Allison Richter recently joined the &lt;a href="http://www.silverlightatlanta.net/" target="_blank"&gt;Silverlight
Atlanta User Group&lt;/a&gt;.&amp;#160; In her introduction to the group she mentioned that
she is a designer who is mastering Silverlight but finding the experience frustrating.&amp;#160;
When I asked her about this she did more than simply offer a quick reply.&amp;#160; She
wrote an enlightening essay on her website &lt;a href="http://2foldesign.com/index.html" target="_blank"&gt;2foldesign&lt;/a&gt; explaining
the gap between designers and Silverlight coders.&amp;#160; You can read the entire essay &lt;a href="http://2foldesign.com/thoughts.html" target="_blank"&gt;here&lt;/a&gt; (the
speaker she refers to near the bottom is &lt;a href="http://smartypantscoding.com/" target="_blank"&gt;Roger
Peters&lt;/a&gt;, a lead Silverlight developer for IQ Interactive):
&lt;/p&gt;
&lt;blockquote style="border-bottom: #000000 1px groove; text-align: left; border-left: #000000 1px groove; padding-bottom: 4px; margin: 4px auto 8px; padding-left: 12px; padding-right: 12px; background: #f5f5f5; border-top: #000000 1px groove; border-right: #000000 1px groove; padding-top: 4px"&gt; 
&lt;p&gt;
Reasons why designers may not be seeking a change to Silverlight could be that code
is not necessarily their passion. Code is what allows them to place their design into
a workable format. Kind of like when I paint, I may need to know how to stretch a
canvas onto a frame so I can paint, but I do not love doing so. So code is a necessity,
but not a passion. Most developers I know love to code. They love new code, new solutions.
They would just as easily go home and work on the computer all night after coding
all day for enjoyment. Designers want to pursue what they enjoy: design. Painting,
drawing, logos, ID, branding. I know personally I'll lay out $20 per mag for things
like a new Image FX without a second thought to see what other people are doing. Yet
I may not go out and research a new code language with as much zeal. 
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
On the question of frustration, there are many many areas so I will name a few. 
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;strong&gt;Blend/Silverlight creates a dependency.&lt;/strong&gt; True, most applications will
need a developer to work in concert with the designer to create a dynamic amazing
product. I also recognize that Flash does not have the capabilities that Silverlight
has. However first off when using Blend and Silverlight I had to be set up. This is
off-putting to many designers. We want something we can do ourselves. Adobe has it’s
products packaged up nicely and all we have to do is load. My developer had to help
sift through the right files, work with dlls, set up my environment etc. I have all
of my Expression software loaded, my Visual Studio hooked up, the toolkit downloaded
etc. If I had started out on my own as a designer I would have already been lost.
When I create with Flash, it’s one product in which I already know how to create everything
I need to create, then drop what is published into my HTML and CSS …
&lt;/p&gt;
&lt;p&gt;
My expectations before I started with Blend and XAML was that Silverlight would be
like Flash. The Blend software itself is very unlike Flash in many ways. I would relate
it more to ASP.NET than I would to Flash. The toolkit, the way you code in the XAML,
the types of containers that you apply. These seem to be very much like ASP.NET …
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;The toolkit controls are difficult to edit.&lt;/strong&gt; I will go and watch as
many videos as I can before trying to create what I want. For example, I need to create
an accordion. Yes, there is a tool for that. Yes, you can learn how to edit it. Most
of the videos don’t explain all the parts of the XAML, they assume that you will just
use the properties area in Blend. Then they jump to the code behind and start doing
things that I would need my developer to do. So then I come to a grinding halt …
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;[Terminology] is misleading.&lt;/strong&gt; From a designer standpoint things like &lt;em&gt;border&lt;/em&gt; mean
a tiny thin line. You learn to put colored borders on all your divs/spans … to see
what you are doing in CSS. So now I’m created entire blocks of items within a border?
A border has a background? It’s not familiar to a designer. This makes the comparison
between what we know already and what the new code is maddening …
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;There is no one to ask.&lt;/strong&gt; Most of the places I have worked after college,
I am the only designer. Other designers do not want to work with new technologies.
The old ones cater to the right side of the brain, so to speak. They know how to use
these programs, and time is money. The forums, information, videos seem mostly to
be for developers. As the speaker from last night said, there is no elusive Blend
designer with a background in Flash – good luck finding one. You guys [coders] can
pool your resources together and talk about what to do and how you got there, but
there is not a large resource of people for me to ask. 
&lt;/p&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=a3300470-f774-4095-b4e0-6098ec979855" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,a3300470-f774-4095-b4e0-6098ec979855.aspx</comments>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=07c4e070-7ee9-4ae3-8947-66f888796df1</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,07c4e070-7ee9-4ae3-8947-66f888796df1.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,07c4e070-7ee9-4ae3-8947-66f888796df1.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=07c4e070-7ee9-4ae3-8947-66f888796df1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="teleport" border="0" alt="teleport" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/NewJobPostingTeleportEngineer_8C9F/teleport_3.jpg" width="244" height="164" />
        </p>
        <p>
I’m always surprised at the rapid rate of technological progress.  I often sit
and watch my son play through Halo, Call of Duty, or Rock Band and get nostalgic for
the simpler days when I played Adventure, Kaboom and Pitfall.
</p>
        <p>
Imagine my amazement, then, when I received the following job posting for a Teleport
Engineer in my email:
</p>
        <blockquote style="border-bottom: #000000 1px groove; text-align: left; border-left: #000000 1px groove; padding-bottom: 4px; margin: 0px auto 8px; padding-left: 4px; padding-right: 4px; background: #f5f5f5; border-top: #000000 1px groove; border-right: #000000 1px groove; padding-top: 4px">
          <p>
Requisition # 
<br />
116684BR
</p>
          <p>
Posting 
<br />
Job Title 
<br />
Teleport Engineer
</p>
          <p>
TimeWarner 
<br />
Division 
<br />
Turner Broadcasting
</p>
          <p>
Location 
<br />
United States - Georgia - Atlanta
</p>
          <p>
Position 
<br />
Type 
<br />
Full Time
</p>
          <p>
Salary Grade_TBS 
<br />
N74
</p>
          <p>
Referral Bonus Eligible 
<br />
No
</p>
          <p>
Referral Bonus Amount _TBS 
<br />
0
</p>
          <p>
Posting Job Description
</p>
          <p>
            <br />
Qualifications: 3 to 5 years of experience working as a maintenance engineer in a 
<br />
earth station and/or broadcast facility. 
<br />
3 to 5 years experience working with RF, high voltage, emergency power systems and
high power RF amplifiers. 
<br />
Two to four year technical degree, electronics related (or equivalent education/experience/training).
Excellent customer services skills with attention to detail. 
<br />
Demonstrated organizational skills and ability to prioritize and multi-task in a high-stress
environment. 
<br />
A sense of urgency in solving customer requests to ensure timely resolution. 
<br />
Strong verbal and written communication skills in order to communicate with customers,
peers and vendors. 
<br />
Demonstrated ability to work in a team based environment to ensure 24x7x365 support
of our customers. 
<br />
Duties: Maintenance - troubleshooting, repair, calibration and preventative maintenance
of equipment and systems at the teleports. Maintenance is done to ensure that the
TBS customers have uplink and downlink resources available when required and to keep
outage time to a minimum. In addition, maintenance is imperative to ensure that the
teleport transmission and receive systems are compliant; requirements set forth by
the Federal Communications Commission (FCC), the satellite providers and OSHA. 
<br />
Projects - participation in the planning, installation and integration of new or replacement
equipment and systems. May act in lead role on small projects. 
<br />
Quality Control - ability to ensure outgoing, and incoming signals and content are
compliant with standards set forth by the FCC, the satellite providers, TBS and good
engineering practices. In addition this responsibility includes quality control of
installations equipment and documentation utilized by the teleports. 
<br />
Customer Service - provides the highest quality of customer service to our primary
customers - Teleport operations, Distribution technology, CNN satellites/SNG, TEN
and the TBS networks - by responding to requests in a timely manner. 
<br />
Documentation - thoroughly documents problems and issues in the operations log. Timely
and accurate completion on assigned projects including wire 
<br />
numbers, systems documentation, drawings, time sheets, time tracking and work orders.
</p>
          <p>
            <br />
Turner Broadcasting System, Inc. and its subsidiaries are Equal Opportunity Employers.
</p>
        </blockquote>
        <p>
And here I’ve been waiting for a job as a flying car mechanic.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=07c4e070-7ee9-4ae3-8947-66f888796df1" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>New Job Posting: Teleport Engineer</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,07c4e070-7ee9-4ae3-8947-66f888796df1.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/NewJobPostingTeleportEngineer.aspx</link>
      <pubDate>Mon, 15 Feb 2010 14:59:25 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="teleport" border="0" alt="teleport" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/NewJobPostingTeleportEngineer_8C9F/teleport_3.jpg" width="244" height="164" /&gt; 
&lt;/p&gt;
&lt;p&gt;
I’m always surprised at the rapid rate of technological progress.&amp;#160; I often sit
and watch my son play through Halo, Call of Duty, or Rock Band and get nostalgic for
the simpler days when I played Adventure, Kaboom and Pitfall.
&lt;/p&gt;
&lt;p&gt;
Imagine my amazement, then, when I received the following job posting for a Teleport
Engineer in my email:
&lt;/p&gt;
&lt;blockquote style="border-bottom: #000000 1px groove; text-align: left; border-left: #000000 1px groove; padding-bottom: 4px; margin: 0px auto 8px; padding-left: 4px; padding-right: 4px; background: #f5f5f5; border-top: #000000 1px groove; border-right: #000000 1px groove; padding-top: 4px"&gt; 
&lt;p&gt;
Requisition # 
&lt;br /&gt;
116684BR
&lt;/p&gt;
&lt;p&gt;
Posting 
&lt;br /&gt;
Job Title 
&lt;br /&gt;
Teleport Engineer
&lt;/p&gt;
&lt;p&gt;
TimeWarner 
&lt;br /&gt;
Division 
&lt;br /&gt;
Turner Broadcasting
&lt;/p&gt;
&lt;p&gt;
Location 
&lt;br /&gt;
United States - Georgia - Atlanta
&lt;/p&gt;
&lt;p&gt;
Position 
&lt;br /&gt;
Type 
&lt;br /&gt;
Full Time
&lt;/p&gt;
&lt;p&gt;
Salary Grade_TBS 
&lt;br /&gt;
N74
&lt;/p&gt;
&lt;p&gt;
Referral Bonus Eligible 
&lt;br /&gt;
No
&lt;/p&gt;
&lt;p&gt;
Referral Bonus Amount _TBS 
&lt;br /&gt;
0
&lt;/p&gt;
&lt;p&gt;
Posting Job Description
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
Qualifications: 3 to 5 years of experience working as a maintenance engineer in a 
&lt;br /&gt;
earth station and/or broadcast facility. 
&lt;br /&gt;
3 to 5 years experience working with RF, high voltage, emergency power systems and
high power RF amplifiers. 
&lt;br /&gt;
Two to four year technical degree, electronics related (or equivalent education/experience/training).
Excellent customer services skills with attention to detail. 
&lt;br /&gt;
Demonstrated organizational skills and ability to prioritize and multi-task in a high-stress
environment. 
&lt;br /&gt;
A sense of urgency in solving customer requests to ensure timely resolution. 
&lt;br /&gt;
Strong verbal and written communication skills in order to communicate with customers,
peers and vendors. 
&lt;br /&gt;
Demonstrated ability to work in a team based environment to ensure 24x7x365 support
of our customers. 
&lt;br /&gt;
Duties: Maintenance - troubleshooting, repair, calibration and preventative maintenance
of equipment and systems at the teleports. Maintenance is done to ensure that the
TBS customers have uplink and downlink resources available when required and to keep
outage time to a minimum. In addition, maintenance is imperative to ensure that the
teleport transmission and receive systems are compliant; requirements set forth by
the Federal Communications Commission (FCC), the satellite providers and OSHA. 
&lt;br /&gt;
Projects - participation in the planning, installation and integration of new or replacement
equipment and systems. May act in lead role on small projects. 
&lt;br /&gt;
Quality Control - ability to ensure outgoing, and incoming signals and content are
compliant with standards set forth by the FCC, the satellite providers, TBS and good
engineering practices. In addition this responsibility includes quality control of
installations equipment and documentation utilized by the teleports. 
&lt;br /&gt;
Customer Service - provides the highest quality of customer service to our primary
customers - Teleport operations, Distribution technology, CNN satellites/SNG, TEN
and the TBS networks - by responding to requests in a timely manner. 
&lt;br /&gt;
Documentation - thoroughly documents problems and issues in the operations log. Timely
and accurate completion on assigned projects including wire 
&lt;br /&gt;
numbers, systems documentation, drawings, time sheets, time tracking and work orders.
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
Turner Broadcasting System, Inc. and its subsidiaries are Equal Opportunity Employers.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
And here I’ve been waiting for a job as a flying car mechanic.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=07c4e070-7ee9-4ae3-8947-66f888796df1" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,07c4e070-7ee9-4ae3-8947-66f888796df1.aspx</comments>
      <category>Memes</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=4f022d68-e244-47cc-a256-6ea085937b0b</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,4f022d68-e244-47cc-a256-6ea085937b0b.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,4f022d68-e244-47cc-a256-6ea085937b0b.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4f022d68-e244-47cc-a256-6ea085937b0b</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="tunnel" border="0" alt="tunnel" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/TechnologicalSimilese.g.Silverlightisli_12EFB/tunnel_3.jpg" width="244" height="184" />
        </p>
        <p>
A few years ago I posted a list of technological similes on this blog involving the
term “Ajax” which I aggregated from a Google Search.  You can read about it <a href="http://www.imaginativeuniversal.com/blog/TechnologicalSimilesEgAjaxIsLike.aspx" target="_blank">here</a>.
</p>
        <p>
It occurred to me that a similar search of similes involving the term “Silverlight”
might be equally fruitful, much like throwing a fishing net into a sewer and seeing
what comes back.  Voila the results:
</p>
        <blockquote style="border-bottom: #000000 1px groove; text-align: left; border-left: #000000 1px groove; padding-bottom: 4px; margin: 0px auto 8px; padding-left: 4px; padding-right: 4px; background: #f5f5f5; border-top: #000000 1px groove; border-right: #000000 1px groove; padding-top: 4px">
          <p>
            <em>“</em>Silverlight is like a little baby.”
</p>
          <p>
“Silverlight is like Flash.”
</p>
          <p>
“Silverlight is like Flash … only different.”
</p>
          <p>
“Comparing Flex to Silverlight is like comparing apples and oranges.”
</p>
          <p>
            <em>“</em>Silverlight is like all choppy and slow which slow down my browser like
hell.”
</p>
          <p>
“Silverlight is like<em></em>ajax and Flex.”
</p>
          <p>
“Silverlight is like a lightweight version of WPF…”
</p>
          <p>
“Silverlight is like a browser add-on that can understand XMAL code.”
</p>
          <p>
"Silverlight is like OS X.”
</p>
          <p>
“At a time like this, finding an article written as recently as Feb 2009, and listing
the strengths of Silverlight, is like finding lots and lots of drinking water when
thirsty in a desert.”
</p>
          <p>
"Silverlight is like activex all over again - arghhhhh!"
</p>
          <p>
“In the experience world WPF is the Ferrari, Silverlight is like a Lexus, and Ajax
is that Nissan Stanza that your sisters boyfriend bought…”
</p>
          <p>
“Microsoft Silverlight is like the proverbial elephant…”
</p>
          <p>
“After playing with the beta for a few weeks, developing a control in Silverlight
is like walking through mud.”
</p>
          <p>
“Using Silverturd instead of Silverlight is like using M$ instead of Microsoft and
people who do that are looked down upon.”
</p>
          <p>
“Someone memtioned Silverlight is like Java plugin?”
</p>
          <p>
“I read on one blog that programming with Silverlight is like going camping with .NET.”
</p>
          <p>
“Silverlight is like the wild wild west. Everyone code however they want, Every new
discovery is like virgin territory…”
</p>
          <p>
“The easy developing tool provided by Silverlight is like candy to lure developers
in and cage them…”
</p>
          <p>
“SilverLight is like Flash on Crack.”
</p>
          <p>
            <em>“</em>Silverlight is like the force. It has a light side and a ... uh...... silver
side.”
</p>
          <p>
“Silverlight is like an add on. Almost after the fact. I haven't thought it through…”
</p>
        </blockquote>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=4f022d68-e244-47cc-a256-6ea085937b0b" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Technological Similes (e.g., Silverlight is like . . .)</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,4f022d68-e244-47cc-a256-6ea085937b0b.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/TechnologicalSimilesEgSilverlightIsLike.aspx</link>
      <pubDate>Thu, 11 Feb 2010 02:32:21 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="tunnel" border="0" alt="tunnel" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/TechnologicalSimilese.g.Silverlightisli_12EFB/tunnel_3.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
A few years ago I posted a list of technological similes on this blog involving the
term “Ajax” which I aggregated from a Google Search.&amp;#160; You can read about it &lt;a href="http://www.imaginativeuniversal.com/blog/TechnologicalSimilesEgAjaxIsLike.aspx" target="_blank"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
It occurred to me that a similar search of similes involving the term “Silverlight”
might be equally fruitful, much like throwing a fishing net into a sewer and seeing
what comes back.&amp;#160; Voila the results:
&lt;/p&gt;
&lt;blockquote style="border-bottom: #000000 1px groove; text-align: left; border-left: #000000 1px groove; padding-bottom: 4px; margin: 0px auto 8px; padding-left: 4px; padding-right: 4px; background: #f5f5f5; border-top: #000000 1px groove; border-right: #000000 1px groove; padding-top: 4px"&gt; 
&lt;p&gt;
&lt;em&gt;“&lt;/em&gt;Silverlight is like a little baby.”
&lt;/p&gt;
&lt;p&gt;
“Silverlight is like Flash.”
&lt;/p&gt;
&lt;p&gt;
“Silverlight is like Flash … only different.”
&lt;/p&gt;
&lt;p&gt;
“Comparing Flex to Silverlight is like comparing apples and oranges.”
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;“&lt;/em&gt;Silverlight is like all choppy and slow which slow down my browser like
hell.”
&lt;/p&gt;
&lt;p&gt;
“Silverlight is like&lt;em&gt; &lt;/em&gt;ajax and Flex.”
&lt;/p&gt;
&lt;p&gt;
“Silverlight is like a lightweight version of WPF…”
&lt;/p&gt;
&lt;p&gt;
“Silverlight is like a browser add-on that can understand XMAL code.”
&lt;/p&gt;
&lt;p&gt;
&amp;quot;Silverlight is like OS X.”
&lt;/p&gt;
&lt;p&gt;
“At a time like this, finding an article written as recently as Feb 2009, and listing
the strengths of Silverlight, is like finding lots and lots of drinking water when
thirsty in a desert.”
&lt;/p&gt;
&lt;p&gt;
&amp;quot;Silverlight is like activex all over again - arghhhhh!&amp;quot;
&lt;/p&gt;
&lt;p&gt;
“In the experience world WPF is the Ferrari, Silverlight is like a Lexus, and Ajax
is that Nissan Stanza that your sisters boyfriend bought…”
&lt;/p&gt;
&lt;p&gt;
“Microsoft Silverlight is like the proverbial elephant…”
&lt;/p&gt;
&lt;p&gt;
“After playing with the beta for a few weeks, developing a control in Silverlight
is like walking through mud.”
&lt;/p&gt;
&lt;p&gt;
“Using Silverturd instead of Silverlight is like using M$ instead of Microsoft and
people who do that are looked down upon.”
&lt;/p&gt;
&lt;p&gt;
“Someone memtioned Silverlight is like Java plugin?”
&lt;/p&gt;
&lt;p&gt;
“I read on one blog that programming with Silverlight is like going camping with .NET.”
&lt;/p&gt;
&lt;p&gt;
“Silverlight is like the wild wild west. Everyone code however they want, Every new
discovery is like virgin territory…”
&lt;/p&gt;
&lt;p&gt;
“The easy developing tool provided by Silverlight is like candy to lure developers
in and cage them…”
&lt;/p&gt;
&lt;p&gt;
“SilverLight is like Flash on Crack.”
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;“&lt;/em&gt;Silverlight is like the force. It has a light side and a ... uh...... silver
side.”
&lt;/p&gt;
&lt;p&gt;
“Silverlight is like an add on. Almost after the fact. I haven't thought it through…”
&lt;/p&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=4f022d68-e244-47cc-a256-6ea085937b0b" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,4f022d68-e244-47cc-a256-6ea085937b0b.aspx</comments>
      <category>Rhetoric</category>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=7a085c59-834b-42d4-9d82-b7fe93417aad</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,7a085c59-834b-42d4-9d82-b7fe93417aad.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,7a085c59-834b-42d4-9d82-b7fe93417aad.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7a085c59-834b-42d4-9d82-b7fe93417aad</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The Visual Studio 2010 Release Candidate was uploaded for MSDN subscribers this morning. 
It should be generally available on February 10th.
</p>
        <p>
In order to install the RC, however, you must first uninstall the Beta 2, if you have
it.
</p>
        <p>
There are dire warnings about what might happen if you mess up the uninstall. 
Here is the order in which I did it on my Windows 7 machine (as it happens, while
I was introducing my three children, for the first time, to The Matrix):
</p>
        <blockquote>
          <p>
1.  I uninstalled all my Silverlight 4 bits.  I’m not sure if this is strictly
necessary, but according to Gu’s <a href="http://weblogs.asp.net/scottgu/archive/2010/02/08/vs-2010-net-4-release-candidate.aspx" target="_blank">blog</a>,
SL 4 won’t work with the VS 2010 RC anyways until the next SL drop.
</p>
          <p>
2.  If you have Team Explorer installed, as I did, you will need to uninstall
the Microsoft Team Foundation 2010 Object Model.
</p>
          <p>
3. Uninstall Microsoft Visual Studio 2010 Beta 2 (whichever version you have – mine
was the Ultimate).
</p>
          <p>
4. Now for .NET 4 itself.  I tried to uninstall Microsoft .NET Framework 4 Muti-Targeting
Pack, but got a message that this had already been uninstalled and the entry subsequently
disappeared from my Programs and Features window.
</p>
          <p>
5. Uninstall Microsoft .NET Framework 4 Extended.  A warning comes up stating
that some of your applications may no longer work if you continue in your misguided
path.  Ignore the warning and plow forward.  A reboot is required.
</p>
          <p>
6. Uninstall Microsoft .NET 4 Client Profile.  A reboot is required.
</p>
        </blockquote>
        <p>
At this point I was able, finally, to install my shiny new version of Visual Studio
2010.  For kicks, I built a quick Hello World project using SL 3.  I also
ran a previous SL 3 project.  No problems to report, and the RC IDE does seem
much more responsive than the Beta 2.  Gu’s blog does mention, however, that
there are problems with multi-touch using the .NET Framework 4 RC.
</p>
        <p>
… oh, and the full uninstall of the beta 2 and installation of the RC takes, in case
you were wondering, approximately as much time as watching The Matrix from the opening
credits up to the point where Mr. Smith is run over by a train.
</p>
        <p>
 
</p>
        <p>
Addendum (2/12):
</p>
        <p>
I’ve been having a problem with the RC crashing whenever I type too fast.  I
have a Wacom Bamboo Pen and Touch which installs a service called “WTouch Service”. 
By disabling the service, as well as the Wacom drivers, I was able to make the issue
go away, sort of.
</p>
        <p>
Addendum (2/17):
</p>
        <p>
Finally a patch has been released for the Intellisense issues.  Download <a href="http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=26662" target="_blank">here</a>.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=7a085c59-834b-42d4-9d82-b7fe93417aad" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Visual Studio 2010 Beta 2 Uninstall</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,7a085c59-834b-42d4-9d82-b7fe93417aad.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/VisualStudio2010Beta2Uninstall.aspx</link>
      <pubDate>Wed, 10 Feb 2010 03:20:08 GMT</pubDate>
      <description>&lt;p&gt;
The Visual Studio 2010 Release Candidate was uploaded for MSDN subscribers this morning.&amp;#160;
It should be generally available on February 10th.
&lt;/p&gt;
&lt;p&gt;
In order to install the RC, however, you must first uninstall the Beta 2, if you have
it.
&lt;/p&gt;
&lt;p&gt;
There are dire warnings about what might happen if you mess up the uninstall.&amp;#160;
Here is the order in which I did it on my Windows 7 machine (as it happens, while
I was introducing my three children, for the first time, to The Matrix):
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
1.&amp;#160; I uninstalled all my Silverlight 4 bits.&amp;#160; I’m not sure if this is strictly
necessary, but according to Gu’s &lt;a href="http://weblogs.asp.net/scottgu/archive/2010/02/08/vs-2010-net-4-release-candidate.aspx" target="_blank"&gt;blog&lt;/a&gt;,
SL 4 won’t work with the VS 2010 RC anyways until the next SL drop.
&lt;/p&gt;
&lt;p&gt;
2.&amp;#160; If you have Team Explorer installed, as I did, you will need to uninstall
the Microsoft Team Foundation 2010 Object Model.
&lt;/p&gt;
&lt;p&gt;
3. Uninstall Microsoft Visual Studio 2010 Beta 2 (whichever version you have – mine
was the Ultimate).
&lt;/p&gt;
&lt;p&gt;
4. Now for .NET 4 itself.&amp;#160; I tried to uninstall Microsoft .NET Framework 4 Muti-Targeting
Pack, but got a message that this had already been uninstalled and the entry subsequently
disappeared from my Programs and Features window.
&lt;/p&gt;
&lt;p&gt;
5. Uninstall Microsoft .NET Framework 4 Extended.&amp;#160; A warning comes up stating
that some of your applications may no longer work if you continue in your misguided
path.&amp;#160; Ignore the warning and plow forward.&amp;#160; A reboot is required.
&lt;/p&gt;
&lt;p&gt;
6. Uninstall Microsoft .NET 4 Client Profile.&amp;#160; A reboot is required.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
At this point I was able, finally, to install my shiny new version of Visual Studio
2010.&amp;#160; For kicks, I built a quick Hello World project using SL 3.&amp;#160; I also
ran a previous SL 3 project.&amp;#160; No problems to report, and the RC IDE does seem
much more responsive than the Beta 2.&amp;#160; Gu’s blog does mention, however, that
there are problems with multi-touch using the .NET Framework 4 RC.
&lt;/p&gt;
&lt;p&gt;
… oh, and the full uninstall of the beta 2 and installation of the RC takes, in case
you were wondering, approximately as much time as watching The Matrix from the opening
credits up to the point where Mr. Smith is run over by a train.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Addendum (2/12):
&lt;/p&gt;
&lt;p&gt;
I’ve been having a problem with the RC crashing whenever I type too fast.&amp;#160; I
have a Wacom Bamboo Pen and Touch which installs a service called “WTouch Service”.&amp;#160;
By disabling the service, as well as the Wacom drivers, I was able to make the issue
go away, sort of.
&lt;/p&gt;
&lt;p&gt;
Addendum (2/17):
&lt;/p&gt;
&lt;p&gt;
Finally a patch has been released for the Intellisense issues.&amp;#160; Download &lt;a href="http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=26662" target="_blank"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=7a085c59-834b-42d4-9d82-b7fe93417aad" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,7a085c59-834b-42d4-9d82-b7fe93417aad.aspx</comments>
      <category>Visual Studio 2010</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=62204ee6-3f42-4d1d-919f-4fed9798cc37</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,62204ee6-3f42-4d1d-919f-4fed9798cc37.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,62204ee6-3f42-4d1d-919f-4fed9798cc37.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=62204ee6-3f42-4d1d-919f-4fed9798cc37</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="epicycle" border="0" alt="epicycle" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/RevolutionEvolutionVisualStudio2010andBo_B009/epicycle_3.jpg" width="220" height="244" />
        </p>
        <p>
In his preface to <u>The Sublime Object of Ideology</u> Slavoj Zizek writes:
</p>
        <blockquote>
          <p>
“When a discipline is in crisis, attempts are made to change or supplement its theses <em>within</em> the
terms of its basic framework – a procedure one might call ‘Ptolemization’ (since when
data poured in which clashed with Ptolemy’s earth-centered astronomy, his partisans
introduced additional complications to account for the anomalies).  But the true
‘Copernican’ revolution takes place when, instead of just adding complications and
changing minor premises, the basic framework itself undergoes a transformation. 
So, when we are dealing with a self-professed ‘scientific revolution’, the question
to ask is always: is this truly a Copernican revolution, or merely a Ptolemization
of the old paradigm?”
</p>
        </blockquote>
        <p>
In gaming circles, Zizek’s distinction between Ptolemization and Copernican revolution
resembles the frequent debates about whether a new shooter or new graphics engine
is <em>merely</em> an ‘evolution’ in the gaming industry or an honest-to-goodness
‘revolution’ – which terms are meant to indicate whether it is a small step for man
or a giant leap for gamers.  When used as a measure of magnitude, however, the
apposite noun is highly dependent on one’s perspective, and with enough perspective
one can easily see any video game as <em>merely</em> a Ptolemization of Japanese arcade
games from the 80’s.  (For instance, isn’t CliffyB’s Gears of War franchise --
with all the underground battles and monsters jumping out at you -- merely a refinement
of Namco’s Dig Dug?)
</p>
        <p>
When Zizek writes about Ptolemization and revolutions, he does so with Thomas Kuhn’s
1962 book <u>The Structure of Scientific Revolutions</u> as a backdrop.  Contrary
to the popular conception of scientific endeavor as a steady progressive movement,
Kuhn proposed that major breakthroughs in science are marked by discontinuities –
moments when science simply has to reboot itself.  Professor Kuhn identifies
three such ‘paradigm shifts’: the Copernican revolution, the displacement of phlogiston
theory with the discovery of oxygen, and the discovery of X-rays.  In each case,
according to Kuhn, our worldview changed, and those who came along after the change
could no longer understand those who came before.
</p>
        <p>
Thoughts of revolution were much on my mind at the recent Visual Studio 2010 Ultimate
event in Atlanta, where I had the opportunity to listen to <a href="http://www.peterprovost.org/" target="_blank">Peter
Provost</a> and <a href="http://blogs.msdn.com/dscruggs/" target="_blank">David Scruggs</a> of
Microsoft talk about the new development tool – and even presented on some of the
new features myself.  Peter pointed out that this was the largest overhaul of
the IDE since the original release of Visual Studio .NET.  Rewriting major portions
of the IDE using WPF is certainly a big deal, but clearly evolutionary.  There
are several features that I think of as revolutionary, however, inasmuch as they will
either change the way we develop software or, in some cases, because they are simply
unexpected.
</p>
        <ul>
          <li>
            <strong>Intellitrace</strong> (aka the Historical Debugger) stands out as the most
remarkable breakthrough in Visual Studio 2010.  It is a flight recorder for a
live debug session.  Intellitrace basically logs callstack, variable, event,
SQL call (as well as a host of other) information during debugging.  This, in
turn, allows the developer to not only work forward from a breakpoint, but even work
backwards through the process flow to track down a bug.  A truly outstanding
feature is that, on the QA side with a special version of VS, manual tests can be
configured to generate an Intellitrace log which can then be uploaded as an attachment
to a TFS bug item.  When the developer opens up the new bug item, she will be
able to run the Intellitrace log in order to see what was happening on the QA tester’s
machine and walk through this recording of the debug session.  For more about
Intellitrace, see John Robbins’ <a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/10/19/vs-2010-beta-2-intellitrace-in-depth-first-look.aspx" target="_blank">blog</a>. 
</li>
          <li>
As I hinted at above, Microsoft now offers a fourth Visual Studio SKU called the <strong>Microsoft
Test and Lab Manager</strong> (also available as part of Visual Studio 2010 Ultimate). 
The key feature in MTLM, for me, is the concept of a <strong>Test Case</strong>. 
A test case is equivalent to a use case, except that there is now tooling built around
it (no more writing use cases in Word) and the test case is stored in TFS.  Additionally,
there is a special IDE built for running test cases that provides a list of use case
steps, each of which can be marked pass/fail as the tester manually works through
the test case.  Even better, screenshots of the application can be taken at any
time, and a live video recording can be made of the entire manual test along with
the Intellitrace log described above.  All of this metadata is attached to the
bug item which is entered in TFS along with the specs for the machine the tester is
running on and made available to the developer who must eventually track down the
bug.  The way this is explained is that testing automation up to this point has
only covered 30% of the testing that actually occurs (mostly with automated unit tests). 
MTLM covers the remaining 70% by providing tooling around manual testing – which is
what most of good testing is about.  For more info, see the MTLM team <a href="http://blogs.msdn.com/lab_management/" target="_blank">blog</a>. 
</li>
          <li>
Just to round out the testing features, there is also a new unit test template in
Visual Studio 2010 called the <strong>Coded UI Test</strong>.  Creating a new
unit test from this template will fire up a wizard that allows the developer to start
a manual UI test which gets interpreted as coded steps.  These steps are gen’d
into the actual unit test either as UI hooks or XY-coordinate mouse events depending
on what is being tested.  Additionally, assertions can be inserted into the test
involving UI elements (e.g. text) one expects to see in the app after a series of
steps are performed.  The Coded UI Test can then be run like any other unit test
through the IDE, or even added to the continuous build process.  Finally, successful
use cases verified by a tester can also be gen’d into a Coded UI Test.  This
may be more gee-wiz than actually practical, but simply walking through a few of these
tests is fascinating and even fun.  For more, see this msdn <a href="http://msdn.microsoft.com/en-us/library/dd286681(VS.100).aspx" target="_blank">documentation</a>. 
</li>
          <li>
            <strong>Extensibility</strong> – Visual Studio now has something called an Extension
Manager that lets you browse <a href="http://visualstudiogallery.com/">http://visualstudiogallery.com/</a> and
automatically install add-ins (or more properly, “extensions”).  This only works,
of course, it people are creating lots of extensions for VS.  Fortunately, thanks
to Peter’s team, a lot of thought has gone into the Visual Studio extensibility and
automation model to make it both easier to develop extensions, compared to VS2008,
but also much more powerful. <a href="http://msdn.microsoft.com/en-us/library/xc52cke4(VS.100).aspx" target="_blank">Link</a>. 
</li>
        </ul>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="gallery" border="0" alt="gallery" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/RevolutionEvolutionVisualStudio2010andBo_B009/gallery_3.png" width="400" height="278" />
        </p>
        <ul>
          <li>
            <strong>Architecture Tools</strong> – Code visualization has taken a great step forward
in Visual Studio 2010. You can now generate not only class diagrams, but also sequence
diagrams, use case diagrams, component diagrams and activity diagrams right from the
source code.  Even class diagrams have a number of visualization options that
allow you to see how your classes work together, where to find possible bottlenecks,
which classes are the most referenced and a host of other perspectives that the sort
of people who like staring at class diagrams will love.  The piece I’m really
impressed by is the generation of <strong>sequence diagrams</strong> from source code. 
One right clicks on a particular method in order to get the generation started. 
As I understand it, the historical debugger is actually used behind the scenes in
order to provide flow information that is then analyzed in order to create the diagram. 
I like this for two reasons.  First, I hate actually writing sequence diagrams. 
It’s just really hard.  Second, it’s a great diagnostic tool for understanding
what the code is doing and, in some cases, what it is doing wrong. 
</li>
        </ul>
        <p>
There is a story I borrowed long ago from the Library of Babel and forgot to return
– I believe it was by Jorge Luis Borges – about a young revolutionary who leads a
small band in an attempt to overthrow the current regime.  As they sneak up on
the house of the generalissimo, the revolutionary realizes that the generalissimo
looks like an older version of himself, sounds like an older version of himself, in
fact is an older version of himself.  Through some strange loop in time, he has
come upon his future self – his post-revolutionary self – and sees that he will become
what he is attempting to overthrow.
</p>
        <p>
This is the problem with revolutions -- revolutions sometimes produce no real change.  <a href="http://www.lhotka.net/" target="_blank">Rocky
Lhotka</a> raised this specter in a talk he gave at the <a href="http://www.alemug.net" target="_blank">Atlanta
Leading Edge User Group</a> a few months ago; he suggested that even though our tools
and methodologies have advanced by leaps and bounds over the past decade, it still
takes just as long to write an application today as it did in the year 2000. No doubt
we are writing better applications, and arguably better looking applications – but
why does it still take so long when the great promise of patterns and tooling has
always been that we will be able to get applications to market faster?
</p>
        <p>
This is akin to the <em>Scandal of Philosophy</em> discussed in intellectual circles. 
Why, after 2,500 years of philosophizing, are we no closer to answering the basic
questions such as <em>What is Virtue?  What is the good life?  What happens
to us when we die?</em></p>
        <p>
[Abrupt Segue] – Visual Studio 2010, of course, won’t be answering any of these questions,
and the resolution of whether this is a revolutionary or an evolutionary change I
leave to the reader.  It does promise, however, to make developers more productive
and make the task of developing software much more interesting.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=62204ee6-3f42-4d1d-919f-4fed9798cc37" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Revolution, Evolution, Visual Studio 2010 and Borges</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,62204ee6-3f42-4d1d-919f-4fed9798cc37.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/RevolutionEvolutionVisualStudio2010AndBorges.aspx</link>
      <pubDate>Mon, 08 Feb 2010 21:14:23 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="epicycle" border="0" alt="epicycle" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/RevolutionEvolutionVisualStudio2010andBo_B009/epicycle_3.jpg" width="220" height="244" /&gt; 
&lt;/p&gt;
&lt;p&gt;
In his preface to &lt;u&gt;The Sublime Object of Ideology&lt;/u&gt; Slavoj Zizek writes:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
“When a discipline is in crisis, attempts are made to change or supplement its theses &lt;em&gt;within&lt;/em&gt; the
terms of its basic framework – a procedure one might call ‘Ptolemization’ (since when
data poured in which clashed with Ptolemy’s earth-centered astronomy, his partisans
introduced additional complications to account for the anomalies).&amp;#160; But the true
‘Copernican’ revolution takes place when, instead of just adding complications and
changing minor premises, the basic framework itself undergoes a transformation.&amp;#160;
So, when we are dealing with a self-professed ‘scientific revolution’, the question
to ask is always: is this truly a Copernican revolution, or merely a Ptolemization
of the old paradigm?”
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
In gaming circles, Zizek’s distinction between Ptolemization and Copernican revolution
resembles the frequent debates about whether a new shooter or new graphics engine
is &lt;em&gt;merely&lt;/em&gt; an ‘evolution’ in the gaming industry or an honest-to-goodness
‘revolution’ – which terms are meant to indicate whether it is a small step for man
or a giant leap for gamers.&amp;#160; When used as a measure of magnitude, however, the
apposite noun is highly dependent on one’s perspective, and with enough perspective
one can easily see any video game as &lt;em&gt;merely&lt;/em&gt; a Ptolemization of Japanese arcade
games from the 80’s.&amp;#160; (For instance, isn’t CliffyB’s Gears of War franchise --
with all the underground battles and monsters jumping out at you -- merely a refinement
of Namco’s Dig Dug?)
&lt;/p&gt;
&lt;p&gt;
When Zizek writes about Ptolemization and revolutions, he does so with Thomas Kuhn’s
1962 book &lt;u&gt;The Structure of Scientific Revolutions&lt;/u&gt; as a backdrop.&amp;#160; Contrary
to the popular conception of scientific endeavor as a steady progressive movement,
Kuhn proposed that major breakthroughs in science are marked by discontinuities –
moments when science simply has to reboot itself.&amp;#160; Professor Kuhn identifies
three such ‘paradigm shifts’: the Copernican revolution, the displacement of phlogiston
theory with the discovery of oxygen, and the discovery of X-rays.&amp;#160; In each case,
according to Kuhn, our worldview changed, and those who came along after the change
could no longer understand those who came before.
&lt;/p&gt;
&lt;p&gt;
Thoughts of revolution were much on my mind at the recent Visual Studio 2010 Ultimate
event in Atlanta, where I had the opportunity to listen to &lt;a href="http://www.peterprovost.org/" target="_blank"&gt;Peter
Provost&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/dscruggs/" target="_blank"&gt;David Scruggs&lt;/a&gt; of
Microsoft talk about the new development tool – and even presented on some of the
new features myself.&amp;#160; Peter pointed out that this was the largest overhaul of
the IDE since the original release of Visual Studio .NET.&amp;#160; Rewriting major portions
of the IDE using WPF is certainly a big deal, but clearly evolutionary.&amp;#160; There
are several features that I think of as revolutionary, however, inasmuch as they will
either change the way we develop software or, in some cases, because they are simply
unexpected.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Intellitrace&lt;/strong&gt; (aka the Historical Debugger) stands out as the most
remarkable breakthrough in Visual Studio 2010.&amp;#160; It is a flight recorder for a
live debug session.&amp;#160; Intellitrace basically logs callstack, variable, event,
SQL call (as well as a host of other) information during debugging.&amp;#160; This, in
turn, allows the developer to not only work forward from a breakpoint, but even work
backwards through the process flow to track down a bug.&amp;#160; A truly outstanding
feature is that, on the QA side with a special version of VS, manual tests can be
configured to generate an Intellitrace log which can then be uploaded as an attachment
to a TFS bug item.&amp;#160; When the developer opens up the new bug item, she will be
able to run the Intellitrace log in order to see what was happening on the QA tester’s
machine and walk through this recording of the debug session.&amp;#160; For more about
Intellitrace, see John Robbins’ &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/archive/2009/10/19/vs-2010-beta-2-intellitrace-in-depth-first-look.aspx" target="_blank"&gt;blog&lt;/a&gt;. 
&lt;/li&gt;
&lt;li&gt;
As I hinted at above, Microsoft now offers a fourth Visual Studio SKU called the &lt;strong&gt;Microsoft
Test and Lab Manager&lt;/strong&gt; (also available as part of Visual Studio 2010 Ultimate).&amp;#160;
The key feature in MTLM, for me, is the concept of a &lt;strong&gt;Test Case&lt;/strong&gt;.&amp;#160;
A test case is equivalent to a use case, except that there is now tooling built around
it (no more writing use cases in Word) and the test case is stored in TFS.&amp;#160; Additionally,
there is a special IDE built for running test cases that provides a list of use case
steps, each of which can be marked pass/fail as the tester manually works through
the test case.&amp;#160; Even better, screenshots of the application can be taken at any
time, and a live video recording can be made of the entire manual test along with
the Intellitrace log described above.&amp;#160; All of this metadata is attached to the
bug item which is entered in TFS along with the specs for the machine the tester is
running on and made available to the developer who must eventually track down the
bug.&amp;#160; The way this is explained is that testing automation up to this point has
only covered 30% of the testing that actually occurs (mostly with automated unit tests).&amp;#160;
MTLM covers the remaining 70% by providing tooling around manual testing – which is
what most of good testing is about.&amp;#160; For more info, see the MTLM team &lt;a href="http://blogs.msdn.com/lab_management/" target="_blank"&gt;blog&lt;/a&gt;. 
&lt;/li&gt;
&lt;li&gt;
Just to round out the testing features, there is also a new unit test template in
Visual Studio 2010 called the &lt;strong&gt;Coded UI Test&lt;/strong&gt;.&amp;#160; Creating a new
unit test from this template will fire up a wizard that allows the developer to start
a manual UI test which gets interpreted as coded steps.&amp;#160; These steps are gen’d
into the actual unit test either as UI hooks or XY-coordinate mouse events depending
on what is being tested.&amp;#160; Additionally, assertions can be inserted into the test
involving UI elements (e.g. text) one expects to see in the app after a series of
steps are performed.&amp;#160; The Coded UI Test can then be run like any other unit test
through the IDE, or even added to the continuous build process.&amp;#160; Finally, successful
use cases verified by a tester can also be gen’d into a Coded UI Test.&amp;#160; This
may be more gee-wiz than actually practical, but simply walking through a few of these
tests is fascinating and even fun.&amp;#160; For more, see this msdn &lt;a href="http://msdn.microsoft.com/en-us/library/dd286681(VS.100).aspx" target="_blank"&gt;documentation&lt;/a&gt;. 
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensibility&lt;/strong&gt; – Visual Studio now has something called an Extension
Manager that lets you browse &lt;a href="http://visualstudiogallery.com/"&gt;http://visualstudiogallery.com/&lt;/a&gt; and
automatically install add-ins (or more properly, “extensions”).&amp;#160; This only works,
of course, it people are creating lots of extensions for VS.&amp;#160; Fortunately, thanks
to Peter’s team, a lot of thought has gone into the Visual Studio extensibility and
automation model to make it both easier to develop extensions, compared to VS2008,
but also much more powerful. &lt;a href="http://msdn.microsoft.com/en-us/library/xc52cke4(VS.100).aspx" target="_blank"&gt;Link&lt;/a&gt;. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="gallery" border="0" alt="gallery" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/RevolutionEvolutionVisualStudio2010andBo_B009/gallery_3.png" width="400" height="278" /&gt; 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Architecture Tools&lt;/strong&gt; – Code visualization has taken a great step forward
in Visual Studio 2010. You can now generate not only class diagrams, but also sequence
diagrams, use case diagrams, component diagrams and activity diagrams right from the
source code.&amp;#160; Even class diagrams have a number of visualization options that
allow you to see how your classes work together, where to find possible bottlenecks,
which classes are the most referenced and a host of other perspectives that the sort
of people who like staring at class diagrams will love.&amp;#160; The piece I’m really
impressed by is the generation of &lt;strong&gt;sequence diagrams&lt;/strong&gt; from source code.&amp;#160;
One right clicks on a particular method in order to get the generation started.&amp;#160;
As I understand it, the historical debugger is actually used behind the scenes in
order to provide flow information that is then analyzed in order to create the diagram.&amp;#160;
I like this for two reasons.&amp;#160; First, I hate actually writing sequence diagrams.&amp;#160;
It’s just really hard.&amp;#160; Second, it’s a great diagnostic tool for understanding
what the code is doing and, in some cases, what it is doing wrong. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
There is a story I borrowed long ago from the Library of Babel and forgot to return
– I believe it was by Jorge Luis Borges – about a young revolutionary who leads a
small band in an attempt to overthrow the current regime.&amp;#160; As they sneak up on
the house of the generalissimo, the revolutionary realizes that the generalissimo
looks like an older version of himself, sounds like an older version of himself, in
fact is an older version of himself.&amp;#160; Through some strange loop in time, he has
come upon his future self – his post-revolutionary self – and sees that he will become
what he is attempting to overthrow.
&lt;/p&gt;
&lt;p&gt;
This is the problem with revolutions -- revolutions sometimes produce no real change.&amp;#160; &lt;a href="http://www.lhotka.net/" target="_blank"&gt;Rocky
Lhotka&lt;/a&gt; raised this specter in a talk he gave at the &lt;a href="http://www.alemug.net" target="_blank"&gt;Atlanta
Leading Edge User Group&lt;/a&gt; a few months ago; he suggested that even though our tools
and methodologies have advanced by leaps and bounds over the past decade, it still
takes just as long to write an application today as it did in the year 2000. No doubt
we are writing better applications, and arguably better looking applications – but
why does it still take so long when the great promise of patterns and tooling has
always been that we will be able to get applications to market faster?
&lt;/p&gt;
&lt;p&gt;
This is akin to the &lt;em&gt;Scandal of Philosophy&lt;/em&gt; discussed in intellectual circles.&amp;#160;
Why, after 2,500 years of philosophizing, are we no closer to answering the basic
questions such as &lt;em&gt;What is Virtue?&amp;#160; What is the good life?&amp;#160; What happens
to us when we die?&lt;/em&gt; 
&lt;/p&gt;
&lt;p&gt;
[Abrupt Segue] – Visual Studio 2010, of course, won’t be answering any of these questions,
and the resolution of whether this is a revolutionary or an evolutionary change I
leave to the reader.&amp;#160; It does promise, however, to make developers more productive
and make the task of developing software much more interesting.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=62204ee6-3f42-4d1d-919f-4fed9798cc37" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,62204ee6-3f42-4d1d-919f-4fed9798cc37.aspx</comments>
      <category>Technical Zeitgeist</category>
      <category>Visual Studio 2010</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=d284225b-fd2f-441e-a27a-49e8489f117f</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,d284225b-fd2f-441e-a27a-49e8489f117f.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,d284225b-fd2f-441e-a27a-49e8489f117f.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d284225b-fd2f-441e-a27a-49e8489f117f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="9stories" border="0" alt="9stories" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/DeathoftheLaughingMan_FA71/9stories_3.gif" width="158" height="244" />
        </p>
        <p>
I found out about the passing of J. D. Salinger through, of all places, an <a href="http://www.theonion.com/content/news/bunch_of_phonies_mourn_j_d" target="_blank">article</a> in
the Onion called “Bunch of Phonies Mourn J. D. Salinger” written in the style of Holden
Caulfield – a brilliant, if overly subtle, homage.
</p>
        <p>
I first read Salinger’s <em>Catcher in the Rye</em> sometime in middle school when
it turned out to be the only book on an English class reading list that I could find
on my dad’s bookshelf. After finishing it I immediately asked my dad for the remaining
books in Salinger’s limited opus and quickly consumed <em>Franny and Zooey</em>, <em>Raise
High the Roof Beam Carpenters</em>, and <em>Nine Stories.</em> I re-read these books
over the following years up until my first year in college, at which point I discovered
John Updike’s critical assessment of Salinger and decided that Salinger was “pretentious
and puerile” – a phrase I repeated whenever Salinger’s name came up in my own pretentious
and puerile conversations with classmates.  
</p>
        <p>
Nevertheless I maintained a secret, embarrassing and abiding fondness for J. D. Salinger’s
characters.  I would criticize myself over the years for sharing too much in
common with Holden Caulfield while at the same time looking for other kindred spirits
with Holden characteristics.  I made a furtive effort to trace The Laughing Man
through literature, at one point, and even chose Magister Ludens as my tag when I
first started posting on the Internet.  I have an ongoing crush on Zooey Deschanel
in large part because she shares a first name with one of Mr. Salinger’s characters.
</p>
        <p>
J. D. Salinger’s central theme, of course, was puerility: the youthful contempt for
the falsity and compromises of the adult world.  Salinger’s approach to his theme,
however, was always ironic.  He seemed to recognize – though it only became evident
when I reread these books in my first year of college – that there is something naive
and self-destructive about this attitude.  It is a stance that cannot abide,
and one must eventually outgrow it.  Salinger, in effect, prepared his audience
to outgrow him.
</p>
        <p>
Having outgrown him, I nevertheless waited over the years for Salinger to write something
new, to find out what comes after the romance of puerility.  His last published
work, however, was in 1965, following which he became a recluse and never had another
word printed for the public.  While waiting, pointlessly it turns out, I have
learned the lessons of adulthood – I have learned how to play by the rules, how to
reconcile my views to others’ opinions, how to self-promote, how to betray friends,
how to get ahead.  I have gained experience and the sort of wisdom I know that
Holden Caulfield would never understand or appreciate.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=d284225b-fd2f-441e-a27a-49e8489f117f" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Death of the Laughing Man</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,d284225b-fd2f-441e-a27a-49e8489f117f.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/DeathOfTheLaughingMan.aspx</link>
      <pubDate>Sun, 31 Jan 2010 06:32:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="9stories" border="0" alt="9stories" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/DeathoftheLaughingMan_FA71/9stories_3.gif" width="158" height="244" /&gt; 
&lt;/p&gt;
&lt;p&gt;
I found out about the passing of J. D. Salinger through, of all places, an &lt;a href="http://www.theonion.com/content/news/bunch_of_phonies_mourn_j_d" target="_blank"&gt;article&lt;/a&gt; in
the Onion called “Bunch of Phonies Mourn J. D. Salinger” written in the style of Holden
Caulfield – a brilliant, if overly subtle, homage.
&lt;/p&gt;
&lt;p&gt;
I first read Salinger’s &lt;em&gt;Catcher in the Rye&lt;/em&gt; sometime in middle school when
it turned out to be the only book on an English class reading list that I could find
on my dad’s bookshelf. After finishing it I immediately asked my dad for the remaining
books in Salinger’s limited opus and quickly consumed &lt;em&gt;Franny and Zooey&lt;/em&gt;, &lt;em&gt;Raise
High the Roof Beam Carpenters&lt;/em&gt;, and &lt;em&gt;Nine Stories.&lt;/em&gt; I re-read these books
over the following years up until my first year in college, at which point I discovered
John Updike’s critical assessment of Salinger and decided that Salinger was “pretentious
and puerile” – a phrase I repeated whenever Salinger’s name came up in my own pretentious
and puerile conversations with classmates.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
Nevertheless I maintained a secret, embarrassing and abiding fondness for J. D. Salinger’s
characters.&amp;#160; I would criticize myself over the years for sharing too much in
common with Holden Caulfield while at the same time looking for other kindred spirits
with Holden characteristics.&amp;#160; I made a furtive effort to trace The Laughing Man
through literature, at one point, and even chose Magister Ludens as my tag when I
first started posting on the Internet.&amp;#160; I have an ongoing crush on Zooey Deschanel
in large part because she shares a first name with one of Mr. Salinger’s characters.
&lt;/p&gt;
&lt;p&gt;
J. D. Salinger’s central theme, of course, was puerility: the youthful contempt for
the falsity and compromises of the adult world.&amp;#160; Salinger’s approach to his theme,
however, was always ironic.&amp;#160; He seemed to recognize – though it only became evident
when I reread these books in my first year of college – that there is something naive
and self-destructive about this attitude.&amp;#160; It is a stance that cannot abide,
and one must eventually outgrow it.&amp;#160; Salinger, in effect, prepared his audience
to outgrow him.
&lt;/p&gt;
&lt;p&gt;
Having outgrown him, I nevertheless waited over the years for Salinger to write something
new, to find out what comes after the romance of puerility.&amp;#160; His last published
work, however, was in 1965, following which he became a recluse and never had another
word printed for the public.&amp;#160; While waiting, pointlessly it turns out, I have
learned the lessons of adulthood – I have learned how to play by the rules, how to
reconcile my views to others’ opinions, how to self-promote, how to betray friends,
how to get ahead.&amp;#160; I have gained experience and the sort of wisdom I know that
Holden Caulfield would never understand or appreciate.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=d284225b-fd2f-441e-a27a-49e8489f117f" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,d284225b-fd2f-441e-a27a-49e8489f117f.aspx</comments>
      <category>Phenomenology of Spirit</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=6e68620f-520e-4557-8d00-598ff8d368d7</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,6e68620f-520e-4557-8d00-598ff8d368d7.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,6e68620f-520e-4557-8d00-598ff8d368d7.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6e68620f-520e-4557-8d00-598ff8d368d7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="cat" border="0" alt="cat" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/Lookatmelookatme_9D14/cat_3.jpg" width="178" height="244" />
        </p>
        <p>
… I’m the cat in the hat.
</p>
        <p>
While on vacation in Los Angeles, I received an exciting email from Microsoft informing
me that I have been given the 2010 MVP award in Client App Dev.
</p>
        <p>
This is an immense honor and a remarkable vote of confidence from Microsoft which
I hope to live up to in the coming year.  Hats off to the members of the Atlanta
developer community, my local DE Glen Gordon, friends I have met at conferences and
Magenic employees past and present who have challenged and encouraged me to always
work towards being a better developer.  Of course, great thanks to my wife for
her indulgence and patience those many times I have stayed up all night working through
the latest MSDN tutorial, polishing a technology presentation or answering Microsoft
forum questions.  I couldn’t have done it without you.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=6e68620f-520e-4557-8d00-598ff8d368d7" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Look at me, look at me</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,6e68620f-520e-4557-8d00-598ff8d368d7.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/LookAtMeLookAtMe.aspx</link>
      <pubDate>Wed, 06 Jan 2010 16:10:10 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="cat" border="0" alt="cat" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/Lookatmelookatme_9D14/cat_3.jpg" width="178" height="244" /&gt; 
&lt;/p&gt;
&lt;p&gt;
… I’m the cat in the hat.
&lt;/p&gt;
&lt;p&gt;
While on vacation in Los Angeles, I received an exciting email from Microsoft informing
me that I have been given the 2010 MVP award in Client App Dev.
&lt;/p&gt;
&lt;p&gt;
This is an immense honor and a remarkable vote of confidence from Microsoft which
I hope to live up to in the coming year.&amp;#160; Hats off to the members of the Atlanta
developer community, my local DE Glen Gordon, friends I have met at conferences and
Magenic employees past and present who have challenged and encouraged me to always
work towards being a better developer.&amp;#160; Of course, great thanks to my wife for
her indulgence and patience those many times I have stayed up all night working through
the latest MSDN tutorial, polishing a technology presentation or answering Microsoft
forum questions.&amp;#160; I couldn’t have done it without you.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=6e68620f-520e-4557-8d00-598ff8d368d7" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,6e68620f-520e-4557-8d00-598ff8d368d7.aspx</comments>
      <category>Notes from Terra</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=0b6b6399-060c-4ede-99cf-6c5d9939411a</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,0b6b6399-060c-4ede-99cf-6c5d9939411a.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,0b6b6399-060c-4ede-99cf-6c5d9939411a.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0b6b6399-060c-4ede-99cf-6c5d9939411a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ASilverlightCSIChallenge_11F1D/caruso_2.jpg">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="caruso" border="0" alt="caruso" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ASilverlightCSIChallenge_11F1D/caruso_thumb.jpg" width="229" height="229" />
          </a>
        </p>
        <p>
One of the peculiar things about Silverlight applications is that, while SL provides
the tools to create new and interesting user interface paradigms, most Silverlight
apps currently being written look like revamped winforms or web form UIs.
</p>
        <p>
This smells like a missed opportunity.  The problem, of course, is that it is
difficult to come up with new ways for people to interface with their computers. 
Developers and designers tend to fall back on the metaphors they are familiar with.
</p>
        <p>
If you want to find interesting UIs, you need to look at your TV or the movie theater. 
Movies like <em>The Minority Report</em>, while even more confusing than the Philip
Dick story it is based on, succeeded mostly on its ability to show us what the future
would look like.  Shows like the various CSI franchises succeed in making that
future look like it is available today.
</p>
        <p>
At the office, we get a big kick out of recounting the latest weird, impossible software
being used on last night’s procedural drama to catch the bad guy.  What we rarely
examine, however, is the fact that we can use Silverlight to build apps to look like
– if not actually function like – those fictional software programs.  So why
don’t we?
</p>
        <p>
If we want to find new metaphors for the UI experience, it makes sense to go to the
experts – television designers.  They have already done the hard creative work. 
All we, as software developers, need to do is copy them and see what actually succeeds.  
</p>
        <p>
So put on your Horatio sun glasses and build something from CSI, or Bones, or Criminal
Minds, or The Minority Report, or any other technologically fictional world and see
if you can make it real.  And when you are done, you can peer over your shades
and drop a cheesy line like “Looks like his XAML finally got rendered.”
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=0b6b6399-060c-4ede-99cf-6c5d9939411a" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>A Silverlight CSI Challenge</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,0b6b6399-060c-4ede-99cf-6c5d9939411a.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/ASilverlightCSIChallenge.aspx</link>
      <pubDate>Fri, 11 Dec 2009 01:25:04 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ASilverlightCSIChallenge_11F1D/caruso_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="caruso" border="0" alt="caruso" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ASilverlightCSIChallenge_11F1D/caruso_thumb.jpg" width="229" height="229" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
One of the peculiar things about Silverlight applications is that, while SL provides
the tools to create new and interesting user interface paradigms, most Silverlight
apps currently being written look like revamped winforms or web form UIs.
&lt;/p&gt;
&lt;p&gt;
This smells like a missed opportunity.&amp;#160; The problem, of course, is that it is
difficult to come up with new ways for people to interface with their computers.&amp;#160;
Developers and designers tend to fall back on the metaphors they are familiar with.
&lt;/p&gt;
&lt;p&gt;
If you want to find interesting UIs, you need to look at your TV or the movie theater.&amp;#160;
Movies like &lt;em&gt;The Minority Report&lt;/em&gt;, while even more confusing than the Philip
Dick story it is based on, succeeded mostly on its ability to show us what the future
would look like.&amp;#160; Shows like the various CSI franchises succeed in making that
future look like it is available today.
&lt;/p&gt;
&lt;p&gt;
At the office, we get a big kick out of recounting the latest weird, impossible software
being used on last night’s procedural drama to catch the bad guy.&amp;#160; What we rarely
examine, however, is the fact that we can use Silverlight to build apps to look like
– if not actually function like – those fictional software programs.&amp;#160; So why
don’t we?
&lt;/p&gt;
&lt;p&gt;
If we want to find new metaphors for the UI experience, it makes sense to go to the
experts – television designers.&amp;#160; They have already done the hard creative work.&amp;#160;
All we, as software developers, need to do is copy them and see what actually succeeds.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
So put on your Horatio sun glasses and build something from CSI, or Bones, or Criminal
Minds, or The Minority Report, or any other technologically fictional world and see
if you can make it real.&amp;#160; And when you are done, you can peer over your shades
and drop a cheesy line like “Looks like his XAML finally got rendered.”
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=0b6b6399-060c-4ede-99cf-6c5d9939411a" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,0b6b6399-060c-4ede-99cf-6c5d9939411a.aspx</comments>
      <category>Silverlight</category>
      <category>Theoria and Praxis</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=8b8b624b-d285-4026-848f-fdea63857c54</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,8b8b624b-d285-4026-848f-fdea63857c54.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,8b8b624b-d285-4026-848f-fdea63857c54.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8b8b624b-d285-4026-848f-fdea63857c54</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="metropolis" border="0" alt="metropolis" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/PerversionandtheFourDayWeekend_CC69/metropolis_3.jpg" width="244" height="198" />
        </p>
        <p>
For me, a four day weekend around Thanksgiving is a great opportunity to catch up
on work.  On reflection, however, it makes me think that a third section could
rewardingly be added to Rousseau’s <em>Discours sur l'origine et les fondements de
l'inégalité</em> about our further fall from the mythical natural state and the gentle
yokes we place upon ourselves for the sake of both society and financial independence. 
Trying to find time to further steal time from my family is clearly a perversion of
some sort and I don’t know why it isn’t a pretext for revoking spiritual communion
in religious faiths which still take the spiritual realm with a degree of seriousness.
</p>
        <p>
Perhaps it was Hegel (but perhaps it was someone else -- Kierkegaard?) who wrote that
the churchmen of today walk around <em>as if</em> God is dead.  No longer in
an academic milieu, I’ve lost the habit of striving for accuracy in the archeology
of knowledge.  All I know is that someone said it (or perhaps not).  The <em>as
if</em> is important. While I was a grad student in philosophy (and before I became
a grad school drop out) we often spoke about <em>as if</em> metaphysics, which I took
to mean the things we were required to believe in order to have confidence in order
and purpose in the physical world.  In truth, however, order and purpose are
illusions.  The prevailing philosophy of mind of that time – and currently, as
far as I can tell, outside of the brilliant work being done by David Chalmers – holds
that consciousness itself is merely an illusion.  That movement in philosophy
went back in a revisionist archaeology of knowledge to show that even Descartes never
took his arguments for the existence and necessity of God seriously, and so – if one
follows this alternative argument read between the lines of the Meditations – neither
is the problem of other minds ever resolved nor the <em>ego sum</em> affirmed.
</p>
        <p>
We robots who think we are something more, nevertheless, abide.  I’ll throw in
a tentative speculation into the archaeology of knowledge here and remind the reader
that <em>robot</em> is a Russian derivative meaning “worker”.
</p>
        <p>
Somewhere in the sediments of unconsciousness that make up our neural pathways we
all recognize this Archimedean fixed truth of meaninglessness – we feel it in our
bones and experience it in our daily lives.  The secret to success is determined
by how we pivot on this truth.
</p>
        <p>
When I was occasionally allowed to teach ethics (so far had academia fallen that we
no longer even attempted to teach virtue) I felt a small degree of triumph if I could
at least get students to the point of defining ethical behavior as the effort to think
about the moral implications of what they were doing before they did something wrong. 
It meant they had found the pivot.
</p>
        <p>
So how does one pivot around God – Whom we secretly and sometimes openly suspect to
be deceased?  Lucretius the first century B.C. Epicurean posited that the world
was made up of chance and freely bouncing atoms – is our modern <em>zeitgeist</em> so
different? In a world without order – and consequently without rewards for the good
or punishment for the wicked (take the CEOs of our financial institutions as examples
if you must have one) – hard work, the cornerstone of Lutheran and Calvinist theology
– seems rather pointless.  The common lament of the underachiever is that the
bullshitter succeeds while the grunt goes another year without a raise or a promotion.
</p>
        <p>
And so that theology must change.  The theology of election – the notion that
there are a set number of souls who will go to heaven – morphed in the 19th century
into a doctrine that the elect would be known by their worldly success, for they were
blessed by God.  But in a world of pure chance, how does an <em>as if</em> theology
make sense of this?
</p>
        <p>
The Atlantic Monthly’s most recent issue posits that mega-churches created the recent
economic collapse we are currently all living through.  The argument is that
“theology of prosperity” encouraged parishioners to over-extend their credit, to buy
homes and cars they couldn’t afford while banks were more than glad to help them do
so, because such acts of blind faith in future prosperity constituted faith in God’s
goodness.  To act foolishly, and bet one’s future on chance, is as close as we
can come to true faith.
</p>
        <p>
I find no immediate reason to excoriate the pastors.  In a world in which we
act <em>as if</em> God and rational order are dead and chance rules all, this is sound
advice.  Furthermore, for those whom chance blesses, it actually brings souls
closer to the absolute.  The recipients of this theologically and fiscally dubious
advice were typically the poor, the <em>roboti</em>, looking for ways to improve their
stations.  Their pastors used this natural desire to bring them closer to the
divine.  As a viewer of reality shows and Lifetime bio-pics as well as a proponent
of lottery money as a great source of revenue for education, I have no reason to doubt
that this is the future toward which we are all headed.  Why work toward success
when all we have to do is wait for it.
</p>
        <p>
Being a software programmer, I have very little sense of history.  I have to
look at my resume to discover how long I have worked with a particular language, and
I have very little idea where these languages came from.  As an industry, programming
always looks to future successes and rarely back at past mistakes.
</p>
        <p>
My spouse, on the other hand, has a rich history she maintains a retells, developing
a beautiful tapestry of traditions she freely shares with anyone who enters our lives. 
She recently gave several talks at my daughter’s elementary school about the Russian
Revolution and its aftermath using her own family narrative as a way to make sense
of it.  One great-grandmother was a peasant while the other was an aristocrat. 
By chance – and some peculiar contrivance – they knew each other in a private girls
school where the poor relative envied the wealthy one for her oranges, which were
eaten every day in the gardens of the academy.  Then comes a series of confusing
events tied together through rare documents and pictures.  The children of the
two schoolmates marry -- there are photos.  The revolution comes.  The poor
great-grandmother’s husband is taken away to the gulag – evidenced by a single NKVD
document signifying his eventual release after three years servitude.  Letters
and a death certificate mark the passage of the relatives who join the White Army
as they fight -- and flee -- the Red Army across the broken Russian Empire, eventually
surrounded and killed.  The Germans invade the area of Ukraine where the family
estates are.  The family leaves Ukraine on the promise of work in Germany, only
to end up at a labor camp in Auschwitz for Osterlanders.  They escape when the
Red Army liberates the camps and executes the Russians they happen to find there. 
They end up at a displaced persons camp (their papers now declare them as <em>apatrie</em>)
and eventually make their way to New York, then Washington D.C., where a grandmother
works for years at the Voice of America’s Russian Bureau but does not live long enough
– none of these émigrés do – to see the fall of the Berlin Wall.
</p>
        <p>
Within the fabric of this narrative there are many more stories, of course, few of
which can be verified but all of which are colorful.  There are even more stories
lost forever because they were so traumatic no one would speak of them.
</p>
        <p>
The story I want to bring to the fore is of how Baba Neela, the peasant great-grandmother,
taught the émigrés the traditions of old Russia which they had either forgotten or
never had a chance to learn – how to pray in an Orthodox church, how to pray at home,
how to throw a party, how to make traditional meals, how to drink one’s tea, how to
enjoy life with one’s family and friends.  Also the lessons embedded in these
traditions –that personal rewards only come in the afterlife, while material rewards,
in a world dominated by chance, are found in the success and happiness of one’s children.
</p>
        <p>
The problem with long weekends is that it gives one too much time to think. 
The aftermath of 9/11 was like a condensed long weekend.  Productivity across
the country went down as people realized that there were things more important than
work or money.  The roads on Sunday were clogged with people returning to church,
realizing that it is the fixed point of consolation in an uncertain world.
</p>
        <p>
We quickly overcame that moment of excited introspection, however.  We returned
to more standard patterns of <em>as if</em> theology and <em>as if</em> expectations.
</p>
        <p>
Despite that, my own nagging <em>as if</em> expectations from another time are returning
over this holiday.  For the past few months I had been trying to figure out how
to get my children into soccer leagues and karate classes, since that is what is expected. 
But now I’m stuck on another notion which I imagine to be the traditional education
of a well-raised child of the last century.  I want each of my three children
to learn a language.  I want them each to learn to play a musical instrument. 
And I want them each to be well-versed in poetry and classical literature.  
</p>
        <p>
With languages, they will be able to travel from country to country if required by
troubled times.  With music, they will always be welcome at a party.  With
literature, they will know how to enjoy their lives.  The public schools, I expect,
will get them up to speed on science and mathematics.  And so the XBOX has just
been turned off while the TV has been silenced.  I have work to do – promised
and as yet undelivered --  but I am picking up a book instead – one by Tim Powers
in an attempt to reinvent the lives of Lord Byron and Percy Shelley according to his
own peculiar vision of the hidden world.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=8b8b624b-d285-4026-848f-fdea63857c54" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Perversion and the Four Day Weekend</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,8b8b624b-d285-4026-848f-fdea63857c54.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/PerversionAndTheFourDayWeekend.aspx</link>
      <pubDate>Sun, 29 Nov 2009 21:10:10 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="metropolis" border="0" alt="metropolis" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/PerversionandtheFourDayWeekend_CC69/metropolis_3.jpg" width="244" height="198" /&gt; 
&lt;/p&gt;
&lt;p&gt;
For me, a four day weekend around Thanksgiving is a great opportunity to catch up
on work.&amp;#160; On reflection, however, it makes me think that a third section could
rewardingly be added to Rousseau’s &lt;em&gt;Discours sur l'origine et les fondements de
l'inégalité&lt;/em&gt; about our further fall from the mythical natural state and the gentle
yokes we place upon ourselves for the sake of both society and financial independence.&amp;#160;
Trying to find time to further steal time from my family is clearly a perversion of
some sort and I don’t know why it isn’t a pretext for revoking spiritual communion
in religious faiths which still take the spiritual realm with a degree of seriousness.
&lt;/p&gt;
&lt;p&gt;
Perhaps it was Hegel (but perhaps it was someone else -- Kierkegaard?) who wrote that
the churchmen of today walk around &lt;em&gt;as if&lt;/em&gt; God is dead.&amp;#160; No longer in
an academic milieu, I’ve lost the habit of striving for accuracy in the archeology
of knowledge.&amp;#160; All I know is that someone said it (or perhaps not).&amp;#160; The &lt;em&gt;as
if&lt;/em&gt; is important. While I was a grad student in philosophy (and before I became
a grad school drop out) we often spoke about &lt;em&gt;as if&lt;/em&gt; metaphysics, which I took
to mean the things we were required to believe in order to have confidence in order
and purpose in the physical world.&amp;#160; In truth, however, order and purpose are
illusions.&amp;#160; The prevailing philosophy of mind of that time – and currently, as
far as I can tell, outside of the brilliant work being done by David Chalmers – holds
that consciousness itself is merely an illusion.&amp;#160; That movement in philosophy
went back in a revisionist archaeology of knowledge to show that even Descartes never
took his arguments for the existence and necessity of God seriously, and so – if one
follows this alternative argument read between the lines of the Meditations – neither
is the problem of other minds ever resolved nor the &lt;em&gt;ego sum&lt;/em&gt; affirmed.
&lt;/p&gt;
&lt;p&gt;
We robots who think we are something more, nevertheless, abide.&amp;#160; I’ll throw in
a tentative speculation into the archaeology of knowledge here and remind the reader
that &lt;em&gt;robot&lt;/em&gt; is a Russian derivative meaning “worker”.
&lt;/p&gt;
&lt;p&gt;
Somewhere in the sediments of unconsciousness that make up our neural pathways we
all recognize this Archimedean fixed truth of meaninglessness – we feel it in our
bones and experience it in our daily lives.&amp;#160; The secret to success is determined
by how we pivot on this truth.
&lt;/p&gt;
&lt;p&gt;
When I was occasionally allowed to teach ethics (so far had academia fallen that we
no longer even attempted to teach virtue) I felt a small degree of triumph if I could
at least get students to the point of defining ethical behavior as the effort to think
about the moral implications of what they were doing before they did something wrong.&amp;#160;
It meant they had found the pivot.
&lt;/p&gt;
&lt;p&gt;
So how does one pivot around God – Whom we secretly and sometimes openly suspect to
be deceased?&amp;#160; Lucretius the first century B.C. Epicurean posited that the world
was made up of chance and freely bouncing atoms – is our modern &lt;em&gt;zeitgeist&lt;/em&gt; so
different? In a world without order – and consequently without rewards for the good
or punishment for the wicked (take the CEOs of our financial institutions as examples
if you must have one) – hard work, the cornerstone of Lutheran and Calvinist theology
– seems rather pointless.&amp;#160; The common lament of the underachiever is that the
bullshitter succeeds while the grunt goes another year without a raise or a promotion.
&lt;/p&gt;
&lt;p&gt;
And so that theology must change.&amp;#160; The theology of election – the notion that
there are a set number of souls who will go to heaven – morphed in the 19th century
into a doctrine that the elect would be known by their worldly success, for they were
blessed by God.&amp;#160; But in a world of pure chance, how does an &lt;em&gt;as if&lt;/em&gt; theology
make sense of this?
&lt;/p&gt;
&lt;p&gt;
The Atlantic Monthly’s most recent issue posits that mega-churches created the recent
economic collapse we are currently all living through.&amp;#160; The argument is that
“theology of prosperity” encouraged parishioners to over-extend their credit, to buy
homes and cars they couldn’t afford while banks were more than glad to help them do
so, because such acts of blind faith in future prosperity constituted faith in God’s
goodness.&amp;#160; To act foolishly, and bet one’s future on chance, is as close as we
can come to true faith.
&lt;/p&gt;
&lt;p&gt;
I find no immediate reason to excoriate the pastors.&amp;#160; In a world in which we
act &lt;em&gt;as if&lt;/em&gt; God and rational order are dead and chance rules all, this is sound
advice.&amp;#160; Furthermore, for those whom chance blesses, it actually brings souls
closer to the absolute.&amp;#160; The recipients of this theologically and fiscally dubious
advice were typically the poor, the &lt;em&gt;roboti&lt;/em&gt;, looking for ways to improve their
stations.&amp;#160; Their pastors used this natural desire to bring them closer to the
divine.&amp;#160; As a viewer of reality shows and Lifetime bio-pics as well as a proponent
of lottery money as a great source of revenue for education, I have no reason to doubt
that this is the future toward which we are all headed.&amp;#160; Why work toward success
when all we have to do is wait for it.
&lt;/p&gt;
&lt;p&gt;
Being a software programmer, I have very little sense of history.&amp;#160; I have to
look at my resume to discover how long I have worked with a particular language, and
I have very little idea where these languages came from.&amp;#160; As an industry, programming
always looks to future successes and rarely back at past mistakes.
&lt;/p&gt;
&lt;p&gt;
My spouse, on the other hand, has a rich history she maintains a retells, developing
a beautiful tapestry of traditions she freely shares with anyone who enters our lives.&amp;#160;
She recently gave several talks at my daughter’s elementary school about the Russian
Revolution and its aftermath using her own family narrative as a way to make sense
of it.&amp;#160; One great-grandmother was a peasant while the other was an aristocrat.&amp;#160;
By chance – and some peculiar contrivance – they knew each other in a private girls
school where the poor relative envied the wealthy one for her oranges, which were
eaten every day in the gardens of the academy.&amp;#160; Then comes a series of confusing
events tied together through rare documents and pictures.&amp;#160; The children of the
two schoolmates marry -- there are photos.&amp;#160; The revolution comes.&amp;#160; The poor
great-grandmother’s husband is taken away to the gulag – evidenced by a single NKVD
document signifying his eventual release after three years servitude.&amp;#160; Letters
and a death certificate mark the passage of the relatives who join the White Army
as they fight -- and flee -- the Red Army across the broken Russian Empire, eventually
surrounded and killed.&amp;#160; The Germans invade the area of Ukraine where the family
estates are.&amp;#160; The family leaves Ukraine on the promise of work in Germany, only
to end up at a labor camp in Auschwitz for Osterlanders.&amp;#160; They escape when the
Red Army liberates the camps and executes the Russians they happen to find there.&amp;#160;
They end up at a displaced persons camp (their papers now declare them as &lt;em&gt;apatrie&lt;/em&gt;)
and eventually make their way to New York, then Washington D.C., where a grandmother
works for years at the Voice of America’s Russian Bureau but does not live long enough
– none of these émigrés do – to see the fall of the Berlin Wall.
&lt;/p&gt;
&lt;p&gt;
Within the fabric of this narrative there are many more stories, of course, few of
which can be verified but all of which are colorful.&amp;#160; There are even more stories
lost forever because they were so traumatic no one would speak of them.
&lt;/p&gt;
&lt;p&gt;
The story I want to bring to the fore is of how Baba Neela, the peasant great-grandmother,
taught the émigrés the traditions of old Russia which they had either forgotten or
never had a chance to learn – how to pray in an Orthodox church, how to pray at home,
how to throw a party, how to make traditional meals, how to drink one’s tea, how to
enjoy life with one’s family and friends.&amp;#160; Also the lessons embedded in these
traditions –that personal rewards only come in the afterlife, while material rewards,
in a world dominated by chance, are found in the success and happiness of one’s children.
&lt;/p&gt;
&lt;p&gt;
The problem with long weekends is that it gives one too much time to think.&amp;#160;
The aftermath of 9/11 was like a condensed long weekend.&amp;#160; Productivity across
the country went down as people realized that there were things more important than
work or money.&amp;#160; The roads on Sunday were clogged with people returning to church,
realizing that it is the fixed point of consolation in an uncertain world.
&lt;/p&gt;
&lt;p&gt;
We quickly overcame that moment of excited introspection, however.&amp;#160; We returned
to more standard patterns of &lt;em&gt;as if&lt;/em&gt; theology and &lt;em&gt;as if&lt;/em&gt; expectations.
&lt;/p&gt;
&lt;p&gt;
Despite that, my own nagging &lt;em&gt;as if&lt;/em&gt; expectations from another time are returning
over this holiday.&amp;#160; For the past few months I had been trying to figure out how
to get my children into soccer leagues and karate classes, since that is what is expected.&amp;#160;
But now I’m stuck on another notion which I imagine to be the traditional education
of a well-raised child of the last century.&amp;#160; I want each of my three children
to learn a language.&amp;#160; I want them each to learn to play a musical instrument.&amp;#160;
And I want them each to be well-versed in poetry and classical literature.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
With languages, they will be able to travel from country to country if required by
troubled times.&amp;#160; With music, they will always be welcome at a party.&amp;#160; With
literature, they will know how to enjoy their lives.&amp;#160; The public schools, I expect,
will get them up to speed on science and mathematics.&amp;#160; And so the XBOX has just
been turned off while the TV has been silenced.&amp;#160; I have work to do – promised
and as yet undelivered --&amp;#160; but I am picking up a book instead – one by Tim Powers
in an attempt to reinvent the lives of Lord Byron and Percy Shelley according to his
own peculiar vision of the hidden world.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=8b8b624b-d285-4026-848f-fdea63857c54" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,8b8b624b-d285-4026-848f-fdea63857c54.aspx</comments>
      <category>Notes from Terra</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=731aeb08-a44e-4e9f-90fa-f0b17598d33d</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,731aeb08-a44e-4e9f-90fa-f0b17598d33d.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,731aeb08-a44e-4e9f-90fa-f0b17598d33d.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=731aeb08-a44e-4e9f-90fa-f0b17598d33d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Bill Wagner has an interesting article on MSDN about implementing Dynamic Objects
in C# 4: <a title="http://msdn.microsoft.com/en-us/library/ee658247.aspx" href="http://msdn.microsoft.com/en-us/library/ee658247.aspx">http://msdn.microsoft.com/en-us/library/ee658247.aspx</a>. 
He leaves it up to the reader to figure out the right way to implement the class he
describes and provides suggestions.  This is a great way to structure a propaedeutic
of this sort, as it affords the clever reader an opportunity to dig into the material
on her own.
</p>
        <p>
At the same time, it is often helpful to have a key against which to compare one’s
own work.  To that end, the full code required to run the sample application
described in the article follows.
</p>
        <p>
Here is the code that serves as our test.  Bill Wagner describes an object that
inherits from <a href="http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject(VS.100).aspx" target="_blank">DynamicObject</a> that
will run the following code:
</p>
        <pre class="csharpcode">    var newType = <span class="kwrd">new</span> MethodBag();
newType.SetMethod(<span class="str">"Write"</span>, () =&gt; Console.WriteLine(<span class="str">"Hello
World"</span>)); newType.SetMethod(<span class="str">"Display"</span>,
(<span class="kwrd">string</span> parm) =&gt; Console.WriteLine(parm)); newType.SetMethod(<span class="str">"IsValid"</span>,
() =&gt; <span class="kwrd">true</span>); newType.SetMethod(<span class="str">"Square"</span>,
(<span class="kwrd">int</span> num) =&gt; num * num); newType.SetMethod(<span class="str">"Sequence"</span>,
() =&gt; from n <span class="kwrd">in</span> Enumerable.Range(1, 100) <span class="kwrd">where</span> n
% 5 == 2 select n * n); dynamic dispatcher = newType; dispatcher.Write(); var result
= dispatcher.IsValid(); Console.WriteLine(result); dispatcher.Display(<span class="str">"This
is a message"</span>); var result2 = dispatcher.Square(5); Console.WriteLine(result2);
var sequence = dispatcher.Sequence(); <span class="kwrd">foreach</span> (var num <span class="kwrd">in</span> sequence)
Console.WriteLine(num); Console.ReadLine();</pre>
        <p>
 
</p>
        <p>
Here is an implementation of <strong>MethodBag</strong> that will fulfill the expectations
established above:
</p>
        <pre class="csharpcode">
          <span class="kwrd">internal</span>
          <span class="kwrd">class</span> MethodBag:
DynamicObject { <span class="kwrd">private</span> Dictionary&lt;<span class="kwrd">string</span>,
MethodDescription&gt; methods = <span class="kwrd">new</span> Dictionary&lt;<span class="kwrd">string</span>,
MethodDescription&gt;(); <span class="preproc">#region</span> Method Descriptions <span class="kwrd">private</span><span class="kwrd">abstract</span><span class="kwrd">class</span> MethodDescription
{ <span class="kwrd">internal</span><span class="kwrd">abstract</span><span class="kwrd">int</span> NumberOfParameters
{ get; } <span class="kwrd">internal</span> Expression target { get; set; } <span class="kwrd">internal</span><span class="kwrd">abstract</span><span class="kwrd">object</span> Invoke(<span class="kwrd">object</span>[]
parms); } <span class="kwrd">private</span><span class="kwrd">class</span> ActionDescription:
MethodDescription { <span class="kwrd">internal</span><span class="kwrd">override</span><span class="kwrd">int</span> NumberOfParameters
{ get { <span class="kwrd">return</span> 0; } } <span class="kwrd">internal</span><span class="kwrd">override</span><span class="kwrd">object</span> Invoke(<span class="kwrd">object</span>[]
parms) { var target2 = target <span class="kwrd">as</span> Expression&lt;Action&gt;;
target2.Compile().Invoke(); <span class="kwrd">return</span><span class="kwrd">null</span>;
} } <span class="kwrd">private</span><span class="kwrd">class</span> ActionDescription&lt;T&gt;
: MethodDescription { <span class="kwrd">internal</span><span class="kwrd">override</span><span class="kwrd">int</span> NumberOfParameters
{ get { <span class="kwrd">return</span> 1; } } <span class="kwrd">internal</span><span class="kwrd">override</span><span class="kwrd">object</span> Invoke(<span class="kwrd">object</span>[]
parms) { dynamic target2 = target; target2.Compile().Invoke(parms[0]); <span class="kwrd">return</span><span class="kwrd">null</span>;
} } <span class="kwrd">private</span><span class="kwrd">class</span> FuncDescription&lt;T&gt;
: MethodDescription { <span class="kwrd">internal</span><span class="kwrd">override</span><span class="kwrd">int</span> NumberOfParameters
{ get { <span class="kwrd">return</span> 0; } } <span class="kwrd">internal</span><span class="kwrd">override</span><span class="kwrd">object</span> Invoke(<span class="kwrd">object</span>[]
parms) { dynamic target2 = target; <span class="kwrd">return</span> target2.Compile().Invoke();
} } <span class="kwrd">private</span><span class="kwrd">class</span> FuncDescription&lt;T,S&gt;
: MethodDescription { <span class="kwrd">internal</span><span class="kwrd">override</span><span class="kwrd">int</span> NumberOfParameters
{ get { <span class="kwrd">return</span> 1; } } <span class="kwrd">internal</span><span class="kwrd">override</span><span class="kwrd">object</span> Invoke(<span class="kwrd">object</span>[]
parms) { dynamic target2 = target; <span class="kwrd">return</span> target2.Compile().Invoke(parms[0]);
} } <span class="preproc">#endregion</span><span class="kwrd">public</span><span class="kwrd">override</span><span class="kwrd">bool</span> TryInvokeMember(InvokeMemberBinder
binder, <span class="kwrd">object</span>[] args , <span class="kwrd">out</span><span class="kwrd">object</span> result)
{ result = <span class="kwrd">null</span>; <span class="kwrd">if</span> (!methods.ContainsKey(binder.Name)) <span class="kwrd">return</span><span class="kwrd">false</span>; <span class="rem">//
Described later</span> MethodDescription method = methods[binder.Name]; <span class="kwrd">if</span> (method.NumberOfParameters
!= args.Length) <span class="kwrd">return</span><span class="kwrd">false</span>;
result = method.Invoke(args); <span class="kwrd">return</span><span class="kwrd">true</span>;
} <span class="preproc">#region</span> Set Methods <span class="kwrd">public</span><span class="kwrd">void</span> SetMethod(<span class="kwrd">string</span> name,
Expression&lt;Action&gt; lambda) { var desc = <span class="kwrd">new</span> ActionDescription
{ target = lambda }; methods.Add(name, desc); } <span class="kwrd">public</span><span class="kwrd">void</span> SetMethod&lt;T&gt;(<span class="kwrd">string</span> name,
Expression&lt;Action&lt;T&gt;&gt; lambda) { var desc = <span class="kwrd">new</span> ActionDescription&lt;T&gt;
{ target = lambda }; methods.Add(name, desc); } <span class="kwrd">public</span><span class="kwrd">void</span> SetMethod&lt;T&gt;(<span class="kwrd">string</span> name,
Expression&lt;Func&lt;T&gt;&gt; lambda) { var desc = <span class="kwrd">new</span> FuncDescription&lt;T&gt;
{ target = lambda }; methods.Add(name, desc); } <span class="kwrd">public</span><span class="kwrd">void</span> SetMethod&lt;T,S&gt;(<span class="kwrd">string</span> name,
Expression&lt;Func&lt;T,S&gt;&gt; lambda) { var desc = <span class="kwrd">new</span> FuncDescription&lt;T,S&gt;
{ target = lambda }; methods.Add(name, desc); } <span class="preproc">#endregion</span> }</pre>
        <p>
 
</p>
        <p>
Your output should look like this:
</p>
        <blockquote>
          <p>
Hello World 
<br />
True 
<br />
This is a message 
<br />
25 
<br />
4 
<br />
49 
<br />
144 
<br />
289 
<br />
484 
<br />
729 
<br />
1024 
<br />
1369 
<br />
1764 
<br />
2209 
<br />
2704 
<br />
3249 
<br />
3844 
<br />
4489 
<br />
5184 
<br />
5929 
<br />
6724 
<br />
7569 
<br />
8464 
<br />
9409<style type="text/css">

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style></p>
        </blockquote>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=731aeb08-a44e-4e9f-90fa-f0b17598d33d" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Addendum to Dynamic Method Bags</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,731aeb08-a44e-4e9f-90fa-f0b17598d33d.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/AddendumToDynamicMethodBags.aspx</link>
      <pubDate>Sun, 22 Nov 2009 23:10:50 GMT</pubDate>
      <description>&lt;p&gt;
Bill Wagner has an interesting article on MSDN about implementing Dynamic Objects
in C# 4: &lt;a title="http://msdn.microsoft.com/en-us/library/ee658247.aspx" href="http://msdn.microsoft.com/en-us/library/ee658247.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee658247.aspx&lt;/a&gt;.&amp;#160;
He leaves it up to the reader to figure out the right way to implement the class he
describes and provides suggestions.&amp;#160; This is a great way to structure a propaedeutic
of this sort, as it affords the clever reader an opportunity to dig into the material
on her own.
&lt;/p&gt;
&lt;p&gt;
At the same time, it is often helpful to have a key against which to compare one’s
own work.&amp;#160; To that end, the full code required to run the sample application
described in the article follows.
&lt;/p&gt;
&lt;p&gt;
Here is the code that serves as our test.&amp;#160; Bill Wagner describes an object that
inherits from &lt;a href="http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject(VS.100).aspx" target="_blank"&gt;DynamicObject&lt;/a&gt; that
will run the following code:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    var newType = &lt;span class="kwrd"&gt;new&lt;/span&gt; MethodBag();
newType.SetMethod(&lt;span class="str"&gt;&amp;quot;Write&amp;quot;&lt;/span&gt;, () =&amp;gt; Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Hello
World&amp;quot;&lt;/span&gt;)); newType.SetMethod(&lt;span class="str"&gt;&amp;quot;Display&amp;quot;&lt;/span&gt;,
(&lt;span class="kwrd"&gt;string&lt;/span&gt; parm) =&amp;gt; Console.WriteLine(parm)); newType.SetMethod(&lt;span class="str"&gt;&amp;quot;IsValid&amp;quot;&lt;/span&gt;,
() =&amp;gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;); newType.SetMethod(&lt;span class="str"&gt;&amp;quot;Square&amp;quot;&lt;/span&gt;,
(&lt;span class="kwrd"&gt;int&lt;/span&gt; num) =&amp;gt; num * num); newType.SetMethod(&lt;span class="str"&gt;&amp;quot;Sequence&amp;quot;&lt;/span&gt;,
() =&amp;gt; from n &lt;span class="kwrd"&gt;in&lt;/span&gt; Enumerable.Range(1, 100) &lt;span class="kwrd"&gt;where&lt;/span&gt; n
% 5 == 2 select n * n); dynamic dispatcher = newType; dispatcher.Write(); var result
= dispatcher.IsValid(); Console.WriteLine(result); dispatcher.Display(&lt;span class="str"&gt;&amp;quot;This
is a message&amp;quot;&lt;/span&gt;); var result2 = dispatcher.Square(5); Console.WriteLine(result2);
var sequence = dispatcher.Sequence(); &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var num &lt;span class="kwrd"&gt;in&lt;/span&gt; sequence)
Console.WriteLine(num); Console.ReadLine();&lt;/pre&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Here is an implementation of &lt;strong&gt;MethodBag&lt;/strong&gt; that will fulfill the expectations
established above:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MethodBag:
DynamicObject { &lt;span class="kwrd"&gt;private&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;,
MethodDescription&amp;gt; methods = &lt;span class="kwrd"&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;,
MethodDescription&amp;gt;(); &lt;span class="preproc"&gt;#region&lt;/span&gt; Method Descriptions &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; MethodDescription
{ &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; NumberOfParameters
{ get; } &lt;span class="kwrd"&gt;internal&lt;/span&gt; Expression target { get; set; } &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;abstract&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; Invoke(&lt;span class="kwrd"&gt;object&lt;/span&gt;[]
parms); } &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ActionDescription:
MethodDescription { &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; NumberOfParameters
{ get { &lt;span class="kwrd"&gt;return&lt;/span&gt; 0; } } &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; Invoke(&lt;span class="kwrd"&gt;object&lt;/span&gt;[]
parms) { var target2 = target &lt;span class="kwrd"&gt;as&lt;/span&gt; Expression&amp;lt;Action&amp;gt;;
target2.Compile().Invoke(); &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;
} } &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ActionDescription&amp;lt;T&amp;gt;
: MethodDescription { &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; NumberOfParameters
{ get { &lt;span class="kwrd"&gt;return&lt;/span&gt; 1; } } &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; Invoke(&lt;span class="kwrd"&gt;object&lt;/span&gt;[]
parms) { dynamic target2 = target; target2.Compile().Invoke(parms[0]); &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;
} } &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; FuncDescription&amp;lt;T&amp;gt;
: MethodDescription { &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; NumberOfParameters
{ get { &lt;span class="kwrd"&gt;return&lt;/span&gt; 0; } } &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; Invoke(&lt;span class="kwrd"&gt;object&lt;/span&gt;[]
parms) { dynamic target2 = target; &lt;span class="kwrd"&gt;return&lt;/span&gt; target2.Compile().Invoke();
} } &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; FuncDescription&amp;lt;T,S&amp;gt;
: MethodDescription { &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; NumberOfParameters
{ get { &lt;span class="kwrd"&gt;return&lt;/span&gt; 1; } } &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; Invoke(&lt;span class="kwrd"&gt;object&lt;/span&gt;[]
parms) { dynamic target2 = target; &lt;span class="kwrd"&gt;return&lt;/span&gt; target2.Compile().Invoke(parms[0]);
} } &lt;span class="preproc"&gt;#endregion&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; TryInvokeMember(InvokeMemberBinder
binder, &lt;span class="kwrd"&gt;object&lt;/span&gt;[] args , &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; result)
{ result = &lt;span class="kwrd"&gt;null&lt;/span&gt;; &lt;span class="kwrd"&gt;if&lt;/span&gt; (!methods.ContainsKey(binder.Name)) &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;; &lt;span class="rem"&gt;//
Described later&lt;/span&gt; MethodDescription method = methods[binder.Name]; &lt;span class="kwrd"&gt;if&lt;/span&gt; (method.NumberOfParameters
!= args.Length) &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
result = method.Invoke(args); &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
} &lt;span class="preproc"&gt;#region&lt;/span&gt; Set Methods &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetMethod(&lt;span class="kwrd"&gt;string&lt;/span&gt; name,
Expression&amp;lt;Action&amp;gt; lambda) { var desc = &lt;span class="kwrd"&gt;new&lt;/span&gt; ActionDescription
{ target = lambda }; methods.Add(name, desc); } &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetMethod&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt; name,
Expression&amp;lt;Action&amp;lt;T&amp;gt;&amp;gt; lambda) { var desc = &lt;span class="kwrd"&gt;new&lt;/span&gt; ActionDescription&amp;lt;T&amp;gt;
{ target = lambda }; methods.Add(name, desc); } &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetMethod&amp;lt;T&amp;gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt; name,
Expression&amp;lt;Func&amp;lt;T&amp;gt;&amp;gt; lambda) { var desc = &lt;span class="kwrd"&gt;new&lt;/span&gt; FuncDescription&amp;lt;T&amp;gt;
{ target = lambda }; methods.Add(name, desc); } &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; SetMethod&amp;lt;T,S&amp;gt;(&lt;span class="kwrd"&gt;string&lt;/span&gt; name,
Expression&amp;lt;Func&amp;lt;T,S&amp;gt;&amp;gt; lambda) { var desc = &lt;span class="kwrd"&gt;new&lt;/span&gt; FuncDescription&amp;lt;T,S&amp;gt;
{ target = lambda }; methods.Add(name, desc); } &lt;span class="preproc"&gt;#endregion&lt;/span&gt; }&lt;/pre&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Your output should look like this:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Hello World 
&lt;br /&gt;
True 
&lt;br /&gt;
This is a message 
&lt;br /&gt;
25 
&lt;br /&gt;
4 
&lt;br /&gt;
49 
&lt;br /&gt;
144 
&lt;br /&gt;
289 
&lt;br /&gt;
484 
&lt;br /&gt;
729 
&lt;br /&gt;
1024 
&lt;br /&gt;
1369 
&lt;br /&gt;
1764 
&lt;br /&gt;
2209 
&lt;br /&gt;
2704 
&lt;br /&gt;
3249 
&lt;br /&gt;
3844 
&lt;br /&gt;
4489 
&lt;br /&gt;
5184 
&lt;br /&gt;
5929 
&lt;br /&gt;
6724 
&lt;br /&gt;
7569 
&lt;br /&gt;
8464 
&lt;br /&gt;
9409&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/p&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=731aeb08-a44e-4e9f-90fa-f0b17598d33d" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,731aeb08-a44e-4e9f-90fa-f0b17598d33d.aspx</comments>
      <category>.NET 4.0</category>
      <category>C#</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=133e2e96-791a-4e84-b72f-1aa457dcbeac</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,133e2e96-791a-4e84-b72f-1aa457dcbeac.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,133e2e96-791a-4e84-b72f-1aa457dcbeac.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=133e2e96-791a-4e84-b72f-1aa457dcbeac</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Silverlight Meetup" border="0" alt="Silverlight Meetup" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/LastNightsAtlantaSilverlightMeetup_12518/slm_3.jpg" width="244" height="184" />
        </p>
        <p>
          <a title="http://www.meetup.com/The-Atlanta-Silverlight-Meetup-Group/" href="http://www.meetup.com/The-Atlanta-Silverlight-Meetup-Group/">http://www.meetup.com/The-Atlanta-Silverlight-Meetup-Group/</a>
        </p>
        <p>
          <a href="http://www.silverlightatlanta.net">http://www.silverlightatlanta.net</a>
        </p>
        <p>
Following the morning release of a Silverlight 4 beta, Shawn Wildermuth switched gears
and spoke for 70 minutes about the new Silverlight 4 features at last night’s Atlanta
Silverlight Meetup. He was originally scheduled to speak on Line of Business applications,
but based on a show-of-hands decided to give this much more timely presentation. 
</p>
        <p>
The cellar of 5 Seasons Brewery was packed for the event and there was standing room
only in the back. Because of the NDA, it appears that the Atlanta Silverlight Meetup
got to see the first full presentation on Silverlight 4 outside of Redmond and Los
Angeles, thanks to Shawn.
</p>
        <p>
          <a href="http://www.silverlightatlanta.net"> </a>
        </p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=133e2e96-791a-4e84-b72f-1aa457dcbeac" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Last Night’s Atlanta Silverlight Meetup</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,133e2e96-791a-4e84-b72f-1aa457dcbeac.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/LastNightsAtlantaSilverlightMeetup.aspx</link>
      <pubDate>Fri, 20 Nov 2009 01:50:33 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Silverlight Meetup" border="0" alt="Silverlight Meetup" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/LastNightsAtlantaSilverlightMeetup_12518/slm_3.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://www.meetup.com/The-Atlanta-Silverlight-Meetup-Group/" href="http://www.meetup.com/The-Atlanta-Silverlight-Meetup-Group/"&gt;http://www.meetup.com/The-Atlanta-Silverlight-Meetup-Group/&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.silverlightatlanta.net"&gt;http://www.silverlightatlanta.net&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Following the morning release of a Silverlight 4 beta, Shawn Wildermuth switched gears
and spoke for 70 minutes about the new Silverlight 4 features at last night’s Atlanta
Silverlight Meetup. He was originally scheduled to speak on Line of Business applications,
but based on a show-of-hands decided to give this much more timely presentation. 
&lt;/p&gt;
&lt;p&gt;
The cellar of 5 Seasons Brewery was packed for the event and there was standing room
only in the back. Because of the NDA, it appears that the Atlanta Silverlight Meetup
got to see the first full presentation on Silverlight 4 outside of Redmond and Los
Angeles, thanks to Shawn.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.silverlightatlanta.net"&gt;&amp;#160;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=133e2e96-791a-4e84-b72f-1aa457dcbeac" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,133e2e96-791a-4e84-b72f-1aa457dcbeac.aspx</comments>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=37598303-c8c7-418a-96d0-cdfe59d6c1e0</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,37598303-c8c7-418a-96d0-cdfe59d6c1e0.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,37598303-c8c7-418a-96d0-cdfe59d6c1e0.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=37598303-c8c7-418a-96d0-cdfe59d6c1e0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="effective_csharp" border="0" alt="effective_csharp" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/NewEditionofEffectiveCinProgress_C0C4/effective_csharp_3.jpg" width="80" height="105" />
        </p>
        <p>
I just noticed that Safari Books has put up a rough cut of the 2nd Edition of <a href="http://srtsolutions.com/blogs/billwagner/default.aspx" target="_blank">Bill
Wagner’s</a><em><a href="http://search.barnesandnoble.com/Effective-C/Bill-Wagner/e/9780321245663/?itm=1&amp;USRI=effective+c%23" target="_blank">Effective
C#</a></em>.  My Safari license only allows me to preview but I can already see
from the table of contents that he is including new chapters on working with C# 4. 
This is pretty exciting.  If you recall, the 1st Edition only covered C# 1 and
after a largish gap Bill Wagner published a completely different book, <em><a href="http://search.barnesandnoble.com/More-Effective-C/Bill-Wagner/e/9780321485892/?itm=2&amp;USRI=effective+c%23" target="_blank">More
Effective C#</a></em>, to cover the C# 2 and C# 3 features.
</p>
        <p>
I have long recommended both of Bill’s books to anyone who wants to get a deeper understanding
of the C# language.  I’ve only recently started seriously reading through John
Skeet’s <a href="http://search.barnesandnoble.com/C-in-Depth/Jon-Skeet/e/9781933988368/?itm=2&amp;usri=John+Skeet" target="_blank">C#
In Depth</a>, however.  I was originally put off with how much time he puts into
explaining C# 1 and C# 2.  Now that I am into the second half of the book, I
am very excited about his coverage of lambdas in C# 3.  His passion about this
interesting language feature is both palpable and infectious.  He also does a
good job of clearing up the fud around the stack and the heap.
</p>
        <p>
Having these three books on the bookshelf will make anyone a more effective C# developer
– well, that’s an idiom of course.  To be clear, having these three books <em>and
also</em> reading them will in fact make anyone a more effective C# developer. 
Well – just to be extremely clear – I should have said “reading and <em>re-reading</em> them”. 
I’ve read through both of Bill Wagner’s books twice and actually had to read his introduction
to generics about 6 times before I finally understood most of what he is saying. 
The fault however is due not with the exposition and only partly due to the limited
faculties of this non-ideal reader – C# programming can be extremely complicated stuff
and we are all fortunate to have both Bill Wagner and John Skeet doing the heavy lifting
involved in explaining it to the rest of us.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=37598303-c8c7-418a-96d0-cdfe59d6c1e0" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>New Edition of Effective C# in Progress</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,37598303-c8c7-418a-96d0-cdfe59d6c1e0.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/NewEditionOfEffectiveCInProgress.aspx</link>
      <pubDate>Mon, 16 Nov 2009 18:43:13 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="effective_csharp" border="0" alt="effective_csharp" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/NewEditionofEffectiveCinProgress_C0C4/effective_csharp_3.jpg" width="80" height="105" /&gt; 
&lt;/p&gt;
&lt;p&gt;
I just noticed that Safari Books has put up a rough cut of the 2nd Edition of &lt;a href="http://srtsolutions.com/blogs/billwagner/default.aspx" target="_blank"&gt;Bill
Wagner’s&lt;/a&gt; &lt;em&gt;&lt;a href="http://search.barnesandnoble.com/Effective-C/Bill-Wagner/e/9780321245663/?itm=1&amp;amp;USRI=effective+c%23" target="_blank"&gt;Effective
C#&lt;/a&gt;&lt;/em&gt;.&amp;#160; My Safari license only allows me to preview but I can already see
from the table of contents that he is including new chapters on working with C# 4.&amp;#160;
This is pretty exciting.&amp;#160; If you recall, the 1st Edition only covered C# 1 and
after a largish gap Bill Wagner published a completely different book, &lt;em&gt;&lt;a href="http://search.barnesandnoble.com/More-Effective-C/Bill-Wagner/e/9780321485892/?itm=2&amp;amp;USRI=effective+c%23" target="_blank"&gt;More
Effective C#&lt;/a&gt;&lt;/em&gt;, to cover the C# 2 and C# 3 features.
&lt;/p&gt;
&lt;p&gt;
I have long recommended both of Bill’s books to anyone who wants to get a deeper understanding
of the C# language.&amp;#160; I’ve only recently started seriously reading through John
Skeet’s &lt;a href="http://search.barnesandnoble.com/C-in-Depth/Jon-Skeet/e/9781933988368/?itm=2&amp;amp;usri=John+Skeet" target="_blank"&gt;C#
In Depth&lt;/a&gt;, however.&amp;#160; I was originally put off with how much time he puts into
explaining C# 1 and C# 2.&amp;#160; Now that I am into the second half of the book, I
am very excited about his coverage of lambdas in C# 3.&amp;#160; His passion about this
interesting language feature is both palpable and infectious.&amp;#160; He also does a
good job of clearing up the fud around the stack and the heap.
&lt;/p&gt;
&lt;p&gt;
Having these three books on the bookshelf will make anyone a more effective C# developer
– well, that’s an idiom of course.&amp;#160; To be clear, having these three books &lt;em&gt;and
also&lt;/em&gt; reading them will in fact make anyone a more effective C# developer.&amp;#160;
Well – just to be extremely clear – I should have said “reading and &lt;em&gt;re-reading&lt;/em&gt; them”.&amp;#160;
I’ve read through both of Bill Wagner’s books twice and actually had to read his introduction
to generics about 6 times before I finally understood most of what he is saying.&amp;#160;
The fault however is due not with the exposition and only partly due to the limited
faculties of this non-ideal reader – C# programming can be extremely complicated stuff
and we are all fortunate to have both Bill Wagner and John Skeet doing the heavy lifting
involved in explaining it to the rest of us.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=37598303-c8c7-418a-96d0-cdfe59d6c1e0" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,37598303-c8c7-418a-96d0-cdfe59d6c1e0.aspx</comments>
      <category>C#</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=9f3b62c9-815d-4683-bebe-19f2d3a39560</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,9f3b62c9-815d-4683-bebe-19f2d3a39560.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,9f3b62c9-815d-4683-bebe-19f2d3a39560.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9f3b62c9-815d-4683-bebe-19f2d3a39560</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="tdc 003" border="0" alt="tdc 003" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/Isthereadoctorontheplane_AFCC/tdc%20003_1.jpg" width="244" height="184" />
        </p>
        <p>
I have just returned from a private conference in northwest Arkansas hosted by Tyson
Foods.  The flight to Arkansas was quite eventful – but more about that later. 
It was an extremely successful event on the scale of a district level Code Camp.  
There were eight tracks with about 50 presentations throughout the day.  Presenters
came in from all over – Georgia, Texas, Ohio, Minnesota are the states I remember
– and the presentations were uniformly excellent.  There was also a large Microsoft
presence at the event – much larger than we get at the usual Code Camp – which simply
added to the fun.  There were approximately 250 attendees – all Tyson employees
– and almost every session was recorded, so anyone who missed the event can play them
back later.
</p>
        <p>
Special congratulations should be given to Devlin Lyles of Tyson for his central role
in organizing this conference and promoting it internally.  He was able to make
the business case for the conference to his internal management, arguing that bringing
a conference in-house would ensure that everyone at Tyson corporate could participate
and, furthermore, exposure to sophisticated conversations about technology will raise
the level of software development within the corporation.  I wish more companies
were this insightful about, first, the need to raise everyone’s game and, second,
that there are easy, non-coercive ways to do this.   Congratulations also
to Jay Smith, Jeremy Sharp, Rob Tennyson and all the others who put in long hours
to make this conference successful.
</p>
        <p>
I was also happy to have the opportunity to get to know some of the other speakers,
in particular Jim Holmes, Phil Japikse, Cory Smith, Tim Rayburn, Robert Boedigheimer,
Chris Patterson, Seyed Hashimi, Betty Leudke and Tom Sanchez. 
</p>
        <p>
I gave three talks at the TDC: <em>Architecting WPF for Versatility</em>, <em>Intro
to WPF</em>, and <em>Advanced C#</em>.  The last talk was mostly code, so I have
only attached the slide decks for the first two.
</p>
        <p>
          <iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-ef92193c4471bd9e.skydrive.live.com/embedicon.aspx/.Public/WPFArchitecture.pptx" frameborder="0" marginwidth="0" scrolling="no">
          </iframe>
          <iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-ef92193c4471bd9e.skydrive.live.com/embedicon.aspx/.Public/IntroWCF.pptx" frameborder="0" marginwidth="0" scrolling="no">
          </iframe>
        </p>
        <p>
As I said, the flight to the conference was eventful.  I met up with Phil Japikse
and Jim Holmes at the airport, recognizing Phil from his MVP profile picture (there
aren’t that many MS MVPs with shaved heads and handlebar moustaches).  Our flight
kept getting delayed and moved from gate to gate, and we kept emailing Devlin to let
him know that we were not confident we would make the speaker dinner.
</p>
        <p>
          <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="tdc Phil and Jim" border="0" alt="tdc Phil and Jim" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/Isthereadoctorontheplane_AFCC/tdc%20004_1.jpg" width="244" height="184" />
        </p>
        <p>
We finally embarked onto one of the smallest commercial planes I have ever had the
pleasure of flying in.  There was one stewardess and one pilot and before we
knew it we were off.  About half-way between Atlanta and Northwest Arkansas our
stewardess came to the front of the plane and asked – I never thought I would ever
hear these words -- “Is there a doctor on the plane?”  It was cliché but effective
in getting everyone’s attention.
</p>
        <p>
As if going down a well-rehearsed list, she then asked if there was a nurse on the
plane.  Finally, she asked if there was an EMT on the plane and Phil raised his
hand.  Two seats behind me, a passenger was having some chest pain.  Over
the course of the flight, this passenger proceeded to pass out twice and projectile
vomit once.  That familiar smell was with us over most of Arkansas.  Phil
had a commanding presence and immediately recruited Jim to be his assistant. 
Jim, in turn, helped to calm the other passengers and simply did a great job keeping
his head through the emergency (at the conference he presented a session on Leadership
which I am glad to hear was very well attended).  As Phil became aware of the
seriousness of the troubled passenger’s condition, he told the stewardess to tell
the pilot to land the plane immediately and have an ambulance meet us.  We were
close enough to our destination that we simply sped up and quickly dropped our altitude
(it took hours for my ears to finally adjust after that) and I don’t think I’ve ever
landed and been taxied to the airport gate so quickly.
</p>
        <p>
I already knew that Jim and Phil were impressive software people who can quickly debug
and deploy applications during software emergencies.  I was quite pleased and
impressed to find out that their skills translate so well to emergency situations
in the real world.  They were both heroic and I am quite certain that their actions
saved a life that day.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=9f3b62c9-815d-4683-bebe-19f2d3a39560" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Is there a doctor on the plane?</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,9f3b62c9-815d-4683-bebe-19f2d3a39560.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/IsThereADoctorOnThePlane.aspx</link>
      <pubDate>Sun, 15 Nov 2009 17:30:53 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="tdc 003" border="0" alt="tdc 003" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/Isthereadoctorontheplane_AFCC/tdc%20003_1.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
I have just returned from a private conference in northwest Arkansas hosted by Tyson
Foods.&amp;#160; The flight to Arkansas was quite eventful – but more about that later.&amp;#160;
It was an extremely successful event on the scale of a district level Code Camp.&amp;#160;&amp;#160;
There were eight tracks with about 50 presentations throughout the day.&amp;#160; Presenters
came in from all over – Georgia, Texas, Ohio, Minnesota are the states I remember
– and the presentations were uniformly excellent.&amp;#160; There was also a large Microsoft
presence at the event – much larger than we get at the usual Code Camp – which simply
added to the fun.&amp;#160; There were approximately 250 attendees – all Tyson employees
– and almost every session was recorded, so anyone who missed the event can play them
back later.
&lt;/p&gt;
&lt;p&gt;
Special congratulations should be given to Devlin Lyles of Tyson for his central role
in organizing this conference and promoting it internally.&amp;#160; He was able to make
the business case for the conference to his internal management, arguing that bringing
a conference in-house would ensure that everyone at Tyson corporate could participate
and, furthermore, exposure to sophisticated conversations about technology will raise
the level of software development within the corporation.&amp;#160; I wish more companies
were this insightful about, first, the need to raise everyone’s game and, second,
that there are easy, non-coercive ways to do this.&amp;#160;&amp;#160; Congratulations also
to Jay Smith, Jeremy Sharp, Rob Tennyson and all the others who put in long hours
to make this conference successful.
&lt;/p&gt;
&lt;p&gt;
I was also happy to have the opportunity to get to know some of the other speakers,
in particular Jim Holmes, Phil Japikse, Cory Smith, Tim Rayburn, Robert Boedigheimer,
Chris Patterson, Seyed Hashimi, Betty Leudke and Tom Sanchez. 
&lt;/p&gt;
&lt;p&gt;
I gave three talks at the TDC: &lt;em&gt;Architecting WPF for Versatility&lt;/em&gt;, &lt;em&gt;Intro
to WPF&lt;/em&gt;, and &lt;em&gt;Advanced C#&lt;/em&gt;.&amp;#160; The last talk was mostly code, so I have
only attached the slide decks for the first two.
&lt;/p&gt;
&lt;p&gt;
&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-ef92193c4471bd9e.skydrive.live.com/embedicon.aspx/.Public/WPFArchitecture.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;
&lt;/iframe&gt;
&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-ef92193c4471bd9e.skydrive.live.com/embedicon.aspx/.Public/IntroWCF.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;
As I said, the flight to the conference was eventful.&amp;#160; I met up with Phil Japikse
and Jim Holmes at the airport, recognizing Phil from his MVP profile picture (there
aren’t that many MS MVPs with shaved heads and handlebar moustaches).&amp;#160; Our flight
kept getting delayed and moved from gate to gate, and we kept emailing Devlin to let
him know that we were not confident we would make the speaker dinner.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="tdc Phil and Jim" border="0" alt="tdc Phil and Jim" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/Isthereadoctorontheplane_AFCC/tdc%20004_1.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
We finally embarked onto one of the smallest commercial planes I have ever had the
pleasure of flying in.&amp;#160; There was one stewardess and one pilot and before we
knew it we were off.&amp;#160; About half-way between Atlanta and Northwest Arkansas our
stewardess came to the front of the plane and asked – I never thought I would ever
hear these words -- “Is there a doctor on the plane?”&amp;#160; It was cliché but effective
in getting everyone’s attention.
&lt;/p&gt;
&lt;p&gt;
As if going down a well-rehearsed list, she then asked if there was a nurse on the
plane.&amp;#160; Finally, she asked if there was an EMT on the plane and Phil raised his
hand.&amp;#160; Two seats behind me, a passenger was having some chest pain.&amp;#160; Over
the course of the flight, this passenger proceeded to pass out twice and projectile
vomit once.&amp;#160; That familiar smell was with us over most of Arkansas.&amp;#160; Phil
had a commanding presence and immediately recruited Jim to be his assistant.&amp;#160;
Jim, in turn, helped to calm the other passengers and simply did a great job keeping
his head through the emergency (at the conference he presented a session on Leadership
which I am glad to hear was very well attended).&amp;#160; As Phil became aware of the
seriousness of the troubled passenger’s condition, he told the stewardess to tell
the pilot to land the plane immediately and have an ambulance meet us.&amp;#160; We were
close enough to our destination that we simply sped up and quickly dropped our altitude
(it took hours for my ears to finally adjust after that) and I don’t think I’ve ever
landed and been taxied to the airport gate so quickly.
&lt;/p&gt;
&lt;p&gt;
I already knew that Jim and Phil were impressive software people who can quickly debug
and deploy applications during software emergencies.&amp;#160; I was quite pleased and
impressed to find out that their skills translate so well to emergency situations
in the real world.&amp;#160; They were both heroic and I am quite certain that their actions
saved a life that day.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=9f3b62c9-815d-4683-bebe-19f2d3a39560" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,9f3b62c9-815d-4683-bebe-19f2d3a39560.aspx</comments>
      <category>Notes from Terra</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=863f61c3-aa27-4ac9-80be-1dbae2621d71</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,863f61c3-aa27-4ac9-80be-1dbae2621d71.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,863f61c3-aa27-4ac9-80be-1dbae2621d71.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=863f61c3-aa27-4ac9-80be-1dbae2621d71</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I had a mind-blowing weekend playing with the <a href="http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject(VS.100).aspx" target="_blank">ExpandoObject</a> in
C# 4.0.  When an article <a href="http://blogs.msdn.com/csharpfaq/archive/2009/10/01/dynamic-in-c-4-0-introducing-the-expandoobject.aspx" target="_blank">appeared</a> on
MSDN about it prior to the release of Visual Studio 2010 Beta 2, it looked interesting
but not particularly useful.  The ExpandoObject appeared to be merely a property
bag that was useful in limited circumstances in which the program flow is aware of
the properties being added.  The ExpandoObject is, in essence, a property bag
(and also a method bag?) that pretends to be a real type.  With the Beta 1, I
tried to bind a WPF Window to it and was quickly disappointed to find that WPF just
treated it as a dictionary (which is what it really is) rather than as the typed class
it is pretending to be.
</p>
        <p>
With the Beta 2, however, this changed.  The WPF binding stack had apparently
been modified to recognize the ExpandoObject and to treat it on its own terms. 
If I have a binding on a TextBox in WPF to an arbitrary property called, for instance,
“Name”, all I have to do is add that string to the ExpandoObject’s internal dictionary
and the value I added will show up in my TextBox.  Even better, the ExpandoObject
automatically supports INotifyPropertyChanged on that new pseudo-property.
</p>
        <pre class="csharpcode">           dynamic Employee = <span class="kwrd">new</span> ExpandoObject();
Employee.Name = <span class="str">"Jim Henson"</span>;</pre>
        <p>
          <style type="text/css">

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        </p>
        <p>
This small change makes the ExpandoObject suddenly very useful, especially in situations
where we need a glue layer between servers and clients that are indifferent to static
typing such as an object layer between a REST service and WPF.
</p>
        <p>
Phil Haack has a playful post about this aspect of programming with the dynamic type
on his blog: <a title="http://haacked.com/archive/2009/08/26/method-missing-csharp-4.aspx" href="http://haacked.com/archive/2009/08/26/method-missing-csharp-4.aspx">http://haacked.com/archive/2009/08/26/method-missing-csharp-4.aspx</a> . 
He prefaces it with this:
</p>
        <blockquote>
          <p>
            <em>
              <strong>Warning</strong>: What I’m about to show you is quite possibly an abuse
of the C# language. Then again, maybe it’s not. ;) You’ve been warned.</em>
          </p>
        </blockquote>
        <p>
There’s a lot of truth in this.  On the one hand, dynamic types goes deeply against
the grain of anyone who has programmed in C# for the past several years.  I’m
not sure how this feels to VB developers who always have had the option to turn Option
Strict off in their code.  It gives me the heebie-jeebies, though.
</p>
        <p>
At the same time, it looks extremely fun.  Maybe even a little subversive. I
want to start finding applications for this new code feature for working within C#
rather than simply using it for interop with supported dynamic languages.
</p>
        <p>
The ExpandoObject does some rather cool things not initially obvious.  For one
thing, I can add methods to it as well as properties.  This can be done by passing
a delegate to it that references a lambda statement, for instance:
</p>
        <pre class="csharpcode">        dynamic obj = <span class="kwrd">new</span> ExpandoObject();
obj.DoSomething = <span class="kwrd">new</span> Func&lt;<span class="kwrd">string</span>&gt;(()
=&gt; { Console.WriteLine(DateTime.Now.ToLongTimeString()); <span class="kwrd">return</span><span class="str">"Hello"</span>;
}); obj.DoSomethingWithParams = <span class="kwrd">new</span> Func&lt;<span class="kwrd">string</span>, <span class="kwrd">bool</span>&gt;((x)
=&gt; { Console.WriteLine(DateTime.Now.ToLongTimeString()); Console.WriteLine(x); <span class="kwrd">return</span><span class="kwrd">true</span>;
}); Console.WriteLine(obj.DoSomething()); Console.WriteLine(obj.DoSomethingWithParams(<span class="str">"something
different"</span>));</pre>
        <p>
          <style type="text/css">

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        </p>
        <p>
Another thing it can do is load properties dynamically (loading a dynamic type dynamically,
yeah!) by simply casting it back to the dictionary it really is internally. 
Here’s a sample of <em>dynamically</em> loading up an ExpandoObject based on an XML
Document:
</p>
        <pre class="csharpcode">           XDocument root = XDocument.Load(<span class="str">"Employee.xml"</span>); <span class="rem">//convert
xml document into an ExpandoObject</span> dynamic Employee = <span class="kwrd">new</span> ExpandoObject();
var EmployeeDictionary = Employee <span class="kwrd">as</span> IDictionary&lt;<span class="kwrd">string</span>, <span class="kwrd">object</span>&gt;; <span class="kwrd">foreach</span> (XElement
el <span class="kwrd">in</span> root.Elements()) { EmployeeDictionary.Add(el.Name.LocalName,
el.Value); }</pre>
        <p>
I now have an object that I can bind to the DataContext of a WPF Window.  I could,
of course, have just bound the original XMLDocument to my WPF, but then I wouldn’t
have nice extras like INotifyPropertyChanged that I normally expect to have at my
disposal in WPF development.
</p>
        <p>
The Dynamic Type is a complicated beast however.  Just reading over Bill Wagner’s
post on implementing a Method Bag fills me with anxiety: <a title="http://msdn.microsoft.com/en-us/library/ee658247.aspx" href="http://msdn.microsoft.com/en-us/library/ee658247.aspx">http://msdn.microsoft.com/en-us/library/ee658247.aspx</a></p>
        <p>
That post was nothing, however, compared to this gem I found on Nikhil Kothari’s blog
from over a year ago!  <a title="http://www.nikhilk.net/CSharp-Dynamic-Programming-REST-Services.aspx" href="http://www.nikhilk.net/CSharp-Dynamic-Programming-REST-Services.aspx">http://www.nikhilk.net/CSharp-Dynamic-Programming-REST-Services.aspx</a></p>
        <p>
Mr. Kothari builds a class that can point to multiple (and, thanks to the Dynamic
Type, interchangeable) REST services and generates properties based on the XML or
JSON that comes back.  It does much more than this, also, I think, but Nikhil
Kothari is so far beyond me that I have trouble understanding everything that is happening
in his code.
</p>
        <p>
The source code, by the way, doesn’t actually compile as it is currently written –
but then he did this over a year ago, so…
</p>
        <p>
In any case, walking through and coming to terms with what he has created is certainly
one of my goals for November.  It is an implementation that is a game-changer
for C# development, and raises Dynamic Types from an oddity to something that will
actually solve architectural bottlenecks … at least, I think it does.  As I said,
I don’t actually understand it, yet.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=863f61c3-aa27-4ac9-80be-1dbae2621d71" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>That Wild and Crazy Dynamic Type</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,863f61c3-aa27-4ac9-80be-1dbae2621d71.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/ThatWildAndCrazyDynamicType.aspx</link>
      <pubDate>Mon, 09 Nov 2009 15:57:08 GMT</pubDate>
      <description>&lt;p&gt;
I had a mind-blowing weekend playing with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject(VS.100).aspx" target="_blank"&gt;ExpandoObject&lt;/a&gt; in
C# 4.0.&amp;#160; When an article &lt;a href="http://blogs.msdn.com/csharpfaq/archive/2009/10/01/dynamic-in-c-4-0-introducing-the-expandoobject.aspx" target="_blank"&gt;appeared&lt;/a&gt; on
MSDN about it prior to the release of Visual Studio 2010 Beta 2, it looked interesting
but not particularly useful.&amp;#160; The ExpandoObject appeared to be merely a property
bag that was useful in limited circumstances in which the program flow is aware of
the properties being added.&amp;#160; The ExpandoObject is, in essence, a property bag
(and also a method bag?) that pretends to be a real type.&amp;#160; With the Beta 1, I
tried to bind a WPF Window to it and was quickly disappointed to find that WPF just
treated it as a dictionary (which is what it really is) rather than as the typed class
it is pretending to be.
&lt;/p&gt;
&lt;p&gt;
With the Beta 2, however, this changed.&amp;#160; The WPF binding stack had apparently
been modified to recognize the ExpandoObject and to treat it on its own terms.&amp;#160;
If I have a binding on a TextBox in WPF to an arbitrary property called, for instance,
“Name”, all I have to do is add that string to the ExpandoObject’s internal dictionary
and the value I added will show up in my TextBox.&amp;#160; Even better, the ExpandoObject
automatically supports INotifyPropertyChanged on that new pseudo-property.
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;           dynamic Employee = &lt;span class="kwrd"&gt;new&lt;/span&gt; ExpandoObject();
Employee.Name = &lt;span class="str"&gt;&amp;quot;Jim Henson&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/p&gt;
&lt;p&gt;
This small change makes the ExpandoObject suddenly very useful, especially in situations
where we need a glue layer between servers and clients that are indifferent to static
typing such as an object layer between a REST service and WPF.
&lt;/p&gt;
&lt;p&gt;
Phil Haack has a playful post about this aspect of programming with the dynamic type
on his blog: &lt;a title="http://haacked.com/archive/2009/08/26/method-missing-csharp-4.aspx" href="http://haacked.com/archive/2009/08/26/method-missing-csharp-4.aspx"&gt;http://haacked.com/archive/2009/08/26/method-missing-csharp-4.aspx&lt;/a&gt; .&amp;#160;
He prefaces it with this:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;&lt;strong&gt;Warning&lt;/strong&gt;: What I’m about to show you is quite possibly an abuse
of the C# language. Then again, maybe it’s not. ;) You’ve been warned.&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
There’s a lot of truth in this.&amp;#160; On the one hand, dynamic types goes deeply against
the grain of anyone who has programmed in C# for the past several years.&amp;#160; I’m
not sure how this feels to VB developers who always have had the option to turn Option
Strict off in their code.&amp;#160; It gives me the heebie-jeebies, though.
&lt;/p&gt;
&lt;p&gt;
At the same time, it looks extremely fun.&amp;#160; Maybe even a little subversive. I
want to start finding applications for this new code feature for working within C#
rather than simply using it for interop with supported dynamic languages.
&lt;/p&gt;
&lt;p&gt;
The ExpandoObject does some rather cool things not initially obvious.&amp;#160; For one
thing, I can add methods to it as well as properties.&amp;#160; This can be done by passing
a delegate to it that references a lambda statement, for instance:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;        dynamic obj = &lt;span class="kwrd"&gt;new&lt;/span&gt; ExpandoObject();
obj.DoSomething = &lt;span class="kwrd"&gt;new&lt;/span&gt; Func&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;(()
=&amp;gt; { Console.WriteLine(DateTime.Now.ToLongTimeString()); &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;;
}); obj.DoSomethingWithParams = &lt;span class="kwrd"&gt;new&lt;/span&gt; Func&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt;((x)
=&amp;gt; { Console.WriteLine(DateTime.Now.ToLongTimeString()); Console.WriteLine(x); &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
}); Console.WriteLine(obj.DoSomething()); Console.WriteLine(obj.DoSomethingWithParams(&lt;span class="str"&gt;&amp;quot;something
different&amp;quot;&lt;/span&gt;));&lt;/pre&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/p&gt;
&lt;p&gt;
Another thing it can do is load properties dynamically (loading a dynamic type dynamically,
yeah!) by simply casting it back to the dictionary it really is internally.&amp;#160;
Here’s a sample of &lt;em&gt;dynamically&lt;/em&gt; loading up an ExpandoObject based on an XML
Document:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;           XDocument root = XDocument.Load(&lt;span class="str"&gt;&amp;quot;Employee.xml&amp;quot;&lt;/span&gt;); &lt;span class="rem"&gt;//convert
xml document into an ExpandoObject&lt;/span&gt; dynamic Employee = &lt;span class="kwrd"&gt;new&lt;/span&gt; ExpandoObject();
var EmployeeDictionary = Employee &lt;span class="kwrd"&gt;as&lt;/span&gt; IDictionary&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;, &lt;span class="kwrd"&gt;object&lt;/span&gt;&amp;gt;; &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (XElement
el &lt;span class="kwrd"&gt;in&lt;/span&gt; root.Elements()) { EmployeeDictionary.Add(el.Name.LocalName,
el.Value); }&lt;/pre&gt;
&lt;p&gt;
I now have an object that I can bind to the DataContext of a WPF Window.&amp;#160; I could,
of course, have just bound the original XMLDocument to my WPF, but then I wouldn’t
have nice extras like INotifyPropertyChanged that I normally expect to have at my
disposal in WPF development.
&lt;/p&gt;
&lt;p&gt;
The Dynamic Type is a complicated beast however.&amp;#160; Just reading over Bill Wagner’s
post on implementing a Method Bag fills me with anxiety: &lt;a title="http://msdn.microsoft.com/en-us/library/ee658247.aspx" href="http://msdn.microsoft.com/en-us/library/ee658247.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee658247.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
That post was nothing, however, compared to this gem I found on Nikhil Kothari’s blog
from over a year ago!&amp;#160; &lt;a title="http://www.nikhilk.net/CSharp-Dynamic-Programming-REST-Services.aspx" href="http://www.nikhilk.net/CSharp-Dynamic-Programming-REST-Services.aspx"&gt;http://www.nikhilk.net/CSharp-Dynamic-Programming-REST-Services.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Mr. Kothari builds a class that can point to multiple (and, thanks to the Dynamic
Type, interchangeable) REST services and generates properties based on the XML or
JSON that comes back.&amp;#160; It does much more than this, also, I think, but Nikhil
Kothari is so far beyond me that I have trouble understanding everything that is happening
in his code.
&lt;/p&gt;
&lt;p&gt;
The source code, by the way, doesn’t actually compile as it is currently written –
but then he did this over a year ago, so…
&lt;/p&gt;
&lt;p&gt;
In any case, walking through and coming to terms with what he has created is certainly
one of my goals for November.&amp;#160; It is an implementation that is a game-changer
for C# development, and raises Dynamic Types from an oddity to something that will
actually solve architectural bottlenecks … at least, I think it does.&amp;#160; As I said,
I don’t actually understand it, yet.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=863f61c3-aa27-4ac9-80be-1dbae2621d71" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,863f61c3-aa27-4ac9-80be-1dbae2621d71.aspx</comments>
      <category>.NET 4.0</category>
      <category>C#</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=b19611a9-6578-4b64-b0be-7ea3856a0a91</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,b19611a9-6578-4b64-b0be-7ea3856a0a91.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,b19611a9-6578-4b64-b0be-7ea3856a0a91.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b19611a9-6578-4b64-b0be-7ea3856a0a91</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WorldOfTomorrow" border="0" alt="WorldOfTomorrow" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/October2009TheMonththatWas_8BB5/WorldOfTomorrow_3.jpg" width="244" height="165" />
        </p>
        <p>
At the Atlanta Leading Edge Microsoft User Group (<a href="http://www.alemug.net">ALEMUG</a>),
we typically set aside some time at the beginning of each meeting to discuss the hot
topics related to software development – with a particular slant toward the Microsoft
world – that have come up in the previous month.
</p>
        <p>
The web of cross-conversations on blogs, YouTube videos, and software announcements
makes up and propels the <em>culture</em> of the software industry.  To be a
software developer, in some degree, means being current on these ephemeral Internet
happenings.  The purpose of the ten minutes we set aside at the ALEMUG meetings
to discuss them is simply to make sure everyone is caught up on current events, so
to speak, so that we have a common vocabulary when discussing technology and software
methodologies.  After all, communication is the most difficult thing about developing
software.  Many of us know how to get things done, but the hard part – explaining
why we do things the way we do and sharing our technical knowledge with others – is
elusive.  Programming knowledge is always fragmentary, at best, and trying to
bring it all together through best practices and even some historical perspective
is a constant struggle.
</p>
        <p>
These monthly wrap-ups also serve as a time capsule, however.  A peculiarity
of working on the cutting edge of technology is that there is very little awareness
of the passing of time.  Software development usually occurs in a bubble of hyper-focus
that inevitably destroys our sense of time.  For instance, how long has WPF been
around?  How long has twitter been around?  On a resume, what is the longest
amount of time a developer can legitimately claim to have worked with .NET?  
</p>
        <p>
With the goal of restoring the sense of the flow of time – what Kant called <em>inner
sense</em> – here is a list of matters momentous and trivial to the software industry
in the middling period between September and October, 2009:
</p>
        <p>
A renewed debate between Morts and Architect Astronauts was started by Joel Sposky:
</p>
        <p>
          <a href="http://www.joelonsoftware.com/items/2009/09/23.html">http://www.joelonsoftware.com/items/2009/09/23.html</a>
        </p>
        <p>
          <a href="http://jeffreypalermo.com/blog/debunking-the-duct-tape-programmer/">http://jeffreypalermo.com/blog/debunking-the-duct-tape-programmer/</a>
        </p>
        <p>
          <a href="http://martinfowler.com/bliki/TechnicalDebtQuadrant.html">http://martinfowler.com/bliki/TechnicalDebtQuadrant.html</a>
        </p>
        <p>
This was mirrored by a similar sort of debate concerning software methodologies started
by Ted Neward:
</p>
        <p>
          <a href="http://blogs.tedneward.com/2009/10/12/quotAgile+Is+Treating+The+Symptoms+Not+The+Diseasequot.aspx">http://blogs.tedneward.com/2009/10/12/quotAgile+Is+Treating+The+Symptoms+Not+The+Diseasequot.aspx</a>
        </p>
        <p>
          <a href="http://haacked.com/archive/2009/10/13/software-externalities.aspx">http://haacked.com/archive/2009/10/13/software-externalities.aspx</a>
        </p>
        <p>
Microsoft started a new series of ads for their operating systems: Win 7 and Mobile
6.5, that did not quite hit their mark:
</p>
        <p>
          <a href="http://www.bing.com/videos/search?q=microsoft+launch+party&amp;docid=1316730503766&amp;mid=893DA2AD882B75E7525B893DA2AD882B75E7525B&amp;FORM=VIVR7">http://www.bing.com/videos/search?q=microsoft+launch+party&amp;docid=1316730503766&amp;mid=893DA2AD882B75E7525B893DA2AD882B75E7525B&amp;FORM=VIVR7#</a>
        </p>
        <p>
          <a href="http://www.youtube.com/watch?v=mUotyelWmFE&amp;feature=player_embedded">http://www.youtube.com/watch?v=mUotyelWmFE&amp;feature=player_embedded</a>
        </p>
        <p>
As the Gartner group weighed in on Win 7:
</p>
        <p>
          <a href="http://blogs.zdnet.com/microsoft/?p=4227">http://blogs.zdnet.com/microsoft/?p=4227</a>
        </p>
        <p>
In hardware, solid state drives got the seal of approval from Jeff Atwood while Barnes
&amp; Noble finally came out with their alternative to Amazon’s Kindle:
</p>
        <p>
          <a href="http://www.codinghorror.com/blog/archives/001304.html">http://www.codinghorror.com/blog/archives/001304.html</a>
        </p>
        <p>
          <a href="http://gizmodo.com/5380942/barnes-and-nobles-e+reader-like-a-kindleiphone-chimera-first-photos-and-details">http://gizmodo.com/5380942/barnes-and-nobles-e+reader-like-a-kindleiphone-chimera-first-photos-and-details</a>
        </p>
        <p>
Interesting new software and services were released, including a tool for writing
iPhone apps using C#, Google Wave (does anyone have an invitation they can send me?),
and Yahoo’s alternative to Twitter:
</p>
        <p>
          <a href="http://monotouch.net/">http://monotouch.net/</a>
        </p>
        <p>
          <a href="http://wave.google.com/help/wave/closed.html">http://wave.google.com/help/wave/closed.html</a>
        </p>
        <p>
        </p>
        <p>
          <a href="http://haacked.com/archive/2009/10/13/software-externalities.aspx">
          </a>
        </p>
        <a href="http://meme.yahoo.com/home/">http://meme.yahoo.com/home/</a>
        <p>
An indication that the cold war between Microsoft and Google is beginning to heat
up:
</p>
        <p>
          <a href="http://msmvps.com/blogs/jon_skeet/archive/2009/10/01/mvp-no-more.aspx">http://msmvps.com/blogs/jon_skeet/archive/2009/10/01/mvp-no-more.aspx</a>
        </p>
        <p>
And some insights into the world of publishing software books:
</p>
        <p>
          <a href="http://beginningruby.org/what-ive-earned-and-learned/">http://beginningruby.org/what-ive-earned-and-learned/</a>
        </p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=b19611a9-6578-4b64-b0be-7ea3856a0a91" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>October 2009: The Month that Was</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,b19611a9-6578-4b64-b0be-7ea3856a0a91.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/October2009TheMonthThatWas.aspx</link>
      <pubDate>Wed, 04 Nov 2009 14:56:46 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="WorldOfTomorrow" border="0" alt="WorldOfTomorrow" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/October2009TheMonththatWas_8BB5/WorldOfTomorrow_3.jpg" width="244" height="165" /&gt; 
&lt;/p&gt;
&lt;p&gt;
At the Atlanta Leading Edge Microsoft User Group (&lt;a href="http://www.alemug.net"&gt;ALEMUG&lt;/a&gt;),
we typically set aside some time at the beginning of each meeting to discuss the hot
topics related to software development – with a particular slant toward the Microsoft
world – that have come up in the previous month.
&lt;/p&gt;
&lt;p&gt;
The web of cross-conversations on blogs, YouTube videos, and software announcements
makes up and propels the &lt;em&gt;culture&lt;/em&gt; of the software industry.&amp;#160; To be a
software developer, in some degree, means being current on these ephemeral Internet
happenings.&amp;#160; The purpose of the ten minutes we set aside at the ALEMUG meetings
to discuss them is simply to make sure everyone is caught up on current events, so
to speak, so that we have a common vocabulary when discussing technology and software
methodologies.&amp;#160; After all, communication is the most difficult thing about developing
software.&amp;#160; Many of us know how to get things done, but the hard part – explaining
why we do things the way we do and sharing our technical knowledge with others – is
elusive.&amp;#160; Programming knowledge is always fragmentary, at best, and trying to
bring it all together through best practices and even some historical perspective
is a constant struggle.
&lt;/p&gt;
&lt;p&gt;
These monthly wrap-ups also serve as a time capsule, however.&amp;#160; A peculiarity
of working on the cutting edge of technology is that there is very little awareness
of the passing of time.&amp;#160; Software development usually occurs in a bubble of hyper-focus
that inevitably destroys our sense of time.&amp;#160; For instance, how long has WPF been
around?&amp;#160; How long has twitter been around?&amp;#160; On a resume, what is the longest
amount of time a developer can legitimately claim to have worked with .NET?&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
With the goal of restoring the sense of the flow of time – what Kant called &lt;em&gt;inner
sense&lt;/em&gt; – here is a list of matters momentous and trivial to the software industry
in the middling period between September and October, 2009:
&lt;/p&gt;
&lt;p&gt;
A renewed debate between Morts and Architect Astronauts was started by Joel Sposky:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.joelonsoftware.com/items/2009/09/23.html"&gt;http://www.joelonsoftware.com/items/2009/09/23.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://jeffreypalermo.com/blog/debunking-the-duct-tape-programmer/"&gt;http://jeffreypalermo.com/blog/debunking-the-duct-tape-programmer/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://martinfowler.com/bliki/TechnicalDebtQuadrant.html"&gt;http://martinfowler.com/bliki/TechnicalDebtQuadrant.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
This was mirrored by a similar sort of debate concerning software methodologies started
by Ted Neward:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.tedneward.com/2009/10/12/quotAgile+Is+Treating+The+Symptoms+Not+The+Diseasequot.aspx"&gt;http://blogs.tedneward.com/2009/10/12/quotAgile+Is+Treating+The+Symptoms+Not+The+Diseasequot.aspx&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://haacked.com/archive/2009/10/13/software-externalities.aspx"&gt;http://haacked.com/archive/2009/10/13/software-externalities.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Microsoft started a new series of ads for their operating systems: Win 7 and Mobile
6.5, that did not quite hit their mark:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.bing.com/videos/search?q=microsoft+launch+party&amp;amp;docid=1316730503766&amp;amp;mid=893DA2AD882B75E7525B893DA2AD882B75E7525B&amp;amp;FORM=VIVR7"&gt;http://www.bing.com/videos/search?q=microsoft+launch+party&amp;amp;docid=1316730503766&amp;amp;mid=893DA2AD882B75E7525B893DA2AD882B75E7525B&amp;amp;FORM=VIVR7#&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.youtube.com/watch?v=mUotyelWmFE&amp;amp;feature=player_embedded"&gt;http://www.youtube.com/watch?v=mUotyelWmFE&amp;amp;feature=player_embedded&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
As the Gartner group weighed in on Win 7:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.zdnet.com/microsoft/?p=4227"&gt;http://blogs.zdnet.com/microsoft/?p=4227&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
In hardware, solid state drives got the seal of approval from Jeff Atwood while Barnes
&amp;amp; Noble finally came out with their alternative to Amazon’s Kindle:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.codinghorror.com/blog/archives/001304.html"&gt;http://www.codinghorror.com/blog/archives/001304.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://gizmodo.com/5380942/barnes-and-nobles-e+reader-like-a-kindleiphone-chimera-first-photos-and-details"&gt;http://gizmodo.com/5380942/barnes-and-nobles-e+reader-like-a-kindleiphone-chimera-first-photos-and-details&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Interesting new software and services were released, including a tool for writing
iPhone apps using C#, Google Wave (does anyone have an invitation they can send me?),
and Yahoo’s alternative to Twitter:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://monotouch.net/"&gt;http://monotouch.net/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://wave.google.com/help/wave/closed.html"&gt;http://wave.google.com/help/wave/closed.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;
&lt;a href="http://haacked.com/archive/2009/10/13/software-externalities.aspx"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;a href="http://meme.yahoo.com/home/"&gt;http://meme.yahoo.com/home/&lt;/a&gt;&gt;
&lt;p&gt;
An indication that the cold war between Microsoft and Google is beginning to heat
up:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://msmvps.com/blogs/jon_skeet/archive/2009/10/01/mvp-no-more.aspx"&gt;http://msmvps.com/blogs/jon_skeet/archive/2009/10/01/mvp-no-more.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
And some insights into the world of publishing software books:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://beginningruby.org/what-ive-earned-and-learned/"&gt;http://beginningruby.org/what-ive-earned-and-learned/&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=b19611a9-6578-4b64-b0be-7ea3856a0a91" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,b19611a9-6578-4b64-b0be-7ea3856a0a91.aspx</comments>
      <category>Omphaloskepsis</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=267f5154-3da6-43ef-961e-5ce06f0214b4</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,267f5154-3da6-43ef-961e-5ce06f0214b4.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,267f5154-3da6-43ef-961e-5ce06f0214b4.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=267f5154-3da6-43ef-961e-5ce06f0214b4</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 001" border="0" alt="Fuzi Miao 001" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20001_1.jpg" width="244" height="184" />
        </p>
        <p>
While in China, I had a short list of things I wanted to do, some of which I was able
to accomplish and some of which I was not.  
</p>
        <p>
I wanted to see Sun Yat Sen’s tomb (check).  
</p>
        <p>
I wanted to go to the Mid-Lake Pavilion Teahouse in Shanghai because it shows up in
both Neal Stephenson’s <em>Diamond Age</em> -- in which it is one of the two main
hangouts for the mysterious Dr. X along with KFC -- as well as Qiu Xiaolong’s <em>Death
of a Red Heroine </em>(unchecked).  
</p>
        <p>
I wanted to track down the location of the old Russian Saint Nicholas Cathedral, which
I believe was the cathedral where St. John of Shanghai and San Francisco –- a Serbian
monk who eventually became a bishop and a saint venerated in America by the Russian
émigré community – served (unchecked).
</p>
        <p>
I wanted to try certain Chinese delicacies including fermented (through burial) duck
eggs and shark fin soup (check).  The latter particularly impressed my nine-year-old
son, a fan of the Japanese show Iron Chef.   
</p>
        <p>
Finally, I wanted to taste and ideally purchase some Dragon Well Tea.  I had
first heard of Dragon Well a few years ago when I came across a long article about
it in the New Yorker – or it might just as easily been The Economist, Harper’s, since
I cannot find any reference to the article on the Internet.  As I remember the
article – or perhaps as I remember remembering it – it involved the obscure history
of the tea, the peculiar manner in which it is harvested – once a year in spring,
under a new moon, handpicked by virgins – and the devotion it has acquired among tea
connoisseurs, with some sacrificing a year’s salary in order to purchase a few grams
of the highest grade of the <em>long jing</em> leaf.  And so I’ve carried this
story around in my head for many years, wondering if I would ever have a chance to
taste this particular brew.
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 009" border="0" alt="Fuzi Miao 009" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20009_1.jpg" width="244" height="184" />
        </p>
        <p>
I should point out that I am not any sort of tea connoisseur, myself.  I suspect
I may even be a philistine when it comes to teas, my palate already distorted and
ruined by years of coffee drinking.  Nevertheless, I knew that I wanted to try
this tea, purported to be the greatest tea of China.
</p>
        <p>
When the moment finally came, it was not anything revelatory.  The tea is, quite
frankly, nice.  It has a beautiful grassy aroma and a pleasant, gentle flavor
with very little bitterness.  I’d drink it again.  I could certainly see
why the tea is considered to be special, but the experience was not like my first
encounter with a $300 bottle of red wine in the south of France or my first mug of
cold Czech beer in Prague.  Of course, I was not tasting the highest grade of <em>long
jing</em>, which needed to be acquired back in spring – and in truth have no guarantee
that the tea is even from Zhejiang Province, much less the West Lake region – though
the package is marked with the official state PGI label.  
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 010" border="0" alt="Fuzi Miao 010" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20010_1.jpg" width="244" height="184" />
        </p>
        <p>
In any case, drinking it at home, <em>long jing cha</em> has grown on me.  The
smell of it immediately soothes me and the experience of drinking it requires a suitable
and respectful ambience – a quiet and clean space with, ideally, a view.  The
tea has not given up its secrets to me yet, but I intend to be persistent.
</p>
        <p>
Ah!  But I forgot to tell you about the buying of the tea!
</p>
        <p>
My Chinese colleague and I were passing a Ten Fu Teashop – one of a chain of over
a thousand in China – in the Fuzi Miao and heard several young ladies, none older
than 17, singing out to us and beckoning us in.
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 008" border="0" alt="Fuzi Miao 008" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20008_1.jpg" width="244" height="184" />  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 002" border="0" alt="Fuzi Miao 002" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20002_1.jpg" width="244" height="184" /></p>
        <p>
Upon entering Ten Fu, one of the ladies took us to a special tasting table. 
The table had a smaller special wooden table on top of it with slots to catch and
drain away any spilled tea.  Here the hostess went to work intricately preparing
the tea for us.  I had trouble following all of her hand motions as water was
brewed, then poured into receptacles, then disposed of, then poured from one receptacle
to another until the hot water finally touched tea leaves.  
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 003" border="0" alt="Fuzi Miao 003" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20003_1.jpg" width="244" height="184" />  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 004" border="0" alt="Fuzi Miao 004" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20004_1.jpg" width="244" height="184" />    
</p>
        <p>
All the while the hostess described the particular qualities of the teas she was preparing
while also suggesting how they should be drunk, at what time of day, and what sort
of meals they would go with.
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 015" border="0" alt="Fuzi Miao 015" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20015_1.jpg" width="244" height="184" />  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 007" border="0" alt="Fuzi Miao 007" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20007_1.jpg" width="244" height="184" /></p>
        <p>
When the water was poured into the cup that contained the tea, the hostess began brushing
it with the lip of the cup, guiding the tea leaves this way and that along the surface
of the water as she told us the history of each tea we would be tasting.  This
lasted for perhaps thirty seconds and then the tea was strained into yet another receptacle.
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 012" border="0" alt="Fuzi Miao 012" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20012_1.jpg" width="244" height="184" />  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 006" border="0" alt="Fuzi Miao 006" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20006_1.jpg" width="244" height="184" /></p>
        <p>
From here it was finally poured into our tiny tea cups.  She then picked up my
tasting cup and dumped the contents out.  The first pour was to warm the cup,
only.  A second pour and I was finally allowed to taste.  By this time,
the whole experience of watching the tea preparation had already overshadowed the
actual tea itself.  Did I mention that the hostess was flirting with us the whole
time?  We sipped our tea and asked for more.  When the hostess asked us
if we would like to try another tea, we could not bring ourselves to leave for dinner
as we had originally planned.  And so the whole intricate process started all
over again.  The graceful hands of the hostess flitted over the various appurtenances
of the tea ceremony as she smiled, laughed, scolded, cajoled, and mocked us in a fluid
delivery that had us hanging on her every word – none of which I actually understood.
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 017" border="0" alt="Fuzi Miao 017" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20017_1.jpg" width="244" height="184" />
        </p>
        <p>
At last we had tried three different teas -- which I could barely tell apart until
the oolong with osmanthus came along -- and when it was clear that we would be purchasing
nothing beyond my bag of Dragon Well Tea, we sadly parted ways with our hostess. 
When we asked her for her name, she laughed at us and said she couldn’t possibly tell
us since we had only just met her, and that we would have to come back to her many
more times before she would reveal it.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=267f5154-3da6-43ef-961e-5ce06f0214b4" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Have I Mentioned the Tea?</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,267f5154-3da6-43ef-961e-5ce06f0214b4.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/HaveIMentionedTheTea.aspx</link>
      <pubDate>Sun, 01 Nov 2009 21:40:24 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 001" border="0" alt="Fuzi Miao 001" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20001_1.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
While in China, I had a short list of things I wanted to do, some of which I was able
to accomplish and some of which I was not.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
I wanted to see Sun Yat Sen’s tomb (check).&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
I wanted to go to the Mid-Lake Pavilion Teahouse in Shanghai because it shows up in
both Neal Stephenson’s &lt;em&gt;Diamond Age&lt;/em&gt; -- in which it is one of the two main
hangouts for the mysterious Dr. X along with KFC -- as well as Qiu Xiaolong’s &lt;em&gt;Death
of a Red Heroine &lt;/em&gt;(unchecked).&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
I wanted to track down the location of the old Russian Saint Nicholas Cathedral, which
I believe was the cathedral where St. John of Shanghai and San Francisco –- a Serbian
monk who eventually became a bishop and a saint venerated in America by the Russian
émigré community – served (unchecked).
&lt;/p&gt;
&lt;p&gt;
I wanted to try certain Chinese delicacies including fermented (through burial) duck
eggs and shark fin soup (check).&amp;#160; The latter particularly impressed my nine-year-old
son, a fan of the Japanese show Iron Chef.&amp;#160;&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
Finally, I wanted to taste and ideally purchase some Dragon Well Tea.&amp;#160; I had
first heard of Dragon Well a few years ago when I came across a long article about
it in the New Yorker – or it might just as easily been The Economist, Harper’s, since
I cannot find any reference to the article on the Internet.&amp;#160; As I remember the
article – or perhaps as I remember remembering it – it involved the obscure history
of the tea, the peculiar manner in which it is harvested – once a year in spring,
under a new moon, handpicked by virgins – and the devotion it has acquired among tea
connoisseurs, with some sacrificing a year’s salary in order to purchase a few grams
of the highest grade of the &lt;em&gt;long jing&lt;/em&gt; leaf.&amp;#160; And so I’ve carried this
story around in my head for many years, wondering if I would ever have a chance to
taste this particular brew.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 009" border="0" alt="Fuzi Miao 009" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20009_1.jpg" width="244" height="184" /&gt;
&lt;/p&gt;
&lt;p&gt;
I should point out that I am not any sort of tea connoisseur, myself.&amp;#160; I suspect
I may even be a philistine when it comes to teas, my palate already distorted and
ruined by years of coffee drinking.&amp;#160; Nevertheless, I knew that I wanted to try
this tea, purported to be the greatest tea of China.
&lt;/p&gt;
&lt;p&gt;
When the moment finally came, it was not anything revelatory.&amp;#160; The tea is, quite
frankly, nice.&amp;#160; It has a beautiful grassy aroma and a pleasant, gentle flavor
with very little bitterness.&amp;#160; I’d drink it again.&amp;#160; I could certainly see
why the tea is considered to be special, but the experience was not like my first
encounter with a $300 bottle of red wine in the south of France or my first mug of
cold Czech beer in Prague.&amp;#160; Of course, I was not tasting the highest grade of &lt;em&gt;long
jing&lt;/em&gt;, which needed to be acquired back in spring – and in truth have no guarantee
that the tea is even from Zhejiang Province, much less the West Lake region – though
the package is marked with the official state PGI label.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 010" border="0" alt="Fuzi Miao 010" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20010_1.jpg" width="244" height="184" /&gt;
&lt;/p&gt;
&lt;p&gt;
In any case, drinking it at home, &lt;em&gt;long jing cha&lt;/em&gt; has grown on me.&amp;#160; The
smell of it immediately soothes me and the experience of drinking it requires a suitable
and respectful ambience – a quiet and clean space with, ideally, a view.&amp;#160; The
tea has not given up its secrets to me yet, but I intend to be persistent.
&lt;/p&gt;
&lt;p&gt;
Ah!&amp;#160; But I forgot to tell you about the buying of the tea!
&lt;/p&gt;
&lt;p&gt;
My Chinese colleague and I were passing a Ten Fu Teashop – one of a chain of over
a thousand in China – in the Fuzi Miao and heard several young ladies, none older
than 17, singing out to us and beckoning us in.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 008" border="0" alt="Fuzi Miao 008" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20008_1.jpg" width="244" height="184" /&gt;&amp;#160; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 002" border="0" alt="Fuzi Miao 002" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20002_1.jpg" width="244" height="184" /&gt;
&lt;/p&gt;
&lt;p&gt;
Upon entering Ten Fu, one of the ladies took us to a special tasting table.&amp;#160;
The table had a smaller special wooden table on top of it with slots to catch and
drain away any spilled tea.&amp;#160; Here the hostess went to work intricately preparing
the tea for us.&amp;#160; I had trouble following all of her hand motions as water was
brewed, then poured into receptacles, then disposed of, then poured from one receptacle
to another until the hot water finally touched tea leaves.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 003" border="0" alt="Fuzi Miao 003" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20003_1.jpg" width="244" height="184" /&gt;&amp;#160; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 004" border="0" alt="Fuzi Miao 004" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20004_1.jpg" width="244" height="184" /&gt;&amp;#160;&amp;#160;&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
All the while the hostess described the particular qualities of the teas she was preparing
while also suggesting how they should be drunk, at what time of day, and what sort
of meals they would go with.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 015" border="0" alt="Fuzi Miao 015" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20015_1.jpg" width="244" height="184" /&gt;&amp;#160; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 007" border="0" alt="Fuzi Miao 007" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20007_1.jpg" width="244" height="184" /&gt;
&lt;/p&gt;
&lt;p&gt;
When the water was poured into the cup that contained the tea, the hostess began brushing
it with the lip of the cup, guiding the tea leaves this way and that along the surface
of the water as she told us the history of each tea we would be tasting.&amp;#160; This
lasted for perhaps thirty seconds and then the tea was strained into yet another receptacle.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 012" border="0" alt="Fuzi Miao 012" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20012_1.jpg" width="244" height="184" /&gt;&amp;#160; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 006" border="0" alt="Fuzi Miao 006" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20006_1.jpg" width="244" height="184" /&gt;
&lt;/p&gt;
&lt;p&gt;
From here it was finally poured into our tiny tea cups.&amp;#160; She then picked up my
tasting cup and dumped the contents out.&amp;#160; The first pour was to warm the cup,
only.&amp;#160; A second pour and I was finally allowed to taste.&amp;#160; By this time,
the whole experience of watching the tea preparation had already overshadowed the
actual tea itself.&amp;#160; Did I mention that the hostess was flirting with us the whole
time?&amp;#160; We sipped our tea and asked for more.&amp;#160; When the hostess asked us
if we would like to try another tea, we could not bring ourselves to leave for dinner
as we had originally planned.&amp;#160; And so the whole intricate process started all
over again.&amp;#160; The graceful hands of the hostess flitted over the various appurtenances
of the tea ceremony as she smiled, laughed, scolded, cajoled, and mocked us in a fluid
delivery that had us hanging on her every word – none of which I actually understood.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 017" border="0" alt="Fuzi Miao 017" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentionedtheTea_7B9E/Fuzi%20Miao%20017_1.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
At last we had tried three different teas -- which I could barely tell apart until
the oolong with osmanthus came along -- and when it was clear that we would be purchasing
nothing beyond my bag of Dragon Well Tea, we sadly parted ways with our hostess.&amp;#160;
When we asked her for her name, she laughed at us and said she couldn’t possibly tell
us since we had only just met her, and that we would have to come back to her many
more times before she would reveal it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=267f5154-3da6-43ef-961e-5ce06f0214b4" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,267f5154-3da6-43ef-961e-5ce06f0214b4.aspx</comments>
      <category>The Celestial Kingdom</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=90cdf45a-c9d5-4e2f-9614-d458d1031f3b</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,90cdf45a-c9d5-4e2f-9614-d458d1031f3b.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,90cdf45a-c9d5-4e2f-9614-d458d1031f3b.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=90cdf45a-c9d5-4e2f-9614-d458d1031f3b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Nanjing Skyline" border="0" alt="Nanjing Skyline" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20160_1.jpg" width="244" height="184" />
        </p>
        <p>
Have I mention the food in China?  I have been spending most evenings wandering
the streets of Nanjing looking for interesting street food vendors.  Most of
the afternoons, however, the corporate hosts take me to try the different regional
dishes and traditional favorites.  
</p>
        <p>
Today, for instance, I finally had a chance to try fermented duck eggs at lunch. 
These eggs (according to my host) were only buried for a few months before being dug
up and served.
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fermented Duck Eggs" border="0" alt="Fermented Duck Eggs" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20Tuesday%20afternoon%20002_1.jpg" width="244" height="184" />
        </p>
        <p>
I had eel yesterday (by pointing to something swimming in a tank and insisting that
I wanted it) but have no picture of it.  I do have pictures of the Beijing Duck
we ate for dinner a few days ago.  The bones left over from the preparation are
served either fried or in a soup.  Since we had two ducks, we had the remainders
served both ways.
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Beijing Duck" border="0" alt="Beijing Duck" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20098_1.jpg" width="244" height="184" />    <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Beijing Duck" border="0" alt="Beijing Duck" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20099_1.jpg" width="244" height="184" /></p>
        <p>
I was surprised to find out that Sweet and Sour Chicken is an authentic Chinese dish.
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Sweet and Sour Chicken" border="0" alt="Sweet and Sour Chicken" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20106_1.jpg" width="244" height="184" />    <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Soup" border="0" alt="Soup" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20Tuesday%20afternoon%20007_1.jpg" width="244" height="184" /></p>
        <p>
As is Kung Pao Pork and Sesame Chicken.  We also had Mo Po Tofu several times
for lunch and dinner.
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Mo Po Tofu" border="0" alt="Mo Po Tofu" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20and%20Shanghai%20059_3.jpg" width="244" height="184" />    <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Grilled pork backs" border="0" alt="Grilled pork backs" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Shanghai%20016_2.jpg" width="244" height="184" /></p>
        <p>
A fish dish or two was present at almost every meal.
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Sezhuan Catfish" border="0" alt="Sezhuan Catfish" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20and%20Shanghai%20062_1.jpg" width="244" height="184" />    <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Nanjing and Shanghai 049" border="0" alt="Nanjing and Shanghai 049" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20and%20Shanghai%20049_1.jpg" width="244" height="184" /></p>
        <p>
And, of course, we had veggies.
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Beans" border="0" alt="Beans" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20and%20Shanghai%20051_1.jpg" width="244" height="184" />    <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Cabbage and Mushrooms" border="0" alt="Cabbage and Mushrooms" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20124_1.jpg" width="244" height="184" /></p>
        <p>
As I mentioned, following my nose through the streets of Shanghai and Nanjing has
also been extremely fun.  There are lots of variations on the dumpling to be
found as well as various ways to cook a noodle and deep-fry dough.
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Street dumplings" border="0" alt="Street dumplings" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20015_1.jpg" width="244" height="184" />    <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Street Crepe" border="0" alt="Street Crepe" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20226_1.jpg" width="244" height="184" /></p>
        <p>
 
</p>
        <p>
The most interesting meal, however, was the one I had tonight with Lu Bing. 
The rest of the team from America has returned to Shanghai, so Bing and I went to
the Fuzi Miao – the Old Confucius Temple – to do some shopping.  Bing suggested,
tentatively, that we go for a traditional Nanjing meal and I jumped at the chance. 
We went back and forth trying to find the right term for a meal that involves offal,
duck blood soup, funky tofu, an egg cooked in tea, pickled vegetables and periwinkles. 
I think we call it “country” cooking in America, though that is not quite appropriate
in this case since the dishes are notably old-school “city” cuisine.
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Nanjing Traditional" border="0" alt="Nanjing Traditional" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Fuzi%20Miao%20022_1.jpg" width="244" height="184" />    <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 023" border="0" alt="Fuzi Miao 023" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Fuzi%20Miao%20023_1.jpg" width="244" height="184" /></p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=90cdf45a-c9d5-4e2f-9614-d458d1031f3b" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Have I Mentioned the Food?</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,90cdf45a-c9d5-4e2f-9614-d458d1031f3b.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/HaveIMentionedTheFood.aspx</link>
      <pubDate>Tue, 27 Oct 2009 13:34:29 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Nanjing Skyline" border="0" alt="Nanjing Skyline" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20160_1.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
Have I mention the food in China?&amp;#160; I have been spending most evenings wandering
the streets of Nanjing looking for interesting street food vendors.&amp;#160; Most of
the afternoons, however, the corporate hosts take me to try the different regional
dishes and traditional favorites.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
Today, for instance, I finally had a chance to try fermented duck eggs at lunch.&amp;#160;
These eggs (according to my host) were only buried for a few months before being dug
up and served.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fermented Duck Eggs" border="0" alt="Fermented Duck Eggs" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20Tuesday%20afternoon%20002_1.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
I had eel yesterday (by pointing to something swimming in a tank and insisting that
I wanted it) but have no picture of it.&amp;#160; I do have pictures of the Beijing Duck
we ate for dinner a few days ago.&amp;#160; The bones left over from the preparation are
served either fried or in a soup.&amp;#160; Since we had two ducks, we had the remainders
served both ways.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Beijing Duck" border="0" alt="Beijing Duck" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20098_1.jpg" width="244" height="184" /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Beijing Duck" border="0" alt="Beijing Duck" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20099_1.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
I was surprised to find out that Sweet and Sour Chicken is an authentic Chinese dish.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Sweet and Sour Chicken" border="0" alt="Sweet and Sour Chicken" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20106_1.jpg" width="244" height="184" /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Soup" border="0" alt="Soup" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20Tuesday%20afternoon%20007_1.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
As is Kung Pao Pork and Sesame Chicken.&amp;#160; We also had Mo Po Tofu several times
for lunch and dinner.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Mo Po Tofu" border="0" alt="Mo Po Tofu" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20and%20Shanghai%20059_3.jpg" width="244" height="184" /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Grilled pork backs" border="0" alt="Grilled pork backs" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Shanghai%20016_2.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
A fish dish or two was present at almost every meal.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Sezhuan Catfish" border="0" alt="Sezhuan Catfish" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20and%20Shanghai%20062_1.jpg" width="244" height="184" /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Nanjing and Shanghai 049" border="0" alt="Nanjing and Shanghai 049" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20and%20Shanghai%20049_1.jpg" width="244" height="184" /&gt;
&lt;/p&gt;
&lt;p&gt;
And, of course, we had veggies.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Beans" border="0" alt="Beans" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20and%20Shanghai%20051_1.jpg" width="244" height="184" /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Cabbage and Mushrooms" border="0" alt="Cabbage and Mushrooms" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20124_1.jpg" width="244" height="184" /&gt;
&lt;/p&gt;
&lt;p&gt;
As I mentioned, following my nose through the streets of Shanghai and Nanjing has
also been extremely fun.&amp;#160; There are lots of variations on the dumpling to be
found as well as various ways to cook a noodle and deep-fry dough.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Street dumplings" border="0" alt="Street dumplings" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20015_1.jpg" width="244" height="184" /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Street Crepe" border="0" alt="Street Crepe" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Nanjing%20226_1.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
The most interesting meal, however, was the one I had tonight with Lu Bing.&amp;#160;
The rest of the team from America has returned to Shanghai, so Bing and I went to
the Fuzi Miao – the Old Confucius Temple – to do some shopping.&amp;#160; Bing suggested,
tentatively, that we go for a traditional Nanjing meal and I jumped at the chance.&amp;#160;
We went back and forth trying to find the right term for a meal that involves offal,
duck blood soup, funky tofu, an egg cooked in tea, pickled vegetables and periwinkles.&amp;#160;
I think we call it “country” cooking in America, though that is not quite appropriate
in this case since the dishes are notably old-school “city” cuisine.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Nanjing Traditional" border="0" alt="Nanjing Traditional" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Fuzi%20Miao%20022_1.jpg" width="244" height="184" /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Fuzi Miao 023" border="0" alt="Fuzi Miao 023" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/HaveIMentiontheFood_4182/Fuzi%20Miao%20023_1.jpg" width="244" height="184" /&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=90cdf45a-c9d5-4e2f-9614-d458d1031f3b" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,90cdf45a-c9d5-4e2f-9614-d458d1031f3b.aspx</comments>
      <category>The Celestial Kingdom</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=51aa3597-e355-4412-8142-602a2372e8c8</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,51aa3597-e355-4412-8142-602a2372e8c8.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,51aa3597-e355-4412-8142-602a2372e8c8.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=51aa3597-e355-4412-8142-602a2372e8c8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Street Caligraphy (Shanghai)" border="0" alt="Street Caligraphy (Shanghai)" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ExileandtheCelestialKingdom_72EE/Shanghai%20028_1.jpg" width="244" height="184" />
        </p>
        <p>
For the past week I have been working in Shanghai and Nanjing for my company. 
The flight from Atlanta to Shanghai involved two legs: first three hours to Detroit
and then another fourteen to Shanghai.  Most of the flight from Detroit to Shanghai
was over icy tundra, so the view over the right wing of the plane was mostly of frozen
rivers and crevasses.  Shanghai is a sprawling and quickly growing city on the
south eastern coast of China.  Unlike other cities in which high rises are concentrated
in the center, Shanghai has buildings everywhere reaching upward into the sky, the
only space it can grow into since the Yangtze River does not deposit dirt quickly
enough onto the coast to provide land for the Chinese perpetually migrating to this
industrious city in order to fulfill their dreams of prosperity.
</p>
        <p>
Misunderstanding the nature of travelling for work, I made the mistake of bringing
eight large books with me to fill up the many hours I thought I would have to myself. 
Instead, of course, the time has been filled up with presentations, meetings, long
commutes, and exhausted evenings – not unlike Atlanta.
</p>
        <p>
And so I find myself going through my regular routines in a thoroughly exotic environment. 
Perhaps this is why, unlike Albert Camus’ famous description of his two weeks in a
foreign city, I feel comfortable in China rather than -- well -- existential.
</p>
        <p>
Each night the employees of the Chinese company for whom I am consulting take me out
to remarkable meals.  On the nights when I am left to my own devices I have the
opportunity to walk the avenues of Shanghai and Nanjing sampling street food. 
Nanjing is particularly well known for its beef dumplings – which I believe I tired
last night at a literal hole in the wall advertised in English as “Wu’s Famous Meat
Buns”.
</p>
        <p>
Nanjing is sometimes called Duck City (at least according to a website I visited)
because of the quantity of duck consumed here.  Lu Bing, one of the managers
of the local Nanjing branch, took me and my colleagues to a restaurant that specializes
in Beijing cuisine which included, of course, Beijing Duck.
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Beijing Duck" border="0" alt="Beijing Duck" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ExileandtheCelestialKingdom_72EE/Nanjing%20097_1.jpg" width="244" height="184" />
        </p>
        <p>
Here is a picture of our host, Bing, ladling duck soup for us:
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Bing Lu" border="0" alt="Bing Lu" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ExileandtheCelestialKingdom_72EE/Nanjing%20105_1.jpg" width="184" height="244" />  
</p>
        <p>
I could talk about what a wonderful tourist destination Shanghai and Nanjing are. 
Hotels and restaurants are relatively inexpensive.  The people are friendly without
being fawning.  Neither city is overrun with tourists, and so one has the illusion
that one sees the city <em>an-sich</em> rather than <em>fur-uns</em>. 
</p>
        <p>
There is another side, too, however.  The economic reforms of the past twenty
years or so have brought prosperity to China -- especially in areas like Shanghai
and Nanjing -- but have also accelerated the deracination experienced in America since
the 1950’s as people increasingly move about and change jobs.  Two income households,
separation from one’s home town and ancestral graves, the constant task of reinventing
oneself and forming meaningful but short-lived relationships – all the symptoms described
in America as “bowling alone” – are quickly manifesting themselves in China.
</p>
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Nanjing streets" border="0" alt="Nanjing streets" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ExileandtheCelestialKingdom_72EE/Nanjing%20and%20Shanghai%20004_1.jpg" width="244" height="184" />
        </p>
        <p>
I wish I could say where it all leads, but I’m not even sure where this all leads
in the West.  Perhaps to existential <em>angst</em>, after all – and perhaps
it is this aspect of the modern China that I find so familiar.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=51aa3597-e355-4412-8142-602a2372e8c8" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Exile and the Celestial Kingdom</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,51aa3597-e355-4412-8142-602a2372e8c8.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/ExileAndTheCelestialKingdom.aspx</link>
      <pubDate>Sat, 24 Oct 2009 12:55:21 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Street Caligraphy (Shanghai)" border="0" alt="Street Caligraphy (Shanghai)" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ExileandtheCelestialKingdom_72EE/Shanghai%20028_1.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
For the past week I have been working in Shanghai and Nanjing for my company.&amp;#160;
The flight from Atlanta to Shanghai involved two legs: first three hours to Detroit
and then another fourteen to Shanghai.&amp;#160; Most of the flight from Detroit to Shanghai
was over icy tundra, so the view over the right wing of the plane was mostly of frozen
rivers and crevasses.&amp;#160; Shanghai is a sprawling and quickly growing city on the
south eastern coast of China.&amp;#160; Unlike other cities in which high rises are concentrated
in the center, Shanghai has buildings everywhere reaching upward into the sky, the
only space it can grow into since the Yangtze River does not deposit dirt quickly
enough onto the coast to provide land for the Chinese perpetually migrating to this
industrious city in order to fulfill their dreams of prosperity.
&lt;/p&gt;
&lt;p&gt;
Misunderstanding the nature of travelling for work, I made the mistake of bringing
eight large books with me to fill up the many hours I thought I would have to myself.&amp;#160;
Instead, of course, the time has been filled up with presentations, meetings, long
commutes, and exhausted evenings – not unlike Atlanta.
&lt;/p&gt;
&lt;p&gt;
And so I find myself going through my regular routines in a thoroughly exotic environment.&amp;#160;
Perhaps this is why, unlike Albert Camus’ famous description of his two weeks in a
foreign city, I feel comfortable in China rather than -- well -- existential.
&lt;/p&gt;
&lt;p&gt;
Each night the employees of the Chinese company for whom I am consulting take me out
to remarkable meals.&amp;#160; On the nights when I am left to my own devices I have the
opportunity to walk the avenues of Shanghai and Nanjing sampling street food.&amp;#160;
Nanjing is particularly well known for its beef dumplings – which I believe I tired
last night at a literal hole in the wall advertised in English as “Wu’s Famous Meat
Buns”.
&lt;/p&gt;
&lt;p&gt;
Nanjing is sometimes called Duck City (at least according to a website I visited)
because of the quantity of duck consumed here.&amp;#160; Lu Bing, one of the managers
of the local Nanjing branch, took me and my colleagues to a restaurant that specializes
in Beijing cuisine which included, of course, Beijing Duck.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Beijing Duck" border="0" alt="Beijing Duck" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ExileandtheCelestialKingdom_72EE/Nanjing%20097_1.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
Here is a picture of our host, Bing, ladling duck soup for us:
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Bing Lu" border="0" alt="Bing Lu" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ExileandtheCelestialKingdom_72EE/Nanjing%20105_1.jpg" width="184" height="244" /&gt;&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
I could talk about what a wonderful tourist destination Shanghai and Nanjing are.&amp;#160;
Hotels and restaurants are relatively inexpensive.&amp;#160; The people are friendly without
being fawning.&amp;#160; Neither city is overrun with tourists, and so one has the illusion
that one sees the city &lt;em&gt;an-sich&lt;/em&gt; rather than &lt;em&gt;fur-uns&lt;/em&gt;. 
&lt;/p&gt;
&lt;p&gt;
There is another side, too, however.&amp;#160; The economic reforms of the past twenty
years or so have brought prosperity to China -- especially in areas like Shanghai
and Nanjing -- but have also accelerated the deracination experienced in America since
the 1950’s as people increasingly move about and change jobs.&amp;#160; Two income households,
separation from one’s home town and ancestral graves, the constant task of reinventing
oneself and forming meaningful but short-lived relationships – all the symptoms described
in America as “bowling alone” – are quickly manifesting themselves in China.
&lt;/p&gt;
&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Nanjing streets" border="0" alt="Nanjing streets" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ExileandtheCelestialKingdom_72EE/Nanjing%20and%20Shanghai%20004_1.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
I wish I could say where it all leads, but I’m not even sure where this all leads
in the West.&amp;#160; Perhaps to existential &lt;em&gt;angst&lt;/em&gt;, after all – and perhaps
it is this aspect of the modern China that I find so familiar.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=51aa3597-e355-4412-8142-602a2372e8c8" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,51aa3597-e355-4412-8142-602a2372e8c8.aspx</comments>
      <category>The Celestial Kingdom</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=d8d21415-f240-413b-9f1b-0b54d1132898</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,d8d21415-f240-413b-9f1b-0b54d1132898.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,d8d21415-f240-413b-9f1b-0b54d1132898.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d8d21415-f240-413b-9f1b-0b54d1132898</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="moby-dick" border="0" alt="moby-dick" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/CodChowder_AEF9/moby-dick_3.jpg" width="244" height="244" />
        </p>
        <p>
Early in Melville’s Moby Dick, Peter Coffin, proprietor of the Spouter Inn, recommends
the Try Pots, an inn known for its chowders and run by Peter Coffin’s cousin Hosea
Hussey, as a good place for a meal.
</p>
        <blockquote>
          <p>
            <font face="Courier New">Fishiest of all fishy places was the Try Pots, which well
deserved its name; for the pots there were always boiling chowders. Chowder for breakfast,
and chowder for dinner, and chowder for supper, till you began to look for fish-bones
coming through your clothes. The area before the house was paved with clam-shells.
Mrs. Hussey wore a polished necklace of codfish vertebra; and Hosea Hussey had his
account books bound in superior old shark-skin. There was a fishy flavor to the milk,
too, which I could not at all account for, till one morning happening to take a stroll
along the beach among some fishermen's boats, I saw Hosea's brindled cow feeding on
fish remnants, and marching along the sand with each foot in a cod's decapitated head,
looking very slip-shod, I assure ye.</font>
          </p>
        </blockquote>
        <p>
The description of the cod chowder at the Try Pots has always captivated me. 
I’m a fan of canned clam chowder and have occasionally had the pleasure of a bowl
of clam chowder at Legal Sea Foods next to the Georgia Aquarium – but cod chowder
has never made its way to my table.
</p>
        <blockquote>
          <p>
            <font face="Courier New">"Come on, Queequeg," said I, "all right. There's
Mrs. Hussey." </font>
          </p>
          <p>
            <font face="Courier New">And so it turned out; Mr. Hosea Hussey being from home, but
leaving Mrs. Hussey entirely competent to attend to all his affairs. Upon making known
our desires for a supper and a bed, Mrs. Hussey, postponing further scolding for the
present, ushered us into a little room, and seating us at a table spread with the
relics of a recently concluded repast, turned round to us and said—"Clam or Cod?" </font>
          </p>
          <p>
            <font face="Courier New">"What's that about Cods, ma'am?" said I, with much
politeness. </font>
          </p>
          <p>
            <font face="Courier New">"Clam or Cod?" she repeated. </font>
          </p>
          <p>
            <font face="Courier New">"A clam for supper? a cold clam; is THAT what you mean,
Mrs. Hussey?" says I, "but that's a rather cold and clammy reception in
the winter time, ain't it, Mrs. Hussey?" </font>
          </p>
          <p>
            <font face="Courier New">But being in a great hurry to resume scolding the man in
the purple Shirt, who was waiting for it in the entry, and seeming to hear nothing
but the word "clam," Mrs. Hussey hurried towards an open door leading to
the kitchen, and bawling out "clam for two," disappeared. </font>
          </p>
          <p>
            <font face="Courier New">"Queequeg," said I, "do you think that we
can make out a supper for us both on one clam?" </font>
          </p>
          <p>
            <font face="Courier New">However, a warm savory steam from the kitchen served to belie
the apparently cheerless prospect before us. But when that smoking chowder came in,
the mystery was delightfully explained. Oh, sweet friends! hearken to me. It was made
of small juicy clams, scarcely bigger than hazel nuts, mixed with pounded ship biscuit,
and salted pork cut up into little flakes; the whole enriched with butter, and plentifully
seasoned with pepper and salt. Our appetites being sharpened by the frosty voyage,
and in particular, Queequeg seeing his favourite fishing food before him, and the
chowder being surpassingly excellent, we despatched it with great expedition: when
leaning back a moment and bethinking me of Mrs. Hussey's clam and cod announcement,
I thought I would try a little experiment. Stepping to the kitchen door, I uttered
the word "cod" with great emphasis, and resumed my seat. In a few moments
the savoury steam came forth again, but with a different flavor, and in good time
a fine cod-chowder was placed before us. </font>
          </p>
          <p>
            <font face="Courier New">We resumed business; and while plying our spoons in the bowl,
thinks I to myself, I wonder now if this here has any effect on the head? What's that
stultifying saying about chowder-headed people? "But look, Queequeg, ain't that
a live eel in your bowl? Where's your harpoon?" </font>
          </p>
        </blockquote>
        <p>
We have a crock pot in our kitchen – a repackaged gift from Christmases past – and
I decided to put it to good use this past weekend.  The recipe itself was quite
simple:
</p>
        <ul>
          <ul>
            <li>
              <font face="Courier New">1 cup finely chopped onion</font>
            </li>
            <li>
              <font face="Courier New">1 stick butter</font>
            </li>
            <li>
              <font face="Courier New">4 cups diced potato</font>
            </li>
            <li>
              <font face="Courier New">1 can creamed corn</font>
            </li>
            <li>
              <font face="Courier New">1 1/2 lb Cod</font>
            </li>
            <li>
              <font face="Courier New">1 1/2 cup water</font>
            </li>
            <li>
              <font face="Courier New">1 pint half-and-half</font>
            </li>
            <li>
              <font face="Courier New">salt, pepper and thyme to taste</font>
            </li>
            <li>
              <font face="Courier New">1 bay leaf</font>
            </li>
          </ul>
        </ul>
        <p>
Cook the onion in the butter until it is transparent.  Throw chopped onion and
liquid butter in the crock-pot along with potatoes, creamed corn, water, cod and spices. 
Cook on low for 4 1/2 to 5 hours and then add the half-and-half.  Cook for another
hour.
</p>
        <p>
I served it with some hushpuppies and an upside-down cake for dessert.  I have
heard that crumbled bacon on top is also tasty.  The cod was a bit pricey at
around $9 a pound at Kroger, and I imagine that tilapia would make a good replacement
– though it wouldn’t fill my literary hunger quite so well.
</p>
        <p>
 
</p>
        <p>
          <font face="Courier New">
          </font>
        </p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=d8d21415-f240-413b-9f1b-0b54d1132898" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Cod Chowder</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,d8d21415-f240-413b-9f1b-0b54d1132898.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/CodChowder.aspx</link>
      <pubDate>Wed, 14 Oct 2009 16:27:08 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="moby-dick" border="0" alt="moby-dick" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/CodChowder_AEF9/moby-dick_3.jpg" width="244" height="244" /&gt; 
&lt;/p&gt;
&lt;p&gt;
Early in Melville’s Moby Dick, Peter Coffin, proprietor of the Spouter Inn, recommends
the Try Pots, an inn known for its chowders and run by Peter Coffin’s cousin Hosea
Hussey, as a good place for a meal.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font face="Courier New"&gt;Fishiest of all fishy places was the Try Pots, which well
deserved its name; for the pots there were always boiling chowders. Chowder for breakfast,
and chowder for dinner, and chowder for supper, till you began to look for fish-bones
coming through your clothes. The area before the house was paved with clam-shells.
Mrs. Hussey wore a polished necklace of codfish vertebra; and Hosea Hussey had his
account books bound in superior old shark-skin. There was a fishy flavor to the milk,
too, which I could not at all account for, till one morning happening to take a stroll
along the beach among some fishermen's boats, I saw Hosea's brindled cow feeding on
fish remnants, and marching along the sand with each foot in a cod's decapitated head,
looking very slip-shod, I assure ye.&lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
The description of the cod chowder at the Try Pots has always captivated me.&amp;#160;
I’m a fan of canned clam chowder and have occasionally had the pleasure of a bowl
of clam chowder at Legal Sea Foods next to the Georgia Aquarium – but cod chowder
has never made its way to my table.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;quot;Come on, Queequeg,&amp;quot; said I, &amp;quot;all right. There's
Mrs. Hussey.&amp;quot; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;And so it turned out; Mr. Hosea Hussey being from home, but
leaving Mrs. Hussey entirely competent to attend to all his affairs. Upon making known
our desires for a supper and a bed, Mrs. Hussey, postponing further scolding for the
present, ushered us into a little room, and seating us at a table spread with the
relics of a recently concluded repast, turned round to us and said—&amp;quot;Clam or Cod?&amp;quot; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;quot;What's that about Cods, ma'am?&amp;quot; said I, with much
politeness. &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;quot;Clam or Cod?&amp;quot; she repeated. &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;quot;A clam for supper? a cold clam; is THAT what you mean,
Mrs. Hussey?&amp;quot; says I, &amp;quot;but that's a rather cold and clammy reception in
the winter time, ain't it, Mrs. Hussey?&amp;quot; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;But being in a great hurry to resume scolding the man in
the purple Shirt, who was waiting for it in the entry, and seeming to hear nothing
but the word &amp;quot;clam,&amp;quot; Mrs. Hussey hurried towards an open door leading to
the kitchen, and bawling out &amp;quot;clam for two,&amp;quot; disappeared. &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;quot;Queequeg,&amp;quot; said I, &amp;quot;do you think that we
can make out a supper for us both on one clam?&amp;quot; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;However, a warm savory steam from the kitchen served to belie
the apparently cheerless prospect before us. But when that smoking chowder came in,
the mystery was delightfully explained. Oh, sweet friends! hearken to me. It was made
of small juicy clams, scarcely bigger than hazel nuts, mixed with pounded ship biscuit,
and salted pork cut up into little flakes; the whole enriched with butter, and plentifully
seasoned with pepper and salt. Our appetites being sharpened by the frosty voyage,
and in particular, Queequeg seeing his favourite fishing food before him, and the
chowder being surpassingly excellent, we despatched it with great expedition: when
leaning back a moment and bethinking me of Mrs. Hussey's clam and cod announcement,
I thought I would try a little experiment. Stepping to the kitchen door, I uttered
the word &amp;quot;cod&amp;quot; with great emphasis, and resumed my seat. In a few moments
the savoury steam came forth again, but with a different flavor, and in good time
a fine cod-chowder was placed before us. &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;We resumed business; and while plying our spoons in the bowl,
thinks I to myself, I wonder now if this here has any effect on the head? What's that
stultifying saying about chowder-headed people? &amp;quot;But look, Queequeg, ain't that
a live eel in your bowl? Where's your harpoon?&amp;quot; &lt;/font&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
We have a crock pot in our kitchen – a repackaged gift from Christmases past – and
I decided to put it to good use this past weekend.&amp;#160; The recipe itself was quite
simple:
&lt;/p&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;font face="Courier New"&gt;1 cup finely chopped onion&lt;/font&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;font face="Courier New"&gt;1 stick butter&lt;/font&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;font face="Courier New"&gt;4 cups diced potato&lt;/font&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;font face="Courier New"&gt;1 can creamed corn&lt;/font&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;font face="Courier New"&gt;1 1/2 lb Cod&lt;/font&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;font face="Courier New"&gt;1 1/2 cup water&lt;/font&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;font face="Courier New"&gt;1 pint half-and-half&lt;/font&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;font face="Courier New"&gt;salt, pepper and thyme to taste&lt;/font&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;font face="Courier New"&gt;1 bay leaf&lt;/font&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;
Cook the onion in the butter until it is transparent.&amp;#160; Throw chopped onion and
liquid butter in the crock-pot along with potatoes, creamed corn, water, cod and spices.&amp;#160;
Cook on low for 4 1/2 to 5 hours and then add the half-and-half.&amp;#160; Cook for another
hour.
&lt;/p&gt;
&lt;p&gt;
I served it with some hushpuppies and an upside-down cake for dessert.&amp;#160; I have
heard that crumbled bacon on top is also tasty.&amp;#160; The cod was a bit pricey at
around $9 a pound at Kroger, and I imagine that tilapia would make a good replacement
– though it wouldn’t fill my literary hunger quite so well.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=d8d21415-f240-413b-9f1b-0b54d1132898" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,d8d21415-f240-413b-9f1b-0b54d1132898.aspx</comments>
      <category>Notes from Terra</category>
      <category>Recipe</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=d47cc894-e187-47fe-a594-8d44e054d243</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,d47cc894-e187-47fe-a594-8d44e054d243.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,d47cc894-e187-47fe-a594-8d44e054d243.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d47cc894-e187-47fe-a594-8d44e054d243</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
C# 4.0 will introduce new language features to help manage covariance and contravariance. 
While this is a a wonderful capability, it forces us to come to terms with these (to
me) somewhat unfamiliar terms.
</p>
        <p>
As I have been working through Eric Lippert’s excellent series of <a href="http://blogs.msdn.com/ericlippert/archive/tags/Covariance+and+Contravariance/default.aspx" target="_blank">posts</a> on
this topic as well as the wikipedia <a href="http://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)" target="_blank">entry</a>,
it has occurred to me that the best way to come to grips with these concepts is to
examine gradually more complex examples of covariance and contravariance as it currently
exists in C# 3.  If this appears to be a rehash of Eric Lippert’s work, this
is probably because it is.  Consequently, any mistakes are purely mine, while
any virtues in this explanation are clearly his.
</p>
        <p>
First, however, it is necessary to learn some vocabulary.
</p>
        <p>
Take the following class hierarchy:
</p>
        <pre class="csharpcode">
          <span class="kwrd">public</span>
          <span class="kwrd">class</span> Animal{} <span class="kwrd">public</span><span class="kwrd">class</span> Mammal
: Animal { } <span class="kwrd">public</span><span class="kwrd">class</span> Tiger
: Mammal { }</pre>
        <p>
We would typically say that Mammal is <em>more derived</em> than Animal.  Mammal,
conversely, is <em>less derived</em> than Tiger in this inheritance chain.
</p>
        <p>
To understand covariance and contravariance, we need to replace <em>more derived</em> and <em>less
derived</em> with the metaphorical terms <em>smaller</em> and <em>bigger</em>.
</p>
        <p>
We do this because <em>more derived</em> and <em>less derived</em> are not adequate
to describe the relation between objects such as arrays of types.
</p>
        <pre class="csharpcode">        Animal[] A;
        Mammal[] M;
        Tiger[] T;</pre>
        <p>
An array of Mammal does not derive from an array of Animal.  Both Mammal[] and
Animal[] are derived from System.Array. There is no inheritance relation, however,
between Mammal[] and Animal[] themselves.  Nevertheless there is obviously some
sort of relation present.  By convention, we call this relation a <em>smaller
than</em> \ <em>greater than</em> relation.  Mammal[] is smaller than Animal[]
because Mammal is more derived than Animal.  It is bigger than Tiger[] because
Mammal is less derived than the type Tiger.
</p>
        <p>
It is worth repeating that <em>smaller</em> and <em>bigger</em> are not the same thing
as the relation between classes in an inheritance hierarchy.  They also do not
have anything directly to do with memory management.  They are pure metaphors.
</p>
        <p>
The C# classes above model concepts.  When we talk about concepts such as <em>animal</em>, <em>mammal</em> and <em>tiger</em>,
we talk about these concepts falling under each other.  Socrates falls under
the concept of man.  Man falls under the concept of an animal (traditionally,
man is defined as a bipedal, hairless animal that laughs; see <a href="http://www.imaginativeuniversal.com/blog/Haecceity.aspx" target="_blank">Haecceity</a>).
</p>
        <p>
Metaphorically, we can think of animal as a bigger concept than mammal because many
more things fall under animal than under mammal.  Tiger, in turn, is a smaller
concept than mammal because so few things fall under it.
</p>
        <p>
Once we have <em>smaller than</em> and <em>bigger than</em> under our belts, we can
start talking about covariance and contravariance.  Covariance and contravariance,
at the most basic level, concerns the assignment of types to variables.
</p>
        <p>
An assignment is <strong>covariant</strong> if we can assign a <em>smaller</em> type
to a <em>bigger</em> type:
</p>
        <p>
          <a href="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/CovarianceandContravarianceIn5Minutes_9BBB/covariance_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="covariance" border="0" alt="covariance" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/CovarianceandContravarianceIn5Minutes_9BBB/covariance_thumb.png" width="244" height="95" />
          </a>
        </p>
        <p>
If we can assign a <em>bigger</em> type to a <em>smaller</em> type, the assignment
is said to be <strong>contravariant:</strong></p>
        <p>
          <a href="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/CovarianceandContravarianceIn5Minutes_9BBB/contravariance_4.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="contravariance" border="0" alt="contravariance" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/CovarianceandContravarianceIn5Minutes_9BBB/contravariance_thumb_1.png" width="244" height="92" />
          </a>
        </p>
        <p>
          <strong>1. Covariance with simple reference types</strong>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
An example will help to illustrate this.  
</p>
        <pre class="csharpcode">    Mammal m = <span class="kwrd">new</span> Tiger(); Animal
a = m; //Tiger t = a; -- will not compile</pre>
        <p>
          <style type="text/css">



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
We can assign a smaller type, Tiger to a variable allocated as a Mammal.  Similarly
we can assign our Mammal instance to a variable allocated as an Animal.  In other
words, in the assignment of simple reference types, we can assign smaller things to
bigger things.  This is a <strong>covariant</strong> relation.
</p>
        <p>
We cannot, however, assign an Animal instance to a Tiger.  The C# compiler just
won’t let us do it, because it will not let us assign something bigger to something
smaller in this case.  The assignment of simple reference types is therefore <em>not</em> covariant.
</p>
        <p>
          <strong>2. Covariance with arrays</strong>
        </p>
        <p>
The C# compiler also happens to allow covariant array assignments.  For instance:
</p>
        <pre class="csharpcode">    Mammal[] M = <span class="kwrd">new</span> Tiger[0]; Animal[]
A = M; //Tiger[] t = A; -- will not compile</pre>
        <style type="text/css">



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        <p>
The compiler doesn’t need to allow this.  It just happens to.  What’s interesting
is that the compiler will not allow us to do the same thing with generic collections.  
</p>
        <p>
          <strong>3. Invariance with generics</strong>
        </p>
        <p>
Assignment of generics is <strong>invariant</strong> in C# 3.
</p>
        <pre class="csharpcode">
          <span class="rem">// List&lt;Mammal&gt; mammals = new
List&lt;Tiger&gt;(); -- will not compile</span>
          <span class="rem">// List&lt;Animal&gt;
animals = mammals; -- will not compile</span>
          <span class="rem">// List&lt;Tiger&gt;
tigers = animals; -- will not compile</span> //</pre>
        <p>
          <strong>4. Covariance with method parameters</strong>
        </p>
        <p>
Parameter assignment also happens to be covariant in C#.  To prove it to yourself,
take the following static method:
</p>
        <pre class="csharpcode">
          <span class="kwrd">public</span>
          <span class="kwrd">static</span>
          <span class="kwrd">void</span> TakeMammal(Mammal
m){}</pre>
        <style type="text/css">



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        <p>
Which of the following operations is permissible in C# and which is not?
</p>
        <pre class="csharpcode">    TakeMammal(<span class="kwrd">new</span> Tiger()); TakeMammal(<span class="kwrd">new</span> Animal());
TakeMammal(<span class="kwrd">new</span> Mammal());</pre>
        <p>
(Note, however, that <strong>ref</strong> and <strong>out</strong> parameters are <em>invariant: <a title="http://blogs.msdn.com/ericlippert/archive/2009/09/21/why-do-ref-and-out-parameters-not-allow-type-variation.aspx" href="http://blogs.msdn.com/ericlippert/archive/2009/09/21/why-do-ref-and-out-parameters-not-allow-type-variation.aspx">http://blogs.msdn.com/ericlippert/archive/2009/09/21/why-do-ref-and-out-parameters-not-allow-type-variation.aspx</a> .)</em></p>
        <p>
          <strong>5. Delegate contravariance with respect to inputs<style type="text/css">



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style></strong>
        </p>
        <p>
Understanding this characteristic of parameter assignments is important in order to
demonstrate how contravariance occurs in C#.  In C#, delegate assignments are
contravariant with respect to inputs.  Consider this code:
</p>
        <pre class="csharpcode">
          <span class="kwrd">public</span>
          <span class="kwrd">static</span>
          <span class="kwrd">void</span> TakeAnimal(Animal
a) {} <span class="kwrd">public</span><span class="kwrd">static</span><span class="kwrd">void</span> TakeMammal(Mammal
m){} <span class="kwrd">public</span><span class="kwrd">static</span><span class="kwrd">void</span> TakeTiger(Tiger
t) {} <span class="kwrd">public</span><span class="kwrd">delegate</span><span class="kwrd">void</span> MammalHandler(Mammal
m); MammalHandler funcA = TakeAnimal; <span class="rem">//OK</span> MammalHandler
funcM = TakeMammal; <span class="rem">//OK</span> MammalHandler funcT = TakeTiger; <span class="rem">//No!</span> funcA(<span class="kwrd">new</span> Mammal()); <span class="rem">//OK</span> funcM(<span class="kwrd">new</span> Mammal()); <span class="rem">//OK</span> funcT(<span class="kwrd">new</span> Mammal()); <span class="rem">//No!</span></pre>
        <p>
          <style type="text/css">



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
The delegate method MammalHandler is designed to only take the Mammal type as input. 
Any delegate instance – funcA, funcM, funcT – in turn may be passed Mammal objects. 
If we pass a Mammal to delegate instance funcA, it ultimately gets passed to our TakeAnimal
method.  Since parameter assignments – as we showed above – are covariant, passing
a Mammal to TakeAnimal is permissible.  Obviously passing a Mammal to TakeMammal
is also permissible.
</p>
        <p>
We cannot, however, pass a Mammal to TakeTiger.  The C# compiler does not allow
this.
</p>
        <p>
Consequently, we also cannot assign TakeTiger to our MammalHandler delegate. 
Assigning TakeTiger to funcT is illegal.
</p>
        <p>
But in this impermissible delegate assignment, which thing is <em>bigger</em>: MammalHandler
or TakeTiger?  MammalHandler, right?  With regard to delegate assignments,
then, we are saying that assigning something smaller to something bigger is not allowed. 
Assigning something bigger to something smaller, however, <em>is</em> permissible.
</p>
        <p>
Delegate assignments like those above are therefore <strong>contravariant</strong>.
</p>
        <p>
          <strong>6. Delegate covariance with respect to return types</strong>
        </p>
        <p>
I say “like those above” because this is actually true only with respect to delegate
inputs.  Delegates can also, of course, return objects – and when they do, this
is a covariant relation.  <strong>Delegate assignments are said to be contravariant
with respect to inputs, but covariant with respect to return types</strong>. 
You can prove this to yourself by looking through the following code in which the
delegate signature has a return value but no parameters.
</p>
        <p>
 
</p>
        <pre class="csharpcode">
          <p>
            <span class="kwrd"> public</span>
            <span class="kwrd">static</span> Animal GetAnimal()
{} <span class="kwrd">public</span><span class="kwrd">static</span> Mammal GetMammal(){} <span class="kwrd">public</span><span class="kwrd">static</span> Tiger
GetTiger() {} <span class="kwrd"> public</span><span class="kwrd">delegate</span> Mammal
GetMammalDelegate(); GetMammalDelegate funcA = GetAnimal; <span class="rem">// No!</span> GetMammalDelegate
funcM = GetMammal; <span class="rem">// OK</span> GetMammalDelegate funcT = GetTiger; <span class="rem">//
OK</span></p>
          <p>
 
</p>
          <p>
 
</p>
        </pre>
        <p>
 
</p>
        <p>
So why is this important for understanding C# 4.0?  As we briefly covered above,
C# 3 has this peculiar characteristic in that the compiler treats array assignments
as covariant operations, but treats the generic assignment of List&lt;T&gt; as an
invariant operation. This is obviously a little weird.  In C# 4.0, there will
be support for covariance and contravariance in generic interfaces which will allow
us to specify how we want our generics to behave – for instance, a special kind of
covariant IEnumerable&lt;out T&gt; could be implemented that would provide the sort
of covariance now supported for arrays.<style type="text/css">



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style></p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=d47cc894-e187-47fe-a594-8d44e054d243" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Covariance and Contravariance In 5 Minutes</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,d47cc894-e187-47fe-a594-8d44e054d243.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/CovarianceAndContravarianceIn5Minutes.aspx</link>
      <pubDate>Thu, 08 Oct 2009 15:59:17 GMT</pubDate>
      <description>&lt;p&gt;
C# 4.0 will introduce new language features to help manage covariance and contravariance.&amp;#160;
While this is a a wonderful capability, it forces us to come to terms with these (to
me) somewhat unfamiliar terms.
&lt;/p&gt;
&lt;p&gt;
As I have been working through Eric Lippert’s excellent series of &lt;a href="http://blogs.msdn.com/ericlippert/archive/tags/Covariance+and+Contravariance/default.aspx" target="_blank"&gt;posts&lt;/a&gt; on
this topic as well as the wikipedia &lt;a href="http://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)" target="_blank"&gt;entry&lt;/a&gt;,
it has occurred to me that the best way to come to grips with these concepts is to
examine gradually more complex examples of covariance and contravariance as it currently
exists in C# 3.&amp;#160; If this appears to be a rehash of Eric Lippert’s work, this
is probably because it is.&amp;#160; Consequently, any mistakes are purely mine, while
any virtues in this explanation are clearly his.
&lt;/p&gt;
&lt;p&gt;
First, however, it is necessary to learn some vocabulary.
&lt;/p&gt;
&lt;p&gt;
Take the following class hierarchy:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Animal{} &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Mammal
: Animal { } &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Tiger
: Mammal { }&lt;/pre&gt;
&lt;p&gt;
We would typically say that Mammal is &lt;em&gt;more derived&lt;/em&gt; than Animal.&amp;#160; Mammal,
conversely, is &lt;em&gt;less derived&lt;/em&gt; than Tiger in this inheritance chain.
&lt;/p&gt;
&lt;p&gt;
To understand covariance and contravariance, we need to replace &lt;em&gt;more derived&lt;/em&gt; and &lt;em&gt;less
derived&lt;/em&gt; with the metaphorical terms &lt;em&gt;smaller&lt;/em&gt; and &lt;em&gt;bigger&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
We do this because &lt;em&gt;more derived&lt;/em&gt; and &lt;em&gt;less derived&lt;/em&gt; are not adequate
to describe the relation between objects such as arrays of types.
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;        Animal[] A;
        Mammal[] M;
        Tiger[] T;&lt;/pre&gt;
&lt;p&gt;
An array of Mammal does not derive from an array of Animal.&amp;#160; Both Mammal[] and
Animal[] are derived from System.Array. There is no inheritance relation, however,
between Mammal[] and Animal[] themselves.&amp;#160; Nevertheless there is obviously some
sort of relation present.&amp;#160; By convention, we call this relation a &lt;em&gt;smaller
than&lt;/em&gt; \ &lt;em&gt;greater than&lt;/em&gt; relation.&amp;#160; Mammal[] is smaller than Animal[]
because Mammal is more derived than Animal.&amp;#160; It is bigger than Tiger[] because
Mammal is less derived than the type Tiger.
&lt;/p&gt;
&lt;p&gt;
It is worth repeating that &lt;em&gt;smaller&lt;/em&gt; and &lt;em&gt;bigger&lt;/em&gt; are not the same thing
as the relation between classes in an inheritance hierarchy.&amp;#160; They also do not
have anything directly to do with memory management.&amp;#160; They are pure metaphors.
&lt;/p&gt;
&lt;p&gt;
The C# classes above model concepts.&amp;#160; When we talk about concepts such as &lt;em&gt;animal&lt;/em&gt;, &lt;em&gt;mammal&lt;/em&gt; and &lt;em&gt;tiger&lt;/em&gt;,
we talk about these concepts falling under each other.&amp;#160; Socrates falls under
the concept of man.&amp;#160; Man falls under the concept of an animal (traditionally,
man is defined as a bipedal, hairless animal that laughs; see &lt;a href="http://www.imaginativeuniversal.com/blog/Haecceity.aspx" target="_blank"&gt;Haecceity&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
Metaphorically, we can think of animal as a bigger concept than mammal because many
more things fall under animal than under mammal.&amp;#160; Tiger, in turn, is a smaller
concept than mammal because so few things fall under it.
&lt;/p&gt;
&lt;p&gt;
Once we have &lt;em&gt;smaller than&lt;/em&gt; and &lt;em&gt;bigger than&lt;/em&gt; under our belts, we can
start talking about covariance and contravariance.&amp;#160; Covariance and contravariance,
at the most basic level, concerns the assignment of types to variables.
&lt;/p&gt;
&lt;p&gt;
An assignment is &lt;strong&gt;covariant&lt;/strong&gt; if we can assign a &lt;em&gt;smaller&lt;/em&gt; type
to a &lt;em&gt;bigger&lt;/em&gt; type:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/CovarianceandContravarianceIn5Minutes_9BBB/covariance_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="covariance" border="0" alt="covariance" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/CovarianceandContravarianceIn5Minutes_9BBB/covariance_thumb.png" width="244" height="95" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
If we can assign a &lt;em&gt;bigger&lt;/em&gt; type to a &lt;em&gt;smaller&lt;/em&gt; type, the assignment
is said to be &lt;strong&gt;contravariant:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/CovarianceandContravarianceIn5Minutes_9BBB/contravariance_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="contravariance" border="0" alt="contravariance" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/CovarianceandContravarianceIn5Minutes_9BBB/contravariance_thumb_1.png" width="244" height="92" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;1. Covariance with simple reference types&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
An example will help to illustrate this.&amp;#160; 
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    Mammal m = &lt;span class="kwrd"&gt;new&lt;/span&gt; Tiger(); Animal
a = m; //Tiger t = a; -- will not compile&lt;/pre&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
We can assign a smaller type, Tiger to a variable allocated as a Mammal.&amp;#160; Similarly
we can assign our Mammal instance to a variable allocated as an Animal.&amp;#160; In other
words, in the assignment of simple reference types, we can assign smaller things to
bigger things.&amp;#160; This is a &lt;strong&gt;covariant&lt;/strong&gt; relation.
&lt;/p&gt;
&lt;p&gt;
We cannot, however, assign an Animal instance to a Tiger.&amp;#160; The C# compiler just
won’t let us do it, because it will not let us assign something bigger to something
smaller in this case.&amp;#160; The assignment of simple reference types is therefore &lt;em&gt;not&lt;/em&gt; covariant.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2. Covariance with arrays&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The C# compiler also happens to allow covariant array assignments.&amp;#160; For instance:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    Mammal[] M = &lt;span class="kwrd"&gt;new&lt;/span&gt; Tiger[0]; Animal[]
A = M; //Tiger[] t = A; -- will not compile&lt;/pre&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;p&gt;
The compiler doesn’t need to allow this.&amp;#160; It just happens to.&amp;#160; What’s interesting
is that the compiler will not allow us to do the same thing with generic collections.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;3. Invariance with generics&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Assignment of generics is &lt;strong&gt;invariant&lt;/strong&gt; in C# 3.
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="rem"&gt;// List&amp;lt;Mammal&amp;gt; mammals = new
List&amp;lt;Tiger&amp;gt;(); -- will not compile&lt;/span&gt; &lt;span class="rem"&gt;// List&amp;lt;Animal&amp;gt;
animals = mammals; -- will not compile&lt;/span&gt; &lt;span class="rem"&gt;// List&amp;lt;Tiger&amp;gt;
tigers = animals; -- will not compile&lt;/span&gt; //&lt;/pre&gt;
&lt;p&gt;
&lt;strong&gt;4. Covariance with method parameters&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Parameter assignment also happens to be covariant in C#.&amp;#160; To prove it to yourself,
take the following static method:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;     &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TakeMammal(Mammal
m){}&lt;/pre&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;p&gt;
Which of the following operations is permissible in C# and which is not?
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    TakeMammal(&lt;span class="kwrd"&gt;new&lt;/span&gt; Tiger()); TakeMammal(&lt;span class="kwrd"&gt;new&lt;/span&gt; Animal());
TakeMammal(&lt;span class="kwrd"&gt;new&lt;/span&gt; Mammal());&lt;/pre&gt;
&lt;p&gt;
(Note, however, that &lt;strong&gt;ref&lt;/strong&gt; and &lt;strong&gt;out&lt;/strong&gt; parameters are &lt;em&gt;invariant: &lt;a title="http://blogs.msdn.com/ericlippert/archive/2009/09/21/why-do-ref-and-out-parameters-not-allow-type-variation.aspx" href="http://blogs.msdn.com/ericlippert/archive/2009/09/21/why-do-ref-and-out-parameters-not-allow-type-variation.aspx"&gt;http://blogs.msdn.com/ericlippert/archive/2009/09/21/why-do-ref-and-out-parameters-not-allow-type-variation.aspx&lt;/a&gt; .)&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;5. Delegate contravariance with respect to inputs&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Understanding this characteristic of parameter assignments is important in order to
demonstrate how contravariance occurs in C#.&amp;#160; In C#, delegate assignments are
contravariant with respect to inputs.&amp;#160; Consider this code:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TakeAnimal(Animal
a) {} &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TakeMammal(Mammal
m){} &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TakeTiger(Tiger
t) {} &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;delegate&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; MammalHandler(Mammal
m); MammalHandler funcA = TakeAnimal; &lt;span class="rem"&gt;//OK&lt;/span&gt; MammalHandler
funcM = TakeMammal; &lt;span class="rem"&gt;//OK&lt;/span&gt; MammalHandler funcT = TakeTiger; &lt;span class="rem"&gt;//No!&lt;/span&gt; funcA(&lt;span class="kwrd"&gt;new&lt;/span&gt; Mammal()); &lt;span class="rem"&gt;//OK&lt;/span&gt; funcM(&lt;span class="kwrd"&gt;new&lt;/span&gt; Mammal()); &lt;span class="rem"&gt;//OK&lt;/span&gt; funcT(&lt;span class="kwrd"&gt;new&lt;/span&gt; Mammal()); &lt;span class="rem"&gt;//No!&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
The delegate method MammalHandler is designed to only take the Mammal type as input.&amp;#160;
Any delegate instance – funcA, funcM, funcT – in turn may be passed Mammal objects.&amp;#160;
If we pass a Mammal to delegate instance funcA, it ultimately gets passed to our TakeAnimal
method.&amp;#160; Since parameter assignments – as we showed above – are covariant, passing
a Mammal to TakeAnimal is permissible.&amp;#160; Obviously passing a Mammal to TakeMammal
is also permissible.
&lt;/p&gt;
&lt;p&gt;
We cannot, however, pass a Mammal to TakeTiger.&amp;#160; The C# compiler does not allow
this.
&lt;/p&gt;
&lt;p&gt;
Consequently, we also cannot assign TakeTiger to our MammalHandler delegate.&amp;#160;
Assigning TakeTiger to funcT is illegal.
&lt;/p&gt;
&lt;p&gt;
But in this impermissible delegate assignment, which thing is &lt;em&gt;bigger&lt;/em&gt;: MammalHandler
or TakeTiger?&amp;#160; MammalHandler, right?&amp;#160; With regard to delegate assignments,
then, we are saying that assigning something smaller to something bigger is not allowed.&amp;#160;
Assigning something bigger to something smaller, however, &lt;em&gt;is&lt;/em&gt; permissible.
&lt;/p&gt;
&lt;p&gt;
Delegate assignments like those above are therefore &lt;strong&gt;contravariant&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;6. Delegate covariance with respect to return types&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I say “like those above” because this is actually true only with respect to delegate
inputs.&amp;#160; Delegates can also, of course, return objects – and when they do, this
is a covariant relation.&amp;#160; &lt;strong&gt;Delegate assignments are said to be contravariant
with respect to inputs, but covariant with respect to return types&lt;/strong&gt;.&amp;#160;
You can prove this to yourself by looking through the following code in which the
delegate signature has a return value but no parameters.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;
&lt;p&gt;
&lt;span class="kwrd"&gt; public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Animal GetAnimal()
{} &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Mammal GetMammal(){} &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Tiger
GetTiger() {} &lt;span class="kwrd"&gt; public&lt;/span&gt; &lt;span class="kwrd"&gt;delegate&lt;/span&gt; Mammal
GetMammalDelegate(); GetMammalDelegate funcA = GetAnimal; &lt;span class="rem"&gt;// No!&lt;/span&gt; GetMammalDelegate
funcM = GetMammal; &lt;span class="rem"&gt;// OK&lt;/span&gt; GetMammalDelegate funcT = GetTiger; &lt;span class="rem"&gt;//
OK&lt;/span&gt; 
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;/pre&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
So why is this important for understanding C# 4.0?&amp;#160; As we briefly covered above,
C# 3 has this peculiar characteristic in that the compiler treats array assignments
as covariant operations, but treats the generic assignment of List&amp;lt;T&amp;gt; as an
invariant operation. This is obviously a little weird.&amp;#160; In C# 4.0, there will
be support for covariance and contravariance in generic interfaces which will allow
us to specify how we want our generics to behave – for instance, a special kind of
covariant IEnumerable&amp;lt;out T&amp;gt; could be implemented that would provide the sort
of covariance now supported for arrays.&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=d47cc894-e187-47fe-a594-8d44e054d243" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,d47cc894-e187-47fe-a594-8d44e054d243.aspx</comments>
      <category>.NET 4.0</category>
      <category>C#</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=fe94e0c4-331a-4f49-b5ad-b1ddf309541b</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,fe94e0c4-331a-4f49-b5ad-b1ddf309541b.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,fe94e0c4-331a-4f49-b5ad-b1ddf309541b.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fe94e0c4-331a-4f49-b5ad-b1ddf309541b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This post examines how the new <a href="http://msdn.microsoft.com/en-us/library/dd642331(VS.100).aspx" target="_blank">Lazy&lt;T&gt;</a> type
can improve standard implementations of the Singleton pattern in C#.
</p>
        <p>
I will ignore for the moment the common jeremiads against the Singleton pattern and
the reports made by some latter-day design pattern nihilists that the Singleton is
dead.   I do not mean to imply that <a href="http://steve.yegge.googlepages.com/singleton-considered-stupid" target="_blank">they</a> are
wrong – it’s just that it galls me that the Singleton pattern should be the object
of such scorn and ridicule when the Flyweight is allowed to go along its merry way.
</p>
        <p>
Besides which, the Singleton and the Facade are the only patterns I can write from
memory and without a lot of research, so I love ‘em.
</p>
        <p>
The best source for design patterns in C# is probably Judith Bishop’s <a href="http://www.amazon.com/3-0-Design-Patterns-Judith-Bishop/dp/059652773X/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1254433019&amp;sr=8-1" target="_blank">C#
3.0 Design Patterns</a> published by O’Reilly Press, which provides C# versions of
all <a href="http://www.imaginativeuniversal.com/blog/WhatIsServiceOrientedArchitecture.aspx" target="_blank">23</a> patterns
from the Gang of Four’s <a href="http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612" target="_blank">Elements
of Reusable Object-Oriented Software</a>.  The elegant implementation of the
Singleton pattern she recommends looks like this:
</p>
        <p>
 
</p>
        <pre class="csharpcode">
          <span class="kwrd">public</span>
          <span class="kwrd">sealed</span>
          <span class="kwrd">class</span> Singleton
{ <span class="rem">// Private Constructor</span> Singleton( ) { } <span class="rem">//
Private object instantiated with private constructor</span><span class="kwrd">static</span><span class="kwrd">readonly</span> Singleton
instance = <span class="kwrd">new</span> Singleton( ); <span class="rem">// Public
static property to get the object</span><span class="kwrd">public</span><span class="kwrd">static</span> Singleton
Instance { get { <span class="kwrd">return</span> instance;} } }</pre>
        <p>
          <style type="text/css">



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        </p>
        <p>
There is a problem with this, however.  Because of the way classes with static
methods work in C# (or in this case, a static property), type instantiation of the
private Singleton field <strong>instance</strong> happens at an unexpected point. 
For an interesting if somewhat dense read on the effect of the <em>beforeFieldInit</em> flag,
go <a href="http://dotnetsolutions-technicalsolutions.blogspot.com/2008/01/c-and-beforefieldinit.html" target="_blank">here</a>.
</p>
        <p>
I will simply demonstrate the problem by adding some tracking code to Judith Bishop’s
recommended implementation:
</p>
        <pre class="csharpcode">
          <span class="kwrd">public</span>
          <span class="kwrd">sealed</span>
          <span class="kwrd">class</span> Singleton
{ <span class="kwrd">private</span><span class="kwrd">static</span><span class="kwrd">readonly</span> Singleton
instance = <span class="kwrd">new</span> Singleton(); <span class="kwrd">private</span> Singleton()
{ <span class="rem">// no default constructor</span> Console.WriteLine(<span class="str">"
&gt;&gt; singleton initialized"</span>); } <span class="kwrd">public</span><span class="kwrd">static</span> Singleton
Instance { get { Console.WriteLine(<span class="str">"before singleton retrieval"</span>); <span class="kwrd">return</span> instance;
} } }</pre>
        <p>
          <style type="text/css">



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
I will retrieve an instance of this <strong>Singleton</strong> class from a console
application like so:
</p>
        <pre class="csharpcode">
          <span class="kwrd">class</span> Program { <span class="kwrd">static</span><span class="kwrd">void</span> Main(<span class="kwrd">string</span>[]
args) { Console.WriteLine(<span class="str">"Calling Singleton instance"</span>);
var s = Singleton.Instance; Console.WriteLine(<span class="str">"Finished calling
Singleton instance"</span>); Console.ReadLine(); } }</pre>
When will the private type be initialized? When will the private constructor be called? 
In w<style type="text/css">



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
hat order do you think the Console.WriteLines will be invoked? 
<p>
Ideally the static members of this class would be initialized only when we needed
them, and the output would be:
</p><ol><li>
Calling Singleton instance 
</li><li>
before singleton retrieval 
</li><li>
&gt;&gt; singleton initialized 
</li><li>
Finished calling Singleton instance 
</li></ol><p>
In actuality, however, this is the result:
</p><p><a href="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ALazierSingletonwith.NET4.0_10599/singlton_results_1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="singlton_results_1" border="0" alt="singlton_results_1" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ALazierSingletonwith.NET4.0_10599/singlton_results_1_thumb.png" width="320" height="99" /></a></p><p><em>This is not so bad</em>, you may be thinking.  If our singleton is a large
object this creates some additional strain to the system – but as long as the Singleton
instance gets used fairly soon after it is instantiated it’s no big deal.
</p><p>
However, what if I come in after you have coded the singleton and decide to add another
static method to your class -- not understanding the intricate details of <em>beforeFieldInit
–</em> like this:
</p><pre class="csharpcode"><span class="kwrd">public</span><span class="kwrd">static</span><span class="kwrd">void</span> Test()
{ Console.WriteLine(<span class="str">"testing singleton"</span>); }</pre><p>
 
</p><p>
and rewrote the calling code like this:
</p><pre class="csharpcode">            Console.WriteLine(<span class="str">"Calling
Singleton test method"</span>); Singleton.Test(); Console.WriteLine(<span class="str">"Calling
Singleton instance"</span>); var s = Singleton.Instance; Console.WriteLine(<span class="str">"Finished
calling Singleton instance"</span>); Console.ReadLine();</pre><p>
 
</p><p>
It may not be immediately obvious but I have seriously messed up your code. 
Here is the output:
</p><p><style type="text/css">



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style></p><p><a href="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ALazierSingletonwith.NET4.0_10599/singlton_results_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="singlton_results_2" border="0" alt="singlton_results_2" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ALazierSingletonwith.NET4.0_10599/singlton_results_2_thumb.png" width="313" height="99" /></a></p><p>
Even if we never retrieve the Singleton instance, it will still be initialized when
any other static method on our type is called – this is commonly known as a language
runtime bummer.
</p><p>
.NET 4.0 introduces a new generic type called <strong><a href="http://msdn.microsoft.com/en-us/library/dd642331(VS.100).aspx" target="_blank">Lazy&lt;T&gt;</a></strong> which
helps us out of this dilemma.  <strong>Lazy&lt;T&gt;</strong> is a wrapper class
that facilitates thread safe, lazy instantiation of objects.  We can use it to
create a new Singleton implementation that replaces the private static <strong>Singleton</strong> instance
with a private static <strong>Lazy&lt;Singleton&gt;</strong>  instance. 
The Instance property will also require a small rewrite to pull our Singleton out
of the Lazy wrapper.
</p><p>
The full implementation of the lazy version of the singleton looks like this:
</p><pre class="csharpcode"><span class="kwrd">public</span><span class="kwrd">sealed</span><span class="kwrd">class</span> LazySingleton
{ <span class="rem">// Private object with lazy instantiation</span><span class="kwrd">private</span><span class="kwrd">static</span><span class="kwrd">readonly</span> Lazy&lt;LazySingleton&gt;
instance = <span class="kwrd">new</span> Lazy&lt;LazySingleton&gt;( <span class="kwrd">delegate</span> { <span class="kwrd">return</span><span class="kwrd">new</span> LazySingleton();
} <span class="rem">//thread safety first</span> ,LazyExecutionMode.EnsureSingleThreadSafeExecution); <span class="kwrd">private</span> LazySingleton()
{ <span class="rem">// no public default constructor</span> } <span class="rem">//
static instance property</span><span class="kwrd">public</span><span class="kwrd">static</span> LazySingleton
Instance { get{ <span class="kwrd">return</span> instance.Value; } } }</pre><style type="text/css">

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style><style type="text/css">

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style><p>
Some things of note:
</p><p>
1. I pass a delegate as the first parameter to the <strong>Lazy</strong> constructor.
There is a no parameter constructor for the generic Lazy&lt;T&gt; class, but it requires
that type <strong>T</strong> have a public default constructor – which I obviously
do not want to provide.  The delegate parameter allows me to indicate that I
want to use a different constructor – in order to pass a constructor parameter to
Type <strong>T</strong>, for instance, or to invoke a private constructor, in this
case – than the default.  
</p><p>
2. The second parameter, also optional, tells the Lazy instance that I want the lazy
instantiation of type <strong>T</strong> to be thread safe.
</p><p>
3. I retrieve the wrapped type T by asking for the Lazy type’s <em>Value</em> property.
</p><p>
Now it’s time for a contest. I add some Console.WriteLine statements as in the original
and I append the malicious static Test() method as in the original.  I rewrite
my Console app code to call my original Singleton code and then the new and improved
-- .NET 4.0 enhanced -- Lazy Singleton code: 
</p><pre class="csharpcode">    Console.WriteLine(<span class="str">"Calling Singleton
test method"</span>); Singleton.Test(); Console.WriteLine(<span class="str">"Calling
Singleton instance"</span>); var s = Singleton.Instance; Console.WriteLine(<span class="str">"Finished
calling Singleton instance"</span>); Console.WriteLine(); Console.WriteLine(<span class="str">"Calling
Lazy Singleton test method"</span>); LazySingleton.Test(); Console.WriteLine(<span class="str">"Calling
Lazy Singleton instance"</span>); var lazyS = LazySingleton.Instance; Console.WriteLine(<span class="str">"Finished
calling Lazy Singleton instance"</span>); Console.ReadLine();</pre><style type="text/css">

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style><p>
and get the following, very pleasing, results:
</p><p><a href="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ALazierSingletonwith.NET4.0_10599/singlton_results_3.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="singlton_results_3" border="0" alt="singlton_results_3" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ALazierSingletonwith.NET4.0_10599/singlton_results_3_thumb.png" width="349" height="165" /></a></p><p>
Now that’s lazy!
</p><img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=fe94e0c4-331a-4f49-b5ad-b1ddf309541b" /><br /><hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>A Lazier Singleton with .NET 4.0</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,fe94e0c4-331a-4f49-b5ad-b1ddf309541b.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/ALazierSingletonWithNET40.aspx</link>
      <pubDate>Thu, 01 Oct 2009 23:03:22 GMT</pubDate>
      <description>&lt;p&gt;
This post examines how the new &lt;a href="http://msdn.microsoft.com/en-us/library/dd642331(VS.100).aspx" target="_blank"&gt;Lazy&amp;lt;T&amp;gt;&lt;/a&gt; type
can improve standard implementations of the Singleton pattern in C#.
&lt;/p&gt;
&lt;p&gt;
I will ignore for the moment the common jeremiads against the Singleton pattern and
the reports made by some latter-day design pattern nihilists that the Singleton is
dead.&amp;#160;&amp;#160; I do not mean to imply that &lt;a href="http://steve.yegge.googlepages.com/singleton-considered-stupid" target="_blank"&gt;they&lt;/a&gt; are
wrong – it’s just that it galls me that the Singleton pattern should be the object
of such scorn and ridicule when the Flyweight is allowed to go along its merry way.
&lt;/p&gt;
&lt;p&gt;
Besides which, the Singleton and the Facade are the only patterns I can write from
memory and without a lot of research, so I love ‘em.
&lt;/p&gt;
&lt;p&gt;
The best source for design patterns in C# is probably Judith Bishop’s &lt;a href="http://www.amazon.com/3-0-Design-Patterns-Judith-Bishop/dp/059652773X/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1254433019&amp;amp;sr=8-1" target="_blank"&gt;C#
3.0 Design Patterns&lt;/a&gt; published by O’Reilly Press, which provides C# versions of
all &lt;a href="http://www.imaginativeuniversal.com/blog/WhatIsServiceOrientedArchitecture.aspx" target="_blank"&gt;23&lt;/a&gt; patterns
from the Gang of Four’s &lt;a href="http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612" target="_blank"&gt;Elements
of Reusable Object-Oriented Software&lt;/a&gt;.&amp;#160; The elegant implementation of the
Singleton pattern she recommends looks like this:
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;sealed&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Singleton
{ &lt;span class="rem"&gt;// Private Constructor&lt;/span&gt; Singleton( ) { } &lt;span class="rem"&gt;//
Private object instantiated with private constructor&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; Singleton
instance = &lt;span class="kwrd"&gt;new&lt;/span&gt; Singleton( ); &lt;span class="rem"&gt;// Public
static property to get the object&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Singleton
Instance { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; instance;} } }&lt;/pre&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/p&gt;
&lt;p&gt;
There is a problem with this, however.&amp;#160; Because of the way classes with static
methods work in C# (or in this case, a static property), type instantiation of the
private Singleton field &lt;strong&gt;instance&lt;/strong&gt; happens at an unexpected point.&amp;#160;
For an interesting if somewhat dense read on the effect of the &lt;em&gt;beforeFieldInit&lt;/em&gt; flag,
go &lt;a href="http://dotnetsolutions-technicalsolutions.blogspot.com/2008/01/c-and-beforefieldinit.html" target="_blank"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
I will simply demonstrate the problem by adding some tracking code to Judith Bishop’s
recommended implementation:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;sealed&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Singleton
{ &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; Singleton
instance = &lt;span class="kwrd"&gt;new&lt;/span&gt; Singleton(); &lt;span class="kwrd"&gt;private&lt;/span&gt; Singleton()
{ &lt;span class="rem"&gt;// no default constructor&lt;/span&gt; Console.WriteLine(&lt;span class="str"&gt;&amp;quot;
&amp;gt;&amp;gt; singleton initialized&amp;quot;&lt;/span&gt;); } &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; Singleton
Instance { get { Console.WriteLine(&lt;span class="str"&gt;&amp;quot;before singleton retrieval&amp;quot;&lt;/span&gt;); &lt;span class="kwrd"&gt;return&lt;/span&gt; instance;
} } }&lt;/pre&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
I will retrieve an instance of this &lt;strong&gt;Singleton&lt;/strong&gt; class from a console
application like so:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;class&lt;/span&gt; Program { &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[]
args) { Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Calling Singleton instance&amp;quot;&lt;/span&gt;);
var s = Singleton.Instance; Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Finished calling
Singleton instance&amp;quot;&lt;/span&gt;); Console.ReadLine(); } }&lt;/pre&gt;
When will the private type be initialized? When will the private constructor be called?&amp;#160;
In w&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
hat order do you think the Console.WriteLines will be invoked? 
&lt;p&gt;
Ideally the static members of this class would be initialized only when we needed
them, and the output would be:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Calling Singleton instance 
&lt;/li&gt;
&lt;li&gt;
before singleton retrieval 
&lt;/li&gt;
&lt;li&gt;
&amp;gt;&amp;gt; singleton initialized 
&lt;/li&gt;
&lt;li&gt;
Finished calling Singleton instance 
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
In actuality, however, this is the result:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ALazierSingletonwith.NET4.0_10599/singlton_results_1.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="singlton_results_1" border="0" alt="singlton_results_1" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ALazierSingletonwith.NET4.0_10599/singlton_results_1_thumb.png" width="320" height="99" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;This is not so bad&lt;/em&gt;, you may be thinking.&amp;#160; If our singleton is a large
object this creates some additional strain to the system – but as long as the Singleton
instance gets used fairly soon after it is instantiated it’s no big deal.
&lt;/p&gt;
&lt;p&gt;
However, what if I come in after you have coded the singleton and decide to add another
static method to your class -- not understanding the intricate details of &lt;em&gt;beforeFieldInit
–&lt;/em&gt; like this:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Test()
{ Console.WriteLine(&lt;span class="str"&gt;&amp;quot;testing singleton&amp;quot;&lt;/span&gt;); }&lt;/pre&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
and rewrote the calling code like this:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Calling
Singleton test method&amp;quot;&lt;/span&gt;); Singleton.Test(); Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Calling
Singleton instance&amp;quot;&lt;/span&gt;); var s = Singleton.Instance; Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Finished
calling Singleton instance&amp;quot;&lt;/span&gt;); Console.ReadLine();&lt;/pre&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
It may not be immediately obvious but I have seriously messed up your code.&amp;#160;
Here is the output:
&lt;/p&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;



.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ALazierSingletonwith.NET4.0_10599/singlton_results_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="singlton_results_2" border="0" alt="singlton_results_2" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ALazierSingletonwith.NET4.0_10599/singlton_results_2_thumb.png" width="313" height="99" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Even if we never retrieve the Singleton instance, it will still be initialized when
any other static method on our type is called – this is commonly known as a language
runtime bummer.
&lt;/p&gt;
&lt;p&gt;
.NET 4.0 introduces a new generic type called &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd642331(VS.100).aspx" target="_blank"&gt;Lazy&amp;lt;T&amp;gt;&lt;/a&gt;&lt;/strong&gt; which
helps us out of this dilemma.&amp;#160; &lt;strong&gt;Lazy&amp;lt;T&amp;gt;&lt;/strong&gt; is a wrapper class
that facilitates thread safe, lazy instantiation of objects.&amp;#160; We can use it to
create a new Singleton implementation that replaces the private static &lt;strong&gt;Singleton&lt;/strong&gt; instance
with a private static &lt;strong&gt;Lazy&amp;lt;Singleton&amp;gt;&lt;/strong&gt;&amp;#160; instance.&amp;#160;
The Instance property will also require a small rewrite to pull our Singleton out
of the Lazy wrapper.
&lt;/p&gt;
&lt;p&gt;
The full implementation of the lazy version of the singleton looks like this:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;sealed&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; LazySingleton
{ &lt;span class="rem"&gt;// Private object with lazy instantiation&lt;/span&gt; &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;readonly&lt;/span&gt; Lazy&amp;lt;LazySingleton&amp;gt;
instance = &lt;span class="kwrd"&gt;new&lt;/span&gt; Lazy&amp;lt;LazySingleton&amp;gt;( &lt;span class="kwrd"&gt;delegate&lt;/span&gt; { &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; LazySingleton();
} &lt;span class="rem"&gt;//thread safety first&lt;/span&gt; ,LazyExecutionMode.EnsureSingleThreadSafeExecution); &lt;span class="kwrd"&gt;private&lt;/span&gt; LazySingleton()
{ &lt;span class="rem"&gt;// no public default constructor&lt;/span&gt; } &lt;span class="rem"&gt;//
static instance property&lt;/span&gt; &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; LazySingleton
Instance { get{ &lt;span class="kwrd"&gt;return&lt;/span&gt; instance.Value; } } }&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;p&gt;
Some things of note:
&lt;/p&gt;
&lt;p&gt;
1. I pass a delegate as the first parameter to the &lt;strong&gt;Lazy&lt;/strong&gt; constructor.
There is a no parameter constructor for the generic Lazy&amp;lt;T&amp;gt; class, but it requires
that type &lt;strong&gt;T&lt;/strong&gt; have a public default constructor – which I obviously
do not want to provide.&amp;#160; The delegate parameter allows me to indicate that I
want to use a different constructor – in order to pass a constructor parameter to
Type &lt;strong&gt;T&lt;/strong&gt;, for instance, or to invoke a private constructor, in this
case – than the default.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
2. The second parameter, also optional, tells the Lazy instance that I want the lazy
instantiation of type &lt;strong&gt;T&lt;/strong&gt; to be thread safe.
&lt;/p&gt;
&lt;p&gt;
3. I retrieve the wrapped type T by asking for the Lazy type’s &lt;em&gt;Value&lt;/em&gt; property.
&lt;/p&gt;
&lt;p&gt;
Now it’s time for a contest. I add some Console.WriteLine statements as in the original
and I append the malicious static Test() method as in the original.&amp;#160; I rewrite
my Console app code to call my original Singleton code and then the new and improved
-- .NET 4.0 enhanced -- Lazy Singleton code: 
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;    Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Calling Singleton
test method&amp;quot;&lt;/span&gt;); Singleton.Test(); Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Calling
Singleton instance&amp;quot;&lt;/span&gt;); var s = Singleton.Instance; Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Finished
calling Singleton instance&amp;quot;&lt;/span&gt;); Console.WriteLine(); Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Calling
Lazy Singleton test method&amp;quot;&lt;/span&gt;); LazySingleton.Test(); Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Calling
Lazy Singleton instance&amp;quot;&lt;/span&gt;); var lazyS = LazySingleton.Instance; Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Finished
calling Lazy Singleton instance&amp;quot;&lt;/span&gt;); Console.ReadLine();&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;p&gt;
and get the following, very pleasing, results:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ALazierSingletonwith.NET4.0_10599/singlton_results_3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="singlton_results_3" border="0" alt="singlton_results_3" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/ALazierSingletonwith.NET4.0_10599/singlton_results_3_thumb.png" width="349" height="165" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Now that’s lazy!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=fe94e0c4-331a-4f49-b5ad-b1ddf309541b" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,fe94e0c4-331a-4f49-b5ad-b1ddf309541b.aspx</comments>
      <category>.NET 4.0</category>
      <category>Recipe</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=7dfc0393-c04f-4c2b-a129-3a0d791bc4c9</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,7dfc0393-c04f-4c2b-a129-3a0d791bc4c9.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,7dfc0393-c04f-4c2b-a129-3a0d791bc4c9.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7dfc0393-c04f-4c2b-a129-3a0d791bc4c9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.85turns.com/" target="_blank">Corey Schuman</a>, <a href="http://smartypantscoding.com/" target="_blank">Roger
Peters</a> and <a href="http://maysundays.net/blog/" target="_blank">Mason Brown</a> –
whom many of you met at the <a href="http://my-health-info.health.msn.com/MSN/Default.aspx" target="_blank">Atlanta
Silverlight Firestarter</a> – have been under wraps for several months working on
a project for IQ Interactive they repeatedly insisted they couldn’t tell me about.
</p>
        <p>
Now that the beta of My Health Info on MSN has been published, not only do I finally
get to see <a href="http://my-health-info.health.msn.com/MSN/Default.aspx" target="_blank">what</a> they
have been working on but I also get to share it with you.
</p>
        <p>
My Health Info is an aggregator of sorts for personal medical information – a tool
to help the user keep track of her personal medical history.  Unlike other portals
that support widgets, however, this one is built using Silverlight.
</p>
        <p>
My Health Info is an interesting alternative to the Ajax-based web portal solutions
we typically see and serves as a good starting point for anyone looking to combine
the “portal” concept with Silverlight technology.  The Silverlight animations
as one navigates through the application are especially nice; they strike the appropriate
balance between the attractive and the distracting – between cool and cloying.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=7dfc0393-c04f-4c2b-a129-3a0d791bc4c9" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>What can one do with Silverlight: Part deux</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,7dfc0393-c04f-4c2b-a129-3a0d791bc4c9.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/WhatCanOneDoWithSilverlightPartDeux.aspx</link>
      <pubDate>Thu, 01 Oct 2009 18:06:12 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.85turns.com/" target="_blank"&gt;Corey Schuman&lt;/a&gt;, &lt;a href="http://smartypantscoding.com/" target="_blank"&gt;Roger
Peters&lt;/a&gt; and &lt;a href="http://maysundays.net/blog/" target="_blank"&gt;Mason Brown&lt;/a&gt; –
whom many of you met at the &lt;a href="http://my-health-info.health.msn.com/MSN/Default.aspx" target="_blank"&gt;Atlanta
Silverlight Firestarter&lt;/a&gt; – have been under wraps for several months working on
a project for IQ Interactive they repeatedly insisted they couldn’t tell me about.
&lt;/p&gt;
&lt;p&gt;
Now that the beta of My Health Info on MSN has been published, not only do I finally
get to see &lt;a href="http://my-health-info.health.msn.com/MSN/Default.aspx" target="_blank"&gt;what&lt;/a&gt; they
have been working on but I also get to share it with you.
&lt;/p&gt;
&lt;p&gt;
My Health Info is an aggregator of sorts for personal medical information – a tool
to help the user keep track of her personal medical history.&amp;#160; Unlike other portals
that support widgets, however, this one is built using Silverlight.
&lt;/p&gt;
&lt;p&gt;
My Health Info is an interesting alternative to the Ajax-based web portal solutions
we typically see and serves as a good starting point for anyone looking to combine
the “portal” concept with Silverlight technology.&amp;#160; The Silverlight animations
as one navigates through the application are especially nice; they strike the appropriate
balance between the attractive and the distracting – between cool and cloying.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=7dfc0393-c04f-4c2b-a129-3a0d791bc4c9" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,7dfc0393-c04f-4c2b-a129-3a0d791bc4c9.aspx</comments>
      <category>Silverlight</category>
      <category>Technical Zeitgeist</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=857d8bba-0b86-42dd-b0ca-120f4d05589f</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,857d8bba-0b86-42dd-b0ca-120f4d05589f.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,857d8bba-0b86-42dd-b0ca-120f4d05589f.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=857d8bba-0b86-42dd-b0ca-120f4d05589f</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="sheep" border="0" alt="sheep" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/Docomputersthink_AD7A/sheep_3.png" width="152" height="244" />
        </p>
        <p>
The online <a href="http://plato.stanford.edu/" target="_blank">Stanford Encyclopedia
of Philosophy</a> has just published David Cole’s update to the entry on <a href="http://plato.stanford.edu/entries/chinese-room/" target="_blank">The
Chinese Room Argument</a>.
</p>
        <p>
The thought problem was posed by John Searle almost 30 years ago and has been a lightening
rod for discussions about theories of consciousness and AI ever since.
</p>
        <p>
For those unfamiliar with it, the argument is not against the notion that machines
in general can think – Searle believes that minds are built on biological machines,
after all – but rather against certain projects in AI that attempt to use computational
theories to try to explain consciousness.  Searle’s argument is that computational
models are a dead end and that thinking machines must be investigated in a different
(apparently “biological”) way.
</p>
        <p>
Of course, if biology can be reduced to the computational model (for <a href="http://en.wikipedia.org/wiki/Biological_computer" target="_blank">instance</a>)
then Searle’s argument may be applicable to all machines and we will have to search
for consciousness elsewhere.
</p>
        <p>
Here’s the crux of the argument, from the SEP entry:
</p>
        <blockquote>
          <p>
“The heart of the argument is an imagined human simulation of a computer, similar
to Turing's Paper Machine. The human in the Chinese Room follows English instructions
for manipulating Chinese symbols, where a computer “follows” a program written in
a computing language. The human produces the appearance of understanding Chinese by
following the symbol manipulating instructions, but does not thereby come to understand
Chinese. Since a computer just does what the human does—manipulate symbols on the
basis of their syntax alone—no computer, merely by following a program, comes to genuinely
understand Chinese.”
</p>
        </blockquote>
        <p>
If this sort of problem excites you, as it does me, then you may want to examine some
of the articles about and around consciousness collected on David Chalmers’ website: <a title="http://consc.net/online" href="http://consc.net/online">http://consc.net/online</a> .
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=857d8bba-0b86-42dd-b0ca-120f4d05589f" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Do computers think?</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,857d8bba-0b86-42dd-b0ca-120f4d05589f.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/DoComputersThink.aspx</link>
      <pubDate>Fri, 25 Sep 2009 16:20:37 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="sheep" border="0" alt="sheep" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/Docomputersthink_AD7A/sheep_3.png" width="152" height="244" /&gt; 
&lt;/p&gt;
&lt;p&gt;
The online &lt;a href="http://plato.stanford.edu/" target="_blank"&gt;Stanford Encyclopedia
of Philosophy&lt;/a&gt; has just published David Cole’s update to the entry on &lt;a href="http://plato.stanford.edu/entries/chinese-room/" target="_blank"&gt;The
Chinese Room Argument&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The thought problem was posed by John Searle almost 30 years ago and has been a lightening
rod for discussions about theories of consciousness and AI ever since.
&lt;/p&gt;
&lt;p&gt;
For those unfamiliar with it, the argument is not against the notion that machines
in general can think – Searle believes that minds are built on biological machines,
after all – but rather against certain projects in AI that attempt to use computational
theories to try to explain consciousness.&amp;#160; Searle’s argument is that computational
models are a dead end and that thinking machines must be investigated in a different
(apparently “biological”) way.
&lt;/p&gt;
&lt;p&gt;
Of course, if biology can be reduced to the computational model (for &lt;a href="http://en.wikipedia.org/wiki/Biological_computer" target="_blank"&gt;instance&lt;/a&gt;)
then Searle’s argument may be applicable to all machines and we will have to search
for consciousness elsewhere.
&lt;/p&gt;
&lt;p&gt;
Here’s the crux of the argument, from the SEP entry:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
“The heart of the argument is an imagined human simulation of a computer, similar
to Turing's Paper Machine. The human in the Chinese Room follows English instructions
for manipulating Chinese symbols, where a computer “follows” a program written in
a computing language. The human produces the appearance of understanding Chinese by
following the symbol manipulating instructions, but does not thereby come to understand
Chinese. Since a computer just does what the human does—manipulate symbols on the
basis of their syntax alone—no computer, merely by following a program, comes to genuinely
understand Chinese.”
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
If this sort of problem excites you, as it does me, then you may want to examine some
of the articles about and around consciousness collected on David Chalmers’ website: &lt;a title="http://consc.net/online" href="http://consc.net/online"&gt;http://consc.net/online&lt;/a&gt; .
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=857d8bba-0b86-42dd-b0ca-120f4d05589f" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,857d8bba-0b86-42dd-b0ca-120f4d05589f.aspx</comments>
      <category>Notes from Terra</category>
      <category>tranzlashunz</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=ee9cdcc2-62fe-4ad0-8a47-97e61d7fe695</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,ee9cdcc2-62fe-4ad0-8a47-97e61d7fe695.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,ee9cdcc2-62fe-4ad0-8a47-97e61d7fe695.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ee9cdcc2-62fe-4ad0-8a47-97e61d7fe695</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="rubens" border="0" alt="rubens" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/WhatcanonedowithSilverlight_AE7A/rubens_3.jpg" width="244" height="128" />
        </p>
        <p>
The <a href="http://www.componentart.com/" target="_blank">ComponentArt</a> Summer
Silverlight Coding competition is about to wrap up in a few hours.  It has managed
to garner approximately 80 entries – all with publicly accessible Silverlight sites.
</p>
        <p>
In the process of hosting this contest, Miljan Braticevic has achieved a wonderful
thing – almost as a side-effect.  He has gathered a fantastic gallery of Silverlight
applications which answer the often unvoiced question: What can one actually do with
Silverlight?
</p>
        <p>
If you are simply looking for ideas or, more to the point, trying to find a way to
explain to your boss what Silverlight is, go here: <a title="http://www.componentart.com/community/competition2009/contestants.aspx" href="http://www.componentart.com/community/competition2009/contestants.aspx">http://www.componentart.com/community/competition2009/contestants.aspx</a> .
</p>
        <p>
The contest entries run the full gamut of mapping tools, social networking, dashboards,
standard web site alternatives and games.
</p>
        <p>
I do not envy the judges the task of bequeathing their golden apples.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=ee9cdcc2-62fe-4ad0-8a47-97e61d7fe695" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>What can one do with Silverlight?</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,ee9cdcc2-62fe-4ad0-8a47-97e61d7fe695.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/WhatCanOneDoWithSilverlight.aspx</link>
      <pubDate>Tue, 22 Sep 2009 16:24:54 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="rubens" border="0" alt="rubens" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/WhatcanonedowithSilverlight_AE7A/rubens_3.jpg" width="244" height="128" /&gt; 
&lt;/p&gt;
&lt;p&gt;
The &lt;a href="http://www.componentart.com/" target="_blank"&gt;ComponentArt&lt;/a&gt; Summer
Silverlight Coding competition is about to wrap up in a few hours.&amp;#160; It has managed
to garner approximately 80 entries – all with publicly accessible Silverlight sites.
&lt;/p&gt;
&lt;p&gt;
In the process of hosting this contest, Miljan Braticevic has achieved a wonderful
thing – almost as a side-effect.&amp;#160; He has gathered a fantastic gallery of Silverlight
applications which answer the often unvoiced question: What can one actually do with
Silverlight?
&lt;/p&gt;
&lt;p&gt;
If you are simply looking for ideas or, more to the point, trying to find a way to
explain to your boss what Silverlight is, go here: &lt;a title="http://www.componentart.com/community/competition2009/contestants.aspx" href="http://www.componentart.com/community/competition2009/contestants.aspx"&gt;http://www.componentart.com/community/competition2009/contestants.aspx&lt;/a&gt; .
&lt;/p&gt;
&lt;p&gt;
The contest entries run the full gamut of mapping tools, social networking, dashboards,
standard web site alternatives and games.
&lt;/p&gt;
&lt;p&gt;
I do not envy the judges the task of bequeathing their golden apples.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=ee9cdcc2-62fe-4ad0-8a47-97e61d7fe695" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,ee9cdcc2-62fe-4ad0-8a47-97e61d7fe695.aspx</comments>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=8ec61cec-bee1-4602-9afe-71c732369eaa</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,8ec61cec-bee1-4602-9afe-71c732369eaa.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,8ec61cec-bee1-4602-9afe-71c732369eaa.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8ec61cec-bee1-4602-9afe-71c732369eaa</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="derek_jacobi" border="0" alt="derek_jacobi" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/CraftandExposure_FF7F/derek_jacobi_3.jpg" width="176" height="244" />
        </p>
        <p>
With Silverlight 3, Silverlight seems to have reached a critical stage – that is,
people are starting to criticize it.  This is a good thing since it means we
can now talk about the reality of Silverlight rather than the promise of Silverlight
as a technology.
</p>
        <p>
Some recent comparisons have been made between <a href="http://www.connectedinternet.co.uk/2009/08/20/10-reasons-why-flash-is-better-than-silverlight/" target="_blank">Silverlight
and Flash</a> by Michael Lankton as well as Silverlight and <a href="http://encosia.com/2009/09/14/is-silverlight-the-new-webforms/#more-907" target="_blank">HTML
+ JQuery</a> by Dave Ward, a truly great developer.
</p>
        <p>
One topic that hasn’t been broached, I believe, is the comparison of Silverlight and
WPF.  For some die-hard WPF developers I know, Silverlight just seems like a
crippled version of the technology they love.  This is somewhat unfair. 
Silverlight has definite limitations when compared to WPF; it also, however, is able
to reach a much broader audience because it is browser-based and platform neutral. 
Until a mono version of WPF is implemented, Silverlight is going to be the main way
for .NET developers to get their state-of-the-art applications onto their Mac using
friends’ computers.
</p>
        <p>
This reminds me of a comment I heard Derek Jacobi, the great Shakespearean actor,
once make to the effect of:
</p>
        <blockquote>
          <p>
“I do movies for the money.  I do television for the exposure.  But I do
theater for love of the craft.”
</p>
        </blockquote>
        <p>
As much as I have always enjoyed windows development and have cursed the many tricks
and hacks one must know to do web development, web development was still always fun
because people had a greater appreciation for what one did.  In part this is
because web applications simply reach a wider audience.  It is also due, I think,
to the fact that users are much more savvy about the web and the way they feel it
should look than consumers of desktop applications.
</p>
        <p>
And so those lessons might be applied to how we look at the relationship between Silverlight
and WPF.  WPF allows one to practice one’s craft – which is an enjoyable but
mostly solitary affair.  Silverlight, on the other hand, provides the developer
with exposure for his work – and this is no bad thing.  
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=8ec61cec-bee1-4602-9afe-71c732369eaa" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Craft and Exposure</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,8ec61cec-bee1-4602-9afe-71c732369eaa.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/CraftAndExposure.aspx</link>
      <pubDate>Fri, 18 Sep 2009 22:10:29 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="derek_jacobi" border="0" alt="derek_jacobi" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/CraftandExposure_FF7F/derek_jacobi_3.jpg" width="176" height="244" /&gt; 
&lt;/p&gt;
&lt;p&gt;
With Silverlight 3, Silverlight seems to have reached a critical stage – that is,
people are starting to criticize it.&amp;#160; This is a good thing since it means we
can now talk about the reality of Silverlight rather than the promise of Silverlight
as a technology.
&lt;/p&gt;
&lt;p&gt;
Some recent comparisons have been made between &lt;a href="http://www.connectedinternet.co.uk/2009/08/20/10-reasons-why-flash-is-better-than-silverlight/" target="_blank"&gt;Silverlight
and Flash&lt;/a&gt; by Michael Lankton as well as Silverlight and &lt;a href="http://encosia.com/2009/09/14/is-silverlight-the-new-webforms/#more-907" target="_blank"&gt;HTML
+ JQuery&lt;/a&gt; by Dave Ward, a truly great developer.
&lt;/p&gt;
&lt;p&gt;
One topic that hasn’t been broached, I believe, is the comparison of Silverlight and
WPF.&amp;#160; For some die-hard WPF developers I know, Silverlight just seems like a
crippled version of the technology they love.&amp;#160; This is somewhat unfair.&amp;#160;
Silverlight has definite limitations when compared to WPF; it also, however, is able
to reach a much broader audience because it is browser-based and platform neutral.&amp;#160;
Until a mono version of WPF is implemented, Silverlight is going to be the main way
for .NET developers to get their state-of-the-art applications onto their Mac using
friends’ computers.
&lt;/p&gt;
&lt;p&gt;
This reminds me of a comment I heard Derek Jacobi, the great Shakespearean actor,
once make to the effect of:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
“I do movies for the money.&amp;#160; I do television for the exposure.&amp;#160; But I do
theater for love of the craft.”
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
As much as I have always enjoyed windows development and have cursed the many tricks
and hacks one must know to do web development, web development was still always fun
because people had a greater appreciation for what one did.&amp;#160; In part this is
because web applications simply reach a wider audience.&amp;#160; It is also due, I think,
to the fact that users are much more savvy about the web and the way they feel it
should look than consumers of desktop applications.
&lt;/p&gt;
&lt;p&gt;
And so those lessons might be applied to how we look at the relationship between Silverlight
and WPF.&amp;#160; WPF allows one to practice one’s craft – which is an enjoyable but
mostly solitary affair.&amp;#160; Silverlight, on the other hand, provides the developer
with exposure for his work – and this is no bad thing.&amp;#160; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=8ec61cec-bee1-4602-9afe-71c732369eaa" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,8ec61cec-bee1-4602-9afe-71c732369eaa.aspx</comments>
      <category>Phenomenology of Spirit</category>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=0a3847db-d6ec-4019-ae34-225ef43b637d</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,0a3847db-d6ec-4019-ae34-225ef43b637d.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,0a3847db-d6ec-4019-ae34-225ef43b637d.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0a3847db-d6ec-4019-ae34-225ef43b637d</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="beatles-yellow-submarine" border="0" alt="beatles-yellow-submarine" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/TheBeatlesRockBand_10FB2/beatles-yellow-submarine_3.jpg" width="244" height="184" />
        </p>
        <p>
Scott Hanselman, perhaps the current reigning rock star in the Microsoft development
world with an incredibly popular blog, <a href="http://www.hanselman.com/blog/" target="_blank">Computer
Zen</a>, has approximately 17.5 thousand followers on Twitter.  William Shatner,
a television actor currently up for an Emmy, has 114 thousand followers.  Colin
Meloy, lead singer of a band I like, <em>The Decemberists</em>, has 910 thousand Twitter
minions.
</p>
        <p>
As involved as I tend to be in the life-world of software development – and despite
its significance in the technological transformation of business and society -- 
I sometimes have to admit that it is a bit marginal.  Not only are <a href="http://www.youtube.com/watch?v=jqLPHrCQr2I" target="_blank">my
rock stars</a> different from other people’s.  They are also less significant
in the grand scheme of things.  By contrast, the biggest rock stars in society
are, in fact, rock stars.
</p>
        <p>
While it would be nice if we treated our teachers, our doctors, our nurses like rock
stars, I am actually missing President Obama’s speech on healthcare tonight in order
to play the just released Beatles Rock Band with my family.  According to <a href="http://www.nytimes.com/2009/09/06/arts/television/06schi.html" target="_blank">this</a> glowing
review in <em>The New York Times</em>, it is not only the greatest thing since sliced
bread – it is possibly better.  [<strong>Warning</strong>: the phrases <em><strong>cultural
watershed</strong></em> and <em><strong>transformative entertainment experience</strong></em> appear
in the linked article.]
</p>
        <p>
The game is indeed fun and traces out The Beatles’ careers if one plays in story mode. 
We had in fact gotten to 1965 before my 12 year old noticed the chronology and exclaimed,
“Oh my Gawd.  They are so old.  I thought they were from the 80’s or something.”
</p>
        <p>
This got me thinking incoherently about the fickle nature of fame which quickly segued
into a daydream about sitting in the green room after a concert while my roadies picked
out groupies at the door to come in and engage me in stimulating conversation.
</p>
        <p>
Sometime in the 1990’s my philosophy department was trying to lure Hubert Dreyfus,
then the leading interpreter of poststructuralists like Derrida and Foucault in America,
into our university.  Apparently everything was going swimmingly until the haggling
started and we discovered that not only did he want the chairmanship of the department
but he also wanted a 300K salary and merchandizing rights to any action figures based
on his work.   300K is a lot of money in any profession, but it is an uber-rock
star salary when you consider that most American academics supplement their meager
incomes by selling real estate and Amway.  Negotiations quickly deteriorated
after that.
</p>
        <p>
I’m not saying, of course, that Hubert Dreyfus doesn’t deserve that kind of scratch. 
He had his own groupies and everything.  The problem is simply that our society
doesn’t value the kind of contributions to the common weal provided by Professor Dreyfus.
</p>
        <p>
Perhaps a video game could change all that.  I could potentially see myself playing
an XBOX game in which I kiss-butt as a graduate student (as I recall, I in fact did
do that) in a foreign country, write a marginal dissertation, get a teaching position
somewhere and then write a counter-intuitive thesis in a major philosophy journal
(the kind with at least a thousand subscribers, maybe more) such as “Why Descartes
was not a Cartesian”, “Why Spinoza was not a Spinozist”, “Why Plato was not a Platonist”
(true, actually) or “Why Nietzsche was not a Nihilist” (at the beginner level). 
With the success of that article, the player would then ditch his teaching position
at a state college for a big-name university and gather graduate students around himself. 
He would then promote his favorite graduate students to tenure track positions and
they would in turn write glowing reviews of all the player’s books as well as teach
them in all their classes.  It’s called giveback, and the game would be called <em>Academic
Rock Star</em>.  I really could potentially see myself playing that game, possibly.
</p>
        <p>
There are rock stars in every field, and one might offer suggestions for other titles
such as <em>Financial Rock Star</em>, <em>Accounting Rock Star</em>, <em>Presidential
Candidate Rock Star</em>,  <em>Microsoft Excel Rock Star</em>, <em>Blogging Rock
Star.</em></p>
        <p>
Perhaps the reason Microsoft has not picked up on any of these ideas is because –
just as we all secretly believe that we will one day be rich – we all secretly believe
that becoming a rock star in our own industry or sub-culture is attainable.
</p>
        <p>
No one really believes, however, that he can ever become like The Beatles.  Consequently
we settle for the next best thing: pretending to be The Beatles in a video game.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=0a3847db-d6ec-4019-ae34-225ef43b637d" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>The Beatles Rock Band</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,0a3847db-d6ec-4019-ae34-225ef43b637d.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/TheBeatlesRockBand.aspx</link>
      <pubDate>Thu, 10 Sep 2009 04:48:00 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="beatles-yellow-submarine" border="0" alt="beatles-yellow-submarine" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/TheBeatlesRockBand_10FB2/beatles-yellow-submarine_3.jpg" width="244" height="184" /&gt; 
&lt;/p&gt;
&lt;p&gt;
Scott Hanselman, perhaps the current reigning rock star in the Microsoft development
world with an incredibly popular blog, &lt;a href="http://www.hanselman.com/blog/" target="_blank"&gt;Computer
Zen&lt;/a&gt;, has approximately 17.5 thousand followers on Twitter.&amp;#160; William Shatner,
a television actor currently up for an Emmy, has 114 thousand followers.&amp;#160; Colin
Meloy, lead singer of a band I like, &lt;em&gt;The Decemberists&lt;/em&gt;, has 910 thousand Twitter
minions.
&lt;/p&gt;
&lt;p&gt;
As involved as I tend to be in the life-world of software development – and despite
its significance in the technological transformation of business and society --&amp;#160;
I sometimes have to admit that it is a bit marginal.&amp;#160; Not only are &lt;a href="http://www.youtube.com/watch?v=jqLPHrCQr2I" target="_blank"&gt;my
rock stars&lt;/a&gt; different from other people’s.&amp;#160; They are also less significant
in the grand scheme of things.&amp;#160; By contrast, the biggest rock stars in society
are, in fact, rock stars.
&lt;/p&gt;
&lt;p&gt;
While it would be nice if we treated our teachers, our doctors, our nurses like rock
stars, I am actually missing President Obama’s speech on healthcare tonight in order
to play the just released Beatles Rock Band with my family.&amp;#160; According to &lt;a href="http://www.nytimes.com/2009/09/06/arts/television/06schi.html" target="_blank"&gt;this&lt;/a&gt; glowing
review in &lt;em&gt;The New York Times&lt;/em&gt;, it is not only the greatest thing since sliced
bread – it is possibly better.&amp;#160; [&lt;strong&gt;Warning&lt;/strong&gt;: the phrases &lt;em&gt;&lt;strong&gt;cultural
watershed&lt;/strong&gt;&lt;/em&gt; and &lt;em&gt;&lt;strong&gt;transformative entertainment experience&lt;/strong&gt;&lt;/em&gt; appear
in the linked article.]
&lt;/p&gt;
&lt;p&gt;
The game is indeed fun and traces out The Beatles’ careers if one plays in story mode.&amp;#160;
We had in fact gotten to 1965 before my 12 year old noticed the chronology and exclaimed,
“Oh my Gawd.&amp;#160; They are so old.&amp;#160; I thought they were from the 80’s or something.”
&lt;/p&gt;
&lt;p&gt;
This got me thinking incoherently about the fickle nature of fame which quickly segued
into a daydream about sitting in the green room after a concert while my roadies picked
out groupies at the door to come in and engage me in stimulating conversation.
&lt;/p&gt;
&lt;p&gt;
Sometime in the 1990’s my philosophy department was trying to lure Hubert Dreyfus,
then the leading interpreter of poststructuralists like Derrida and Foucault in America,
into our university.&amp;#160; Apparently everything was going swimmingly until the haggling
started and we discovered that not only did he want the chairmanship of the department
but he also wanted a 300K salary and merchandizing rights to any action figures based
on his work.&amp;#160;&amp;#160; 300K is a lot of money in any profession, but it is an uber-rock
star salary when you consider that most American academics supplement their meager
incomes by selling real estate and Amway.&amp;#160; Negotiations quickly deteriorated
after that.
&lt;/p&gt;
&lt;p&gt;
I’m not saying, of course, that Hubert Dreyfus doesn’t deserve that kind of scratch.&amp;#160;
He had his own groupies and everything.&amp;#160; The problem is simply that our society
doesn’t value the kind of contributions to the common weal provided by Professor Dreyfus.
&lt;/p&gt;
&lt;p&gt;
Perhaps a video game could change all that.&amp;#160; I could potentially see myself playing
an XBOX game in which I kiss-butt as a graduate student (as I recall, I in fact did
do that) in a foreign country, write a marginal dissertation, get a teaching position
somewhere and then write a counter-intuitive thesis in a major philosophy journal
(the kind with at least a thousand subscribers, maybe more) such as “Why Descartes
was not a Cartesian”, “Why Spinoza was not a Spinozist”, “Why Plato was not a Platonist”
(true, actually) or “Why Nietzsche was not a Nihilist” (at the beginner level).&amp;#160;
With the success of that article, the player would then ditch his teaching position
at a state college for a big-name university and gather graduate students around himself.&amp;#160;
He would then promote his favorite graduate students to tenure track positions and
they would in turn write glowing reviews of all the player’s books as well as teach
them in all their classes.&amp;#160; It’s called giveback, and the game would be called &lt;em&gt;Academic
Rock Star&lt;/em&gt;.&amp;#160; I really could potentially see myself playing that game, possibly.
&lt;/p&gt;
&lt;p&gt;
There are rock stars in every field, and one might offer suggestions for other titles
such as &lt;em&gt;Financial Rock Star&lt;/em&gt;, &lt;em&gt;Accounting Rock Star&lt;/em&gt;, &lt;em&gt;Presidential
Candidate Rock Star&lt;/em&gt;,&amp;#160; &lt;em&gt;Microsoft Excel Rock Star&lt;/em&gt;, &lt;em&gt;Blogging Rock
Star.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Perhaps the reason Microsoft has not picked up on any of these ideas is because –
just as we all secretly believe that we will one day be rich – we all secretly believe
that becoming a rock star in our own industry or sub-culture is attainable.
&lt;/p&gt;
&lt;p&gt;
No one really believes, however, that he can ever become like The Beatles.&amp;#160; Consequently
we settle for the next best thing: pretending to be The Beatles in a video game.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=0a3847db-d6ec-4019-ae34-225ef43b637d" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,0a3847db-d6ec-4019-ae34-225ef43b637d.aspx</comments>
      <category>Theater of Memory</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=0b2ffb38-f35f-4f6c-9018-1cf839a8d65d</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,0b2ffb38-f35f-4f6c-9018-1cf839a8d65d.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,0b2ffb38-f35f-4f6c-9018-1cf839a8d65d.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0b2ffb38-f35f-4f6c-9018-1cf839a8d65d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
There are three Silverlight contests in the month of September.  Each is, interestingly,
sponsored by a different set of control vendors.
</p>
        <p>
          <strong>Due September 14th</strong> (<a href="http://telerikwatch.com/2009/07/telerik-silverlight-contest-win-500.html" target="_blank">link</a>):
Telerik Silverlight Contest – Telerik is offering a $500 Amazon gift card for a two
page written case study of an application that uses their RadControl suite. 
According to the contest announcement, you must:
</p>
        <ol>
        </ol>
        <ol>
          <li>
Build an application with the <a href="http://www.telerik.com/silverlight">RadControls
for Silverlight</a> (you can even <a href="https://www.telerik.com/login.aspx?ReturnUrl=%2faccount%2ffree-trials.aspx">use
the trials</a>) 
</li>
          <li>
Create a 1 - 2 page case study describing your project 
</li>
          <li>
Submit the case study by September 14th, 2009 
</li>
        </ol>
        <p>
          <strong>Due September 19th</strong> (<a href="http://gosilverlight.org/Prizes" target="_blank">link</a>):
DevExpress, Infragistics and Telerik are putting up prizes for a contest hosted at <a href="http://www.gosilverlight.org">www.gosilverlight.org</a>.
You must write a Silverlight control to enter the contest. First prize has a combined
award of $700 in gift cards as well as licenses for the control suites of each of
the sponsors.  The Silverlight Show is also a sponsor.  According to the
contest announcement, you must:
</p>
        <blockquote>
          <p>
1. Controls must be designed to work with Silverlight 2 or later. Silverlight 1 Entries
will not be accepted or evaluated.
</p>
          <p>
2. All entries must be received between now and 12:00 AM ET, 9/19/2009 12:00:00 AM.
Entries received after this date will not be accepted or evaluated. The deadline may
change at any time for any reason.
</p>
          <p>
3. Contestants must provide the control source code as part of the submission. The
source code should be provided as a ZIP archive and should include the following items: 
</p>
          <ul>
            <li>
A single Visual Studio 2008 Solution containing each of the solution projects. 
</li>
            <li>
A Silverlight Application project that contains the custom control. 
</li>
            <li>
A Test Silverlight Web Project that will host the Silverlight control. The host web
project must demonstrate the control in use. 
</li>
            <li>
The code must compile. If the code does not compile, the entry will not be evaluated. 
</li>
          </ul>
        </blockquote>
        <p>
See the contest <a href="http://gosilverlight.org/Rules" target="_blank">rules page</a> for
a complete list of instructions.
</p>
        <p>
          <strong>Due September 22nd</strong> (<a href="http://www.componentart.com/community/competition2009/" target="_blank">link</a>):
ComponentArt is also hosting a Silverlight contest in September for Silverlight applications. 
The Grand Prize in this contest is $10,000.  
</p>
        <ul>
          <li>
            <p>
The use of ComponentArt products is not required to participate in the Summer Silverlight
Coding Competition. The contest is open to the entire Silverlight developer community.
</p>
          </li>
          <li>
            <p>
Each Entry must be a Silverlight 1.0, Silverlight 2.0 or Silverlight 3.0 application.
Each Entry must be accessible through a public URL. If authentication is required,
a demo username and password must be provided.
</p>
          </li>
          <li>
            <p>
The Entry must not contain any content or material that is obscene, sexually explicit,
defamatory, or otherwise inappropriate as determined by ComponentArt at its absolute
discretion.
</p>
          </li>
          <li>
            <p>
Each Entrant will be required to provide their full name, email address, physical
address, and country of residency.
</p>
          </li>
          <li>
            <p>
ComponentArt employees are not eligible to participate in the Competition.
</p>
          </li>
          <li>
            <p>
Each Entry must be of the Entrant's original creation, created solely by the Entrant(s),
must not infringe the copyright, trademark, privacy, publicity, or other intellectual
rights of any person or entity.
</p>
          </li>
          <li>
            <p>
Participants using third party libraries, controls and/or code in their application,
are required to identify the applicable third party components.
</p>
          </li>
        </ul>
        <p>
See the contest page for a full <a href="http://www.componentart.com/community/competition2009/rules.aspx" target="_blank">list
of rules</a>.
</p>
        <p>
I certainly wouldn’t feel comfortable suggesting that anyone slack off from their
day jobs for this.  At the same time, however, the incentive has never been better
to take a week off and hone your Silverlight skills.
</p>
        <p>
I don’t see any rules that disallow submitting the same basic project for all three
contests -- hence tripling your chances of winning something -- so here’s a sample
strategy for doing that:
</p>
        <p>
1. Start working on a cool Silverlight app for the ComponentArt contest.
</p>
        <p>
2. Along the way, you will need to build some cool controls.  Take the coolest
one and submit it for the gosilverlight.org contest.
</p>
        <p>
3. Rewrite your application using some Telerik controls and submit a write-up for
the Telerik Silverlight contest.
</p>
        <p>
If by some chance you manage to win all three September contests, you will have made
$11,200 as well as control suites worth an additional $3000 or so.  Really not
so bad for a couple of weeks worth of work.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=0b2ffb38-f35f-4f6c-9018-1cf839a8d65d" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Three Silverlight Contests Hath September</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,0b2ffb38-f35f-4f6c-9018-1cf839a8d65d.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/ThreeSilverlightContestsHathSeptember.aspx</link>
      <pubDate>Tue, 01 Sep 2009 02:14:30 GMT</pubDate>
      <description>&lt;p&gt;
There are three Silverlight contests in the month of September.&amp;#160; Each is, interestingly,
sponsored by a different set of control vendors.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Due September 14th&lt;/strong&gt; (&lt;a href="http://telerikwatch.com/2009/07/telerik-silverlight-contest-win-500.html" target="_blank"&gt;link&lt;/a&gt;):
Telerik Silverlight Contest – Telerik is offering a $500 Amazon gift card for a two
page written case study of an application that uses their RadControl suite.&amp;#160;
According to the contest announcement, you must:
&lt;/p&gt;
&lt;ol&gt;
&lt;ol&gt;
&lt;li&gt;
Build an application with the &lt;a href="http://www.telerik.com/silverlight"&gt;RadControls
for Silverlight&lt;/a&gt; (you can even &lt;a href="https://www.telerik.com/login.aspx?ReturnUrl=%2faccount%2ffree-trials.aspx"&gt;use
the trials&lt;/a&gt;) 
&lt;/li&gt;
&lt;li&gt;
Create a 1 - 2 page case study describing your project 
&lt;/li&gt;
&lt;li&gt;
Submit the case study by September 14th, 2009 
&lt;/li&gt;
&lt;/ol&gt;
&gt;
&lt;p&gt;
&lt;strong&gt;Due September 19th&lt;/strong&gt; (&lt;a href="http://gosilverlight.org/Prizes" target="_blank"&gt;link&lt;/a&gt;):
DevExpress, Infragistics and Telerik are putting up prizes for a contest hosted at &lt;a href="http://www.gosilverlight.org"&gt;www.gosilverlight.org&lt;/a&gt;.
You must write a Silverlight control to enter the contest. First prize has a combined
award of $700 in gift cards as well as licenses for the control suites of each of
the sponsors.&amp;#160; The Silverlight Show is also a sponsor.&amp;#160; According to the
contest announcement, you must:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
1. Controls must be designed to work with Silverlight 2 or later. Silverlight 1 Entries
will not be accepted or evaluated.
&lt;/p&gt;
&lt;p&gt;
2. All entries must be received between now and 12:00 AM ET, 9/19/2009 12:00:00 AM.
Entries received after this date will not be accepted or evaluated. The deadline may
change at any time for any reason.
&lt;/p&gt;
&lt;p&gt;
3. Contestants must provide the control source code as part of the submission. The
source code should be provided as a ZIP archive and should include the following items: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
A single Visual Studio 2008 Solution containing each of the solution projects. 
&lt;/li&gt;
&lt;li&gt;
A Silverlight Application project that contains the custom control. 
&lt;/li&gt;
&lt;li&gt;
A Test Silverlight Web Project that will host the Silverlight control. The host web
project must demonstrate the control in use. 
&lt;/li&gt;
&lt;li&gt;
The code must compile. If the code does not compile, the entry will not be evaluated. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
See the contest &lt;a href="http://gosilverlight.org/Rules" target="_blank"&gt;rules page&lt;/a&gt; for
a complete list of instructions.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Due September 22nd&lt;/strong&gt; (&lt;a href="http://www.componentart.com/community/competition2009/" target="_blank"&gt;link&lt;/a&gt;):
ComponentArt is also hosting a Silverlight contest in September for Silverlight applications.&amp;#160;
The Grand Prize in this contest is $10,000.&amp;#160; 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;
The use of ComponentArt products is not required to participate in the Summer Silverlight
Coding Competition. The contest is open to the entire Silverlight developer community.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Each Entry must be a Silverlight 1.0, Silverlight 2.0 or Silverlight 3.0 application.
Each Entry must be accessible through a public URL. If authentication is required,
a demo username and password must be provided.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
The Entry must not contain any content or material that is obscene, sexually explicit,
defamatory, or otherwise inappropriate as determined by ComponentArt at its absolute
discretion.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Each Entrant will be required to provide their full name, email address, physical
address, and country of residency.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
ComponentArt employees are not eligible to participate in the Competition.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Each Entry must be of the Entrant's original creation, created solely by the Entrant(s),
must not infringe the copyright, trademark, privacy, publicity, or other intellectual
rights of any person or entity.
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;
Participants using third party libraries, controls and/or code in their application,
are required to identify the applicable third party components.
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
See the contest page for a full &lt;a href="http://www.componentart.com/community/competition2009/rules.aspx" target="_blank"&gt;list
of rules&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
I certainly wouldn’t feel comfortable suggesting that anyone slack off from their
day jobs for this.&amp;#160; At the same time, however, the incentive has never been better
to take a week off and hone your Silverlight skills.
&lt;/p&gt;
&lt;p&gt;
I don’t see any rules that disallow submitting the same basic project for all three
contests -- hence tripling your chances of winning something -- so here’s a sample
strategy for doing that:
&lt;/p&gt;
&lt;p&gt;
1. Start working on a cool Silverlight app for the ComponentArt contest.
&lt;/p&gt;
&lt;p&gt;
2. Along the way, you will need to build some cool controls.&amp;#160; Take the coolest
one and submit it for the gosilverlight.org contest.
&lt;/p&gt;
&lt;p&gt;
3. Rewrite your application using some Telerik controls and submit a write-up for
the Telerik Silverlight contest.
&lt;/p&gt;
&lt;p&gt;
If by some chance you manage to win all three September contests, you will have made
$11,200 as well as control suites worth an additional $3000 or so.&amp;#160; Really not
so bad for a couple of weeks worth of work.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=0b2ffb38-f35f-4f6c-9018-1cf839a8d65d" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,0b2ffb38-f35f-4f6c-9018-1cf839a8d65d.aspx</comments>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=86060ea5-1d02-4831-9d58-ca4773e63ab2</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,86060ea5-1d02-4831-9d58-ca4773e63ab2.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,86060ea5-1d02-4831-9d58-ca4773e63ab2.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=86060ea5-1d02-4831-9d58-ca4773e63ab2</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is an anti-recipe for the ExecutionEngineException.  By an anti-recipe,
I mean I will demonstrate how to get a certain result that you never want to get,
with the expectation that it will help you steer clear of it.
</p>
        <p>
ExecutionEngineException messages are a bit scary. They happen at a pretty low level,
first of all, and aren’t easy to debug.  Second, the exception remarks provided
on MSDN are:
</p>
        <blockquote>
          <p>
“Execution engine errors are fatal errors that should never occur. Such errors occur
mainly when the execution engine has been corrupted or data is missing.”
</p>
        </blockquote>
        <p>
I want to point out one scenario which might provoke your code to throw this exception
on the principle that <em>forewarned is forearmed</em>.  More importantly, don’t
freak out if you run into this – there are some easy workarounds.
</p>
        <p>
When writing a service contract for a WCF web service, you may want to use a IEnumerable&lt;T&gt;
as the return type.  Generally this is fine.  If you try to return an array
as the underlying type, however, you will get the ExecutionEngineException in .NET
3.5.
</p>
        <p>
This is simply a bug, so you will need to work around it.  You have two choices:
either change the signature of your service method or change the underlying type.
</p>
        <p>
If you use the extension method ToList() on your array, everything will work fine.
</p>
        <p>
Alternatively, if you are able to rewrite your service contract, just return the array
type rather than trying to use IEnumerable&lt;T&gt;, ICollection&lt;T&gt;, or IList&lt;T&gt;,
all of which will cause the same scary exception to be thrown if the underlying type
is an array of custom objects (e.g. CustomType[]).
</p>
        <p>
Arrays of simple types (e.g. string[]) do not seem to be a problem.
</p>
        <p>
Arrays of custom objects will generate the exception whether they are the return type
on art of the signature of the service method or if they are members of an object
returned by the service method.  
</p>
        <p>
I said there are two workarounds, but there are actually three.  This exception
seems to only be thrown when you host your service in IIS or Cassini.  If you
self-host your service, even using the BasicHttpBinding type, the problem doesn’t
show up.  
</p>
        <p>
To reiterate, the problem occurs when a web service contract specifies an IEnumerable&lt;T&gt;,
ICollection&lt;T&gt; or IList&lt;T&gt; as the return type and the underlying type
returned is actually an array of custom objects.
</p>
        <p>
This has been noted as a bug by Microsoft (<a title="https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=433569" href="https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=433569">https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=433569</a>). 
It also appears to be fixed in .NET 4.0.  I have ported my troubled code to VS
2010 Beta 1, and the code works fine.
</p>
        <p>
I don’t think this problem is actually encountered that often for two reasons. 
First, we typically don’t use raw arrays that often.  Instead we use generic
Lists or even ArrayLists which, even if they are a bit fatter than simple arrays,
are awfully convenient.  Second, while it is considered to be a best practice
to always return least derived types in methods and properties – in practice this
seems to be the exception rather than the rule.
</p>
        <p>
Finally, it doesn’t appear to be a problem with the DataContractSerializer as some
have suggested elsewhere.  I can serialize my data contracts just fine when I
use the DataContractSerializer on its own.  The problem only seems to happen
for me when I try to expose these contracts through a WCF service.  Also, if
it were a DataContractSerializer problem, changing to self-hosting shouldn’t help.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=86060ea5-1d02-4831-9d58-ca4773e63ab2" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>WCF, Arrays and the ExecutionEngineException</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,86060ea5-1d02-4831-9d58-ca4773e63ab2.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/WCFArraysAndTheExecutionEngineException.aspx</link>
      <pubDate>Wed, 26 Aug 2009 17:04:19 GMT</pubDate>
      <description>&lt;p&gt;
This is an anti-recipe for the ExecutionEngineException.&amp;#160; By an anti-recipe,
I mean I will demonstrate how to get a certain result that you never want to get,
with the expectation that it will help you steer clear of it.
&lt;/p&gt;
&lt;p&gt;
ExecutionEngineException messages are a bit scary. They happen at a pretty low level,
first of all, and aren’t easy to debug.&amp;#160; Second, the exception remarks provided
on MSDN are:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
“Execution engine errors are fatal errors that should never occur. Such errors occur
mainly when the execution engine has been corrupted or data is missing.”
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I want to point out one scenario which might provoke your code to throw this exception
on the principle that &lt;em&gt;forewarned is forearmed&lt;/em&gt;.&amp;#160; More importantly, don’t
freak out if you run into this – there are some easy workarounds.
&lt;/p&gt;
&lt;p&gt;
When writing a service contract for a WCF web service, you may want to use a IEnumerable&amp;lt;T&amp;gt;
as the return type.&amp;#160; Generally this is fine.&amp;#160; If you try to return an array
as the underlying type, however, you will get the ExecutionEngineException in .NET
3.5.
&lt;/p&gt;
&lt;p&gt;
This is simply a bug, so you will need to work around it.&amp;#160; You have two choices:
either change the signature of your service method or change the underlying type.
&lt;/p&gt;
&lt;p&gt;
If you use the extension method ToList() on your array, everything will work fine.
&lt;/p&gt;
&lt;p&gt;
Alternatively, if you are able to rewrite your service contract, just return the array
type rather than trying to use IEnumerable&amp;lt;T&amp;gt;, ICollection&amp;lt;T&amp;gt;, or IList&amp;lt;T&amp;gt;,
all of which will cause the same scary exception to be thrown if the underlying type
is an array of custom objects (e.g. CustomType[]).
&lt;/p&gt;
&lt;p&gt;
Arrays of simple types (e.g. string[]) do not seem to be a problem.
&lt;/p&gt;
&lt;p&gt;
Arrays of custom objects will generate the exception whether they are the return type
on art of the signature of the service method or if they are members of an object
returned by the service method.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
I said there are two workarounds, but there are actually three.&amp;#160; This exception
seems to only be thrown when you host your service in IIS or Cassini.&amp;#160; If you
self-host your service, even using the BasicHttpBinding type, the problem doesn’t
show up.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
To reiterate, the problem occurs when a web service contract specifies an IEnumerable&amp;lt;T&amp;gt;,
ICollection&amp;lt;T&amp;gt; or IList&amp;lt;T&amp;gt; as the return type and the underlying type
returned is actually an array of custom objects.
&lt;/p&gt;
&lt;p&gt;
This has been noted as a bug by Microsoft (&lt;a title="https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=433569" href="https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=433569"&gt;https://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=433569&lt;/a&gt;).&amp;#160;
It also appears to be fixed in .NET 4.0.&amp;#160; I have ported my troubled code to VS
2010 Beta 1, and the code works fine.
&lt;/p&gt;
&lt;p&gt;
I don’t think this problem is actually encountered that often for two reasons.&amp;#160;
First, we typically don’t use raw arrays that often.&amp;#160; Instead we use generic
Lists or even ArrayLists which, even if they are a bit fatter than simple arrays,
are awfully convenient.&amp;#160; Second, while it is considered to be a best practice
to always return least derived types in methods and properties – in practice this
seems to be the exception rather than the rule.
&lt;/p&gt;
&lt;p&gt;
Finally, it doesn’t appear to be a problem with the DataContractSerializer as some
have suggested elsewhere.&amp;#160; I can serialize my data contracts just fine when I
use the DataContractSerializer on its own.&amp;#160; The problem only seems to happen
for me when I try to expose these contracts through a WCF service.&amp;#160; Also, if
it were a DataContractSerializer problem, changing to self-hosting shouldn’t help.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=86060ea5-1d02-4831-9d58-ca4773e63ab2" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,86060ea5-1d02-4831-9d58-ca4773e63ab2.aspx</comments>
      <category>Anti-recipe</category>
      <category>WCF</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=269b373a-6134-4c70-930d-ae9774379e7a</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,269b373a-6134-4c70-930d-ae9774379e7a.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,269b373a-6134-4c70-930d-ae9774379e7a.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=269b373a-6134-4c70-930d-ae9774379e7a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I’m often curious about how people pronounce their names. 
</p>
        <p>
There is a scene from the 1939 version of <em>Goodbye, Mr. Chips</em> in which Robert
Donat accedes to the growing trend to pronounce Latin according to scientific rather
than poetic principles – <em>Kikero</em>, with a hard ‘c’ rather than a soft one.
</p>
        <p>
The controversy over the conventional pronunciation of Latin is captured in this 1916 <a href="http://query.nytimes.com/mem/archive-free/pdf?_r=1&amp;res=9804E6DE1539EF32A25753C3A9679C946796D6CF" target="_blank">article</a> from
the New York Times in which a defender of the Italianized pronunciation frames it
in terms of Germanic (for it was German philologists who researched and then championed
the original pronunciation of Latin) scholarship <em>versus</em> (<em>wer-sus</em>)
the pronunciation of the Roman Curia.  
</p>
        <blockquote>
          <p>
“The Germans, representative of the real and uneffete Romans, have a passion for uniformity
and discipline.  Why should two sounds of <em>c</em> be uttered in <em>concillium</em>? 
The Latin consonants must march goosestep.  What has made France, England, Italy,
decadent and degenerate?  Soften the sound of your <em>c’</em>s and <em>g’</em>s,
and you soften the character of the people so abasing them.”
</p>
        </blockquote>
        <p>
Sometimes, of course, people really don’t care how their names are pronounced. 
In exceptional instances, however, there is always a chance that one risks giving
offense – <em>Fran-ken-</em>STEEN, as Gene Wilder insisted, not <em>Fran-ken</em>-STAHYN.
</p>
        <p>
As an opportunity to have dinner with Tim Heuer of the Microsoft Silverlight Team
approached this week, the correct pronunciation of his name became a small source
of anxiety.
</p>
        <p>
When a colleague asked me about it, I suggested that it was pronounced like <em>howitzer</em> without
the itz. 
</p>
        <p>
Immediately afterwards, I became concerned that it actually was pronounced in the
German fashion, <em>HOY-er.</em></p>
        <p>
It turned out that both are incorrect.  After consulting with a Microsoft Evangelist,
Glen <em>GOHR-dun</em>,  I discovered that Tim’s name is pronounced <em>HYEW-er</em>.
</p>
        <p>
Shawn Wildermuth called me out over the weekend for pronouncing Rocky Lhotka’s name
with a long <em>O</em> rather than a short one.  Again the anxiety of pronunciation
struck.  Rocky’s last name is actually pronounced <em>LAHT</em>-ka, like the
character from <em>Taxi.</em></p>
        <p>
Shawn’s last name, in turn, is pronounced with a short rather than a long <em>U – </em>as
in MOTHER and not like VERMOUTH.  His first name is not Irish, but instead is
derived from the Shawnee Indian nation – such strange things we discuss in the backrooms
of conferences.
</p>
        <p>
Since some Wintellect consultants were also with me lounging in the speaker’s room
during the Silverlight Firestarter, I inquired into the pronunciation of Jeff Prosise’s
name.  The <em>I</em> in his last name turns out to be long, while the stress
is on the penultimate syllable: <em>PROH-sahys, </em>like <em>precise</em> but more
emphatic.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=269b373a-6134-4c70-930d-ae9774379e7a" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Cicero or Kikero?</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,269b373a-6134-4c70-930d-ae9774379e7a.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/CiceroOrKikero.aspx</link>
      <pubDate>Sun, 23 Aug 2009 17:23:33 GMT</pubDate>
      <description>&lt;p&gt;
I’m often curious about how people pronounce their names. 
&lt;/p&gt;
&lt;p&gt;
There is a scene from the 1939 version of &lt;em&gt;Goodbye, Mr. Chips&lt;/em&gt; in which Robert
Donat accedes to the growing trend to pronounce Latin according to scientific rather
than poetic principles – &lt;em&gt;Kikero&lt;/em&gt;, with a hard ‘c’ rather than a soft one.
&lt;/p&gt;
&lt;p&gt;
The controversy over the conventional pronunciation of Latin is captured in this 1916 &lt;a href="http://query.nytimes.com/mem/archive-free/pdf?_r=1&amp;amp;res=9804E6DE1539EF32A25753C3A9679C946796D6CF" target="_blank"&gt;article&lt;/a&gt; from
the New York Times in which a defender of the Italianized pronunciation frames it
in terms of Germanic (for it was German philologists who researched and then championed
the original pronunciation of Latin) scholarship &lt;em&gt;versus&lt;/em&gt; (&lt;em&gt;wer-sus&lt;/em&gt;)
the pronunciation of the Roman Curia.&amp;#160; 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
“The Germans, representative of the real and uneffete Romans, have a passion for uniformity
and discipline.&amp;#160; Why should two sounds of &lt;em&gt;c&lt;/em&gt; be uttered in &lt;em&gt;concillium&lt;/em&gt;?&amp;#160;
The Latin consonants must march goosestep.&amp;#160; What has made France, England, Italy,
decadent and degenerate?&amp;#160; Soften the sound of your &lt;em&gt;c’&lt;/em&gt;s and &lt;em&gt;g’&lt;/em&gt;s,
and you soften the character of the people so abasing them.”
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Sometimes, of course, people really don’t care how their names are pronounced.&amp;#160;
In exceptional instances, however, there is always a chance that one risks giving
offense – &lt;em&gt;Fran-ken-&lt;/em&gt;STEEN, as Gene Wilder insisted, not &lt;em&gt;Fran-ken&lt;/em&gt;-STAHYN.
&lt;/p&gt;
&lt;p&gt;
As an opportunity to have dinner with Tim Heuer of the Microsoft Silverlight Team
approached this week, the correct pronunciation of his name became a small source
of anxiety.
&lt;/p&gt;
&lt;p&gt;
When a colleague asked me about it, I suggested that it was pronounced like &lt;em&gt;howitzer&lt;/em&gt; without
the itz. 
&lt;/p&gt;
&lt;p&gt;
Immediately afterwards, I became concerned that it actually was pronounced in the
German fashion, &lt;em&gt;HOY-er.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
It turned out that both are incorrect.&amp;#160; After consulting with a Microsoft Evangelist,
Glen &lt;em&gt;GOHR-dun&lt;/em&gt;,&amp;#160; I discovered that Tim’s name is pronounced &lt;em&gt;HYEW-er&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
Shawn Wildermuth called me out over the weekend for pronouncing Rocky Lhotka’s name
with a long &lt;em&gt;O&lt;/em&gt; rather than a short one.&amp;#160; Again the anxiety of pronunciation
struck.&amp;#160; Rocky’s last name is actually pronounced &lt;em&gt;LAHT&lt;/em&gt;-ka, like the
character from &lt;em&gt;Taxi.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Shawn’s last name, in turn, is pronounced with a short rather than a long &lt;em&gt;U – &lt;/em&gt;as
in MOTHER and not like VERMOUTH.&amp;#160; His first name is not Irish, but instead is
derived from the Shawnee Indian nation – such strange things we discuss in the backrooms
of conferences.
&lt;/p&gt;
&lt;p&gt;
Since some Wintellect consultants were also with me lounging in the speaker’s room
during the Silverlight Firestarter, I inquired into the pronunciation of Jeff Prosise’s
name.&amp;#160; The &lt;em&gt;I&lt;/em&gt; in his last name turns out to be long, while the stress
is on the penultimate syllable: &lt;em&gt;PROH-sahys, &lt;/em&gt;like &lt;em&gt;precise&lt;/em&gt; but more
emphatic.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=269b373a-6134-4c70-930d-ae9774379e7a" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,269b373a-6134-4c70-930d-ae9774379e7a.aspx</comments>
      <category>Notes from Terra</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=bf4f6f9d-8ec7-4e20-a4dd-1fdb7bdd372b</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,bf4f6f9d-8ec7-4e20-a4dd-1fdb7bdd372b.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,bf4f6f9d-8ec7-4e20-a4dd-1fdb7bdd372b.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=bf4f6f9d-8ec7-4e20-a4dd-1fdb7bdd372b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ATL-Silverlight-Firestarter-logo_resized" border="0" alt="ATL-Silverlight-Firestarter-logo_resized" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/SilverlightResources_1447C/ATL-Silverlight-Firestarter-logo_resized_3.png" width="380" height="95" />
        </p>
        <p>
          <iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-ef92193c4471bd9e.skydrive.live.com/embedrowdetail.aspx/.Public/The%20Silverlight%20Ecosystem.pptx" frameborder="0" marginwidth="0" scrolling="no">
          </iframe>
        </p>
        <p>
Today’s Silverlight Firestarter in Atlanta was a remarkable event due in large part
to the remarkable audience.  We started off with about 110 attendees, and while
some left throughout the day, just as many came in to replace them.  By my session,
which was the last presentation of the Firestarter, the audience was still enthusiastic
and responsive – really amazing considering they’d been receiving a massive Silverlight
brain-dump for the past nine hours from some of the best Silverlight developers and
architects in Atlanta.
</p>
        <p>
As promised, I am posting the various websites I discussed during my presentation
on the Silverlight Ecosystem – the combination of corporate and community resources
that make up Silverlight.
</p>
        <p>
          <strong>
          </strong>
        </p>
        <p>
          <strong>Silverlight Control Suites:</strong>
        </p>
        <p>
The Silverlight Toolkit: <a href="http://silverlight.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24246">http://silverlight.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24246</a></p>
        <p>
SL Extensions and Silverlight Contrib: <a href="http://www.slextensions.net">http://www.slextensions.net</a></p>
        <p>
Telerik: <a href="http://www.telerik.com/products/silverlight.aspx">http://www.telerik.com/products/silverlight.aspx</a></p>
        <p>
Component Art: <a href="http://www.componentart.com/">http://www.componentart.com/</a></p>
        <p>
ComponentOne: <a href="http://www.componentone.com/">http://www.componentone.com/</a></p>
        <p>
Infragistics: <a href="http://www.infragistics.com/">http://www.infragistics.com/</a></p>
        <p>
Cellbi: <a href="http://www.cellbi.com/default.aspx">http://www.cellbi.com/default.aspx</a></p>
        <p>
DevExpress: <a href="http://www.devexpress.com/">http://www.devexpress.com/</a></p>
        <p>
Divelements: <a href="http://www.divelements.co.uk/silverlight/">http://www.divelements.co.uk/silverlight/</a></p>
        <p>
FarPoint: <a href="http://lab.fpoint.com/inputsilverlight/">http://lab.fpoint.com/inputsilverlight/</a></p>
        <p>
Netika Tech: <a href="http://www.netikatech.com/products/toolkit">http://www.netikatech.com/products/toolkit</a></p>
        <p>
Intersoft: <a href="http://www.intersoftpt.com/">http://www.intersoftpt.com/</a></p>
        <p>
Vectorlight: <a href="http://www.vectorlight.net/controls.aspx">http://www.vectorlight.net/controls.aspx</a></p>
        <p>
Visifire: <a href="http://visifire.com/">http://visifire.com/</a></p>
        <p>
Xceed: <a href="http://xceed.com/Upload_Silverlight_Demo.html">http://xceed.com/Upload_Silverlight_Demo.html</a></p>
        <p>
 
</p>
        <p>
          <strong>Silverlight Book Recommendations:</strong>
        </p>
        <p>
          <a href="http://www.amazon.com/Pro-Silverlight-3-Matthew-MacDonald/dp/1430223812/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1250995733&amp;sr=1-1" target="_blank">Pro
Silverlight 3 in C#</a> – Matthew MacDonald (Great reference work)
</p>
        <p>
          <a href="http://www.amazon.com/Silverlight-2-Action-Chad-Campbell/dp/1933988428/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1250995801&amp;sr=1-1" target="_blank">Silverlight
2 in Action</a> – Campbell &amp; Stockton (Excellent beginner’s book)
</p>
        <p>
          <a href="http://www.amazon.com/Foundation-Expression-Blend-3-Silverlight/dp/1430219505/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1250995857&amp;sr=1-1" target="_blank">Foundation
Expression Blend 3 with Silverlight</a> - Victor Gaudioso 
</p>
        <p>
          <a href="http://www.amazon.com/Foundation-Silverlight-Animation-Jeff-Paries/dp/143022407X/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1251068481&amp;sr=1-1" target="_blank">Foundation
Silverlight 3 Animation</a> – Jeff Paries 
</p>
        <p>
          <a href="http://www.amazon.com/Data-Driven-Services-Silverlight-John-Papa/dp/0596523092/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1250996015&amp;sr=1-1" target="_blank">Data-Driven
Services with Silverlight 2</a> – John Papa
</p>
        <p>
 
</p>
        <p>
          <strong>Silverlight Tutorials:</strong>
        </p>
        <p>
          <a href="http://channel9.msdn.com/Search/Default.aspx?Term=Silverlight&amp;Type=site" target="_blank">Channel
9</a>
        </p>
        <p>
          <a href="http://silverlight.net/learn/tutorials.aspx">http://silverlight.net/learn/tutorials.aspx</a>
        </p>
        <p>
 
</p>
        <p>
          <strong>Silverlight Blogs:</strong>
        </p>
        <p>
          <a href="http://silverlight.net/blogs/jesseliberty/" target="_blank">The Silverlight
Geek (Jesse Liberty)</a>
        </p>
        <p>
          <a href="http://timheuer.com/blog/" target="_blank">method ~ of ~ failed (Tim Heuer)</a>
        </p>
        <p>
          <a href="http://blogs.msdn.com/brada/" target="_blank">Brad Abrams</a>
        </p>
        <p>
          <a href="http://wildermuth.com/" target="_blank">Shawn Wildermuth</a>
        </p>
        <p>
          <a href="http://www.wintellect.com/CS/blogs/jprosise/" target="_blank">Jeff Prosise</a>
        </p>
        <p>
          <a href="http://www.85turns.com/" target="_blank">85 Turns (Corey Schuman)</a>
        </p>
        <p>
          <a href="http://weblogs.asp.net/dwahlin/default.aspx" target="_blank">Dan Wahlin</a>
        </p>
        <p>
          <a href="http://adamkinney.com/" target="_blank">Adam Kinney</a>
        </p>
        <p>
          <a href="http://www.charlespetzold.com/blog/blog.xml" target="_blank">Charles Petzold</a>
        </p>
        <p>
          <a href="http://pagebrooks.com/" target="_blank">Page Brooks</a>
        </p>
        <p>
          <a href="http://www.robzelt.com/blog/" target="_blank">Rob Zelt</a>
        </p>
        <p>
 
</p>
        <p>
          <strong>Silverlight Forums:</strong>
        </p>
        <p>
          <a href="http://silverlight.net/forums/">http://silverlight.net/forums/</a> (You can
usually get your SL questions answered within a day, if not within minutes, at the
silverlight.net forums)
</p>
        <p>
          <a href="http://silverlight.net/community/communitygallery.aspx">http://silverlight.net/community/communitygallery.aspx</a> (An
excellent place to look for some inspiration)
</p>
        <p>
 
</p>
        <p>
          <strong>Free Silverlight Code:</strong>
        </p>
        <p>
          <a title="http://www.codeplex.com/site/search?projectSearchText=silverlight" href="http://www.codeplex.com/site/search?projectSearchText=silverlight">http://www.codeplex.com/site/search?projectSearchText=silverlight</a>
        </p>
        <p>
 
</p>
        <p>
          <strong>Silverlight Contests:</strong>
        </p>
        <p>
          <a href="http://telerikwatch.com/2009/07/telerik-silverlight-contest-win-500.html">http://telerikwatch.com/2009/07/telerik-silverlight-contest-win-500.html</a> (Due
September 14th)
</p>
        <p>
          <a href="http://www.componentart.com/community/competition2009/">http://www.componentart.com/community/competition2009/</a> (Due
September 22nd)
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=bf4f6f9d-8ec7-4e20-a4dd-1fdb7bdd372b" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Silverlight Resources</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,bf4f6f9d-8ec7-4e20-a4dd-1fdb7bdd372b.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/SilverlightResources.aspx</link>
      <pubDate>Sun, 23 Aug 2009 03:05:22 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ATL-Silverlight-Firestarter-logo_resized" border="0" alt="ATL-Silverlight-Firestarter-logo_resized" src="http://www.imaginativeuniversal.com/blog/content/binary/WindowsLiveWriter/SilverlightResources_1447C/ATL-Silverlight-Firestarter-logo_resized_3.png" width="380" height="95" /&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-ef92193c4471bd9e.skydrive.live.com/embedrowdetail.aspx/.Public/The%20Silverlight%20Ecosystem.pptx" frameborder="0" marginwidth="0" scrolling="no"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;
Today’s Silverlight Firestarter in Atlanta was a remarkable event due in large part
to the remarkable audience.&amp;#160; We started off with about 110 attendees, and while
some left throughout the day, just as many came in to replace them.&amp;#160; By my session,
which was the last presentation of the Firestarter, the audience was still enthusiastic
and responsive – really amazing considering they’d been receiving a massive Silverlight
brain-dump for the past nine hours from some of the best Silverlight developers and
architects in Atlanta.
&lt;/p&gt;
&lt;p&gt;
As promised, I am posting the various websites I discussed during my presentation
on the Silverlight Ecosystem – the combination of corporate and community resources
that make up Silverlight.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Silverlight Control Suites:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
The Silverlight Toolkit: &lt;a href="http://silverlight.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24246"&gt;http://silverlight.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24246&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
SL Extensions and Silverlight Contrib: &lt;a href="http://www.slextensions.net"&gt;http://www.slextensions.net&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Telerik: &lt;a href="http://www.telerik.com/products/silverlight.aspx"&gt;http://www.telerik.com/products/silverlight.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Component Art: &lt;a href="http://www.componentart.com/"&gt;http://www.componentart.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
ComponentOne: &lt;a href="http://www.componentone.com/"&gt;http://www.componentone.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Infragistics: &lt;a href="http://www.infragistics.com/"&gt;http://www.infragistics.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Cellbi: &lt;a href="http://www.cellbi.com/default.aspx"&gt;http://www.cellbi.com/default.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
DevExpress: &lt;a href="http://www.devexpress.com/"&gt;http://www.devexpress.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Divelements: &lt;a href="http://www.divelements.co.uk/silverlight/"&gt;http://www.divelements.co.uk/silverlight/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
FarPoint: &lt;a href="http://lab.fpoint.com/inputsilverlight/"&gt;http://lab.fpoint.com/inputsilverlight/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Netika Tech: &lt;a href="http://www.netikatech.com/products/toolkit"&gt;http://www.netikatech.com/products/toolkit&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Intersoft: &lt;a href="http://www.intersoftpt.com/"&gt;http://www.intersoftpt.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Vectorlight: &lt;a href="http://www.vectorlight.net/controls.aspx"&gt;http://www.vectorlight.net/controls.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Visifire: &lt;a href="http://visifire.com/"&gt;http://visifire.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Xceed: &lt;a href="http://xceed.com/Upload_Silverlight_Demo.html"&gt;http://xceed.com/Upload_Silverlight_Demo.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Silverlight Book Recommendations:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/Pro-Silverlight-3-Matthew-MacDonald/dp/1430223812/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1250995733&amp;amp;sr=1-1" target="_blank"&gt;Pro
Silverlight 3 in C#&lt;/a&gt; – Matthew MacDonald (Great reference work)
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/Silverlight-2-Action-Chad-Campbell/dp/1933988428/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1250995801&amp;amp;sr=1-1" target="_blank"&gt;Silverlight
2 in Action&lt;/a&gt; – Campbell &amp;amp; Stockton (Excellent beginner’s book)
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/Foundation-Expression-Blend-3-Silverlight/dp/1430219505/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1250995857&amp;amp;sr=1-1" target="_blank"&gt;Foundation
Expression Blend 3 with Silverlight&lt;/a&gt; - Victor Gaudioso 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/Foundation-Silverlight-Animation-Jeff-Paries/dp/143022407X/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1251068481&amp;amp;sr=1-1" target="_blank"&gt;Foundation
Silverlight 3 Animation&lt;/a&gt; – Jeff Paries 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/Data-Driven-Services-Silverlight-John-Papa/dp/0596523092/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1250996015&amp;amp;sr=1-1" target="_blank"&gt;Data-Driven
Services with Silverlight 2&lt;/a&gt; – John Papa
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Silverlight Tutorials:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://channel9.msdn.com/Search/Default.aspx?Term=Silverlight&amp;amp;Type=site" target="_blank"&gt;Channel
9&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://silverlight.net/learn/tutorials.aspx"&gt;http://silverlight.net/learn/tutorials.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Silverlight Blogs:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://silverlight.net/blogs/jesseliberty/" target="_blank"&gt;The Silverlight
Geek (Jesse Liberty)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://timheuer.com/blog/" target="_blank"&gt;method ~ of ~ failed (Tim Heuer)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blogs.msdn.com/brada/" target="_blank"&gt;Brad Abrams&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://wildermuth.com/" target="_blank"&gt;Shawn Wildermuth&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.wintellect.com/CS/blogs/jprosise/" target="_blank"&gt;Jeff Prosise&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.85turns.com/" target="_blank"&gt;85 Turns (Corey Schuman)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://weblogs.asp.net/dwahlin/default.aspx" target="_blank"&gt;Dan Wahlin&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://adamkinney.com/" target="_blank"&gt;Adam Kinney&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.charlespetzold.com/blog/blog.xml" target="_blank"&gt;Charles Petzold&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pagebrooks.com/" target="_blank"&gt;Page Brooks&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.robzelt.com/blog/" target="_blank"&gt;Rob Zelt&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Silverlight Forums:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://silverlight.net/forums/"&gt;http://silverlight.net/forums/&lt;/a&gt; (You can
usually get your SL questions answered within a day, if not within minutes, at the
silverlight.net forums)
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://silverlight.net/community/communitygallery.aspx"&gt;http://silverlight.net/community/communitygallery.aspx&lt;/a&gt; (An
excellent place to look for some inspiration)
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Free Silverlight Code:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://www.codeplex.com/site/search?projectSearchText=silverlight" href="http://www.codeplex.com/site/search?projectSearchText=silverlight"&gt;http://www.codeplex.com/site/search?projectSearchText=silverlight&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Silverlight Contests:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://telerikwatch.com/2009/07/telerik-silverlight-contest-win-500.html"&gt;http://telerikwatch.com/2009/07/telerik-silverlight-contest-win-500.html&lt;/a&gt; (Due
September 14th)
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.componentart.com/community/competition2009/"&gt;http://www.componentart.com/community/competition2009/&lt;/a&gt; (Due
September 22nd)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=bf4f6f9d-8ec7-4e20-a4dd-1fdb7bdd372b" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,bf4f6f9d-8ec7-4e20-a4dd-1fdb7bdd372b.aspx</comments>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/blog/Trackback.aspx?guid=62eb4233-38ef-4461-8ff4-285ca75cb4af</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/blog/PermaLink,guid,62eb4233-38ef-4461-8ff4-285ca75cb4af.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/blog/CommentView,guid,62eb4233-38ef-4461-8ff4-285ca75cb4af.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=62eb4233-38ef-4461-8ff4-285ca75cb4af</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I had every intention of writing the sequel to Reporting Services and WCF, but life
has caught up.
</p>
        <p>
I’ve been busy working with <a href="http://www.85turns.com/" target="_blank">Corey
Schuman</a> on throwing the <a href="http://www.silverlightatlanta.net/Firestarter/minisite.html" target="_blank">Atlanta
Silverlight Firestarter</a> Event, for which I also need to finish practicing a short
presentation on Silverlight resources.  
</p>
        <p>
Besides that, I’ve also been working with several Atlanta software community people
on organizing a Leading Edge Microsoft User Group.  The goal of the group is
to cover the CTP drops and Microsoft Research bits that do not normally get covered
in the standard user groups.  You can find our website here: <a href="http://www.alemug.net">www.alemug.net</a> .
</p>
        <p>
So it’s been a busy couple of weeks.  During that time, Philip Munz, Ioan Hudea,
Joe Imad and Robert J. Smith have fed my zombie jones with a mathematical model of
zombie outbreaks: <a title="http://www.mathstat.uottawa.ca/~rsmith/Zombies.pdf" href="http://www.mathstat.uottawa.ca/~rsmith/Zombies.pdf">http://www.mathstat.uottawa.ca/~rsmith/Zombies.pdf</a></p>
        <p>
I have every intention of continuing with the WCF article.  After that, I also
intend to do a walkthrough of the steps required to build a WPF application using
the MVVM pattern – I don’t think there are any breakdown articles on the web about
this – followed by posts about MVVM in Silverlight and a comparison of various UI
design patterns – MVVM, MVP (PV and SC), MVC.  Finally, I want to post about
a dream (a vision?) I had about Martin Fowler in the year 2029.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=62eb4233-38ef-4461-8ff4-285ca75cb4af" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Between posts …</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/blog/PermaLink,guid,62eb4233-38ef-4461-8ff4-285ca75cb4af.aspx</guid>
      <link>http://www.imaginativeuniversal.com/blog/BetweenPosts.aspx</link>
      <pubDate>Thu, 20 Aug 2009 09:51:00 GMT</pubDate>
      <description>&lt;p&gt;
I had every intention of writing the sequel to Reporting Services and WCF, but life
has caught up.
&lt;/p&gt;
&lt;p&gt;
I’ve been busy working with &lt;a href="http://www.85turns.com/" target="_blank"&gt;Corey
Schuman&lt;/a&gt; on throwing the &lt;a href="http://www.silverlightatlanta.net/Firestarter/minisite.html" target="_blank"&gt;Atlanta
Silverlight Firestarter&lt;/a&gt; Event, for which I also need to finish practicing a short
presentation on Silverlight resources.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
Besides that, I’ve also been working with several Atlanta software community people
on organizing a Leading Edge Microsoft User Group.&amp;#160; The goal of the group is
to cover the CTP drops and Microsoft Research bits that do not normally get covered
in the standard user groups.&amp;#160; You can find our website here: &lt;a href="http://www.alemug.net"&gt;www.alemug.net&lt;/a&gt; .
&lt;/p&gt;
&lt;p&gt;
So it’s been a busy couple of weeks.&amp;#160; During that time, Philip Munz, Ioan Hudea,
Joe Imad and Robert J. Smith have fed my zombie jones with a mathematical model of
zombie outbreaks: &lt;a title="http://www.mathstat.uottawa.ca/~rsmith/Zombies.pdf" href="http://www.mathstat.uottawa.ca/~rsmith/Zombies.pdf"&gt;http://www.mathstat.uottawa.ca/~rsmith/Zombies.pdf&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I have every intention of continuing with the WCF article.&amp;#160; After that, I also
intend to do a walkthrough of the steps required to build a WPF application using
the MVVM pattern – I don’t think there are any breakdown articles on the web about
this – followed by posts about MVVM in Silverlight and a comparison of various UI
design patterns – MVVM, MVP (PV and SC), MVC.&amp;#160; Finally, I want to post about
a dream (a vision?) I had about Martin Fowler in the year 2029.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/blog/aggbug.ashx?id=62eb4233-38ef-4461-8ff4-285ca75cb4af" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/blog/CommentView,guid,62eb4233-38ef-4461-8ff4-285ca75cb4af.aspx</comments>
      <category>Clip Show</category>
    </item>
  </channel>
</rss>