<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Rule's Roost</title><link>http://blogs.msdn.com/b/jrule/</link><description>Jeremy Rule&amp;#39;s blog</description><dc:language>en-US</dc:language><generator>Telligent Community 5.6.583.21163 (Build: 5.6.583.21163)</generator><item><title>{EAV:2cd52a88cd88f451}</title><link>http://blogs.msdn.com/b/jrule/archive/2012/02/29/eav-2cd52a88cd88f451.aspx</link><pubDate>Wed, 29 Feb 2012 18:33:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10274710</guid><dc:creator>Jeremy Rule</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=10274710</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2012/02/29/eav-2cd52a88cd88f451.aspx#comments</comments><description>&lt;p&gt;{EAV:2cd52a88cd88f451}&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10274710" width="1" height="1"&gt;</description></item><item><title>Using Cloud Services from Second Life</title><link>http://blogs.msdn.com/b/jrule/archive/2009/04/22/using-cloud-services-from-second-life.aspx</link><pubDate>Thu, 23 Apr 2009 02:02:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9563462</guid><dc:creator>jrule</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=9563462</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2009/04/22/using-cloud-services-from-second-life.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jrule/WindowsLiveWriter/UsingCloudServicesfromSecondLife_C227/online_small_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="online_small" border="0" alt="online_small" src="http://blogs.msdn.com/blogfiles/jrule/WindowsLiveWriter/UsingCloudServicesfromSecondLife_C227/online_small_thumb.jpg" width="197" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I was playing around with building scripted objects in &lt;a href="http://secondlife.com/"&gt;Second Life&lt;/a&gt; and ran across a function to pull text from the web. I thought it might be neat to create Live Messenger buddy object in Second Life that showed whether I was online or offline. I figured I could query the &lt;a href="http://msdn.microsoft.com/en-us/library/bb936688.aspx"&gt;Windows Live Presence API&lt;/a&gt; directly from script and be done. Unfortunately it turns out there is a bit of a gap between Second Life and Windows Live. The Presence API serves up information by way of &lt;a href="http://en.wikipedia.org/wiki/JSON"&gt;JSON&lt;/a&gt;. Second Life does not know what to do with JSON file coming back as the payload and gives an error.&lt;/p&gt;  &lt;p&gt;Given this gap, I thought &lt;a href="http://www.microsoft.com/azure/default.mspx"&gt;Azure&lt;/a&gt; might make a nice bridge. I could call the Live Presence API from a cloud based service, reproduce the information in a very simple format for Second Life, and then consume the new service with an HTTP call in Second Life. &lt;/p&gt;  &lt;p&gt;I had to accomplish three things in order to get everything wired up.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Put something in the cloud to provide a simple service&amp;#160; &lt;/li&gt;    &lt;li&gt;Consume JSON from server code instead of a browser &lt;/li&gt;    &lt;li&gt;Connect Second Life to Azure &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;To get started, I registered for the &lt;a href="http://www.microsoft.com/azure/register.mspx"&gt;Azure Community Technical Preview&lt;/a&gt;. This gave me a sandbox in the cloud to play with and I downloaded the free &lt;a href="http://www.microsoft.com/express/vwd/"&gt;Visual Studio 2008 Web Developer 2008&lt;/a&gt; which provided all the power I needed for this little project. Once in Visual Studio I created a new Web Cloud Service and used the following code. &lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Net;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.IO;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Text;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Runtime.Serialization.Json; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; SecondLife_WebRole&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt;     [Serializable]&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt;  10:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Presence&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt;  11:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt;  12:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; status;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt;  13:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; displayName;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt;  14:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt;  15:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt;  16:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; _Default : System.Web.UI.Page&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt;  17:&lt;/span&gt;     {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt;  18:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; LiveUrl = &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt;  19:&lt;/span&gt;          &lt;span style="color: #006080"&gt;&amp;quot;http://messenger.services.live.com/users/5a11680377739a32@apps.messenger.live.com/presence&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt;  20:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt;  21:&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt;  22:&lt;/span&gt;         {&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt;  23:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// Make a web request to Live service&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum24"&gt;  24:&lt;/span&gt;             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(LiveUrl);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum25"&gt;  25:&lt;/span&gt;             HttpWebResponse response = (HttpWebResponse)request.GetResponse();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum26"&gt;  26:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum27"&gt;  27:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// Hydrate a .Net object from the JSON response&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum28"&gt;  28:&lt;/span&gt;             Stream receiveStream = response.GetResponseStream();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum29"&gt;  29:&lt;/span&gt;             DataContractJsonSerializer ser = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; DataContractJsonSerializer(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(Presence));&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum30"&gt;  30:&lt;/span&gt;             Presence presence = ser.ReadObject(receiveStream) &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; Presence;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum31"&gt;  31:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum32"&gt;  32:&lt;/span&gt;             &lt;span style="color: #008000"&gt;// Output very simple text so Second Life can consume it&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum33"&gt;  33:&lt;/span&gt;             Response.Clear();&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum34"&gt;  34:&lt;/span&gt;             Response.ContentType = &lt;span style="color: #006080"&gt;&amp;quot;text/plain&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum35"&gt;  35:&lt;/span&gt;             Response.Write(presence.status + &lt;span style="color: #006080"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum36"&gt;  36:&lt;/span&gt;             Response.Write(presence.displayName + &lt;span style="color: #006080"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum37"&gt;  37:&lt;/span&gt;         }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum38"&gt;  38:&lt;/span&gt;     }&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum39"&gt;  39:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I was pretty happy that the .NET Framework had a JSON helper class and a rich language with C# to work with the data. This code worked fine from an ASP.Net application but not from a cloud application. Turns out I needed to set enableNativeCodeExecution to true so that the stream classes would not hit a security exception. &lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #800000"&gt;xml&lt;/span&gt; &lt;span style="color: #ff0000"&gt;version&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;encoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt;?&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ServiceDefinition&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;SecondLife&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt;   3:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;WebRole&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;WebRole&amp;quot;&lt;/span&gt; &lt;strong&gt;&lt;span style="color: #ff0000"&gt;enableNativeCodeExecution&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;/strong&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;InputEndpoints&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt;   5:&lt;/span&gt;       &lt;span style="color: #008000"&gt;&amp;lt;!-- Must use port 80 for http and port 443 for https when running in the cloud --&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt;   6:&lt;/span&gt;       &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;InputEndpoint&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;HttpIn&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;protocol&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;port&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;80&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;InputEndpoints&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt;   8:&lt;/span&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;WebRole&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt;   9:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ServiceDefinition&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Once I had that working, I used the cloud deploy feature of Azure to get the service hosted. It worked and my service was now serving something easily consumable by Second Life:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jrule/WindowsLiveWriter/UsingCloudServicesfromSecondLife_C227/browser_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="browser" border="0" alt="browser" src="http://blogs.msdn.com/blogfiles/jrule/WindowsLiveWriter/UsingCloudServicesfromSecondLife_C227/browser_thumb.jpg" width="779" height="318" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Finally I went into Second Life and added script to a buddy object created all in-game.&amp;#160; The Second Life script simply makes an HTTP request to the cloud service and returns the very-simple-to-parse name and status. If I am online, i set the object to light blue and glowing and if I am offline, I dim the object and use a darker color.&lt;/p&gt;

&lt;div&gt;
  &lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;&lt;span style="color: #008000"&gt;// Use an Azure service in the cloud to get Live Messenger status&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; AZUREHOST = &lt;span style="color: #006080"&gt;&amp;quot;http://secondlife.cloudapp.net/Default.aspx&amp;quot;&lt;/span&gt;;&lt;br /&gt;key http_request_id;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;default&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    touch_start(integer total_number)&lt;br /&gt;    {&lt;br /&gt;        llSetText(&lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;, &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; response = &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;;&lt;br /&gt;        http_request_id = llHTTPRequest(AZUREHOST, [], &lt;span style="color: #006080"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    http_response(key request_id, integer status, list metadata, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; body)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (request_id == http_request_id)&lt;br /&gt;        {&lt;br /&gt;            list lines = llParseString2List(body, [&lt;span style="color: #006080"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;], []);&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; status = llList2String(lines, 0);&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; name = llList2String(lines, 1);&lt;br /&gt;  &lt;br /&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (status == &lt;span style="color: #006080"&gt;&amp;quot;Online&amp;quot;&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                llSetText(name + &lt;span style="color: #006080"&gt;&amp;quot; is Online&amp;quot;&lt;/span&gt;, &amp;lt;0,0,1&amp;gt;, 1);&lt;br /&gt;                llSetLinkColor(LINK_SET, &amp;lt;0.15686, 0.58039, 1.00000&amp;gt;, ALL_SIDES);&lt;br /&gt;                llSetLinkPrimitiveParams(LINK_SET, [PRIM_GLOW, ALL_SIDES, .1] );&lt;br /&gt;                llSetLinkPrimitiveParams(LINK_SET, [PRIM_BUMP_SHINY, ALL_SIDES, PRIM_SHINY_LOW, PRIM_BUMP_BRIGHT] );&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; &lt;span style="color: #008000"&gt;// user offline&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                llSetText(&lt;span style="color: #006080"&gt;&amp;quot;User Offline&amp;quot;&lt;/span&gt;, &amp;lt;0,0,1&amp;gt;, 1);&lt;br /&gt;                llSetLinkColor(LINK_SET, &amp;lt;0.38824, 0.38824, .38824&amp;gt;, ALL_SIDES);&lt;br /&gt;                llSetLinkPrimitiveParams(LINK_SET, [PRIM_GLOW, ALL_SIDES, 0] );&lt;br /&gt;                llSetLinkPrimitiveParams(LINK_SET, [PRIM_BUMP_SHINY, ALL_SIDES, PRIM_SHINY_NONE, PRIM_BUMP_NONE] );&lt;br /&gt;                &lt;br /&gt;            }               &lt;br /&gt;            &lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div&gt;&amp;#160;&lt;/div&gt;

&lt;div&gt;The Messenger buddy in second life is darker with no glow if I am logged out of Messenger. For Second Life builders, buddy is 10 prims big: 
  &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jrule/WindowsLiveWriter/UsingCloudServicesfromSecondLife_C227/Offline_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Offline" border="0" alt="Offline" src="http://blogs.msdn.com/blogfiles/jrule/WindowsLiveWriter/UsingCloudServicesfromSecondLife_C227/Offline_thumb.jpg" width="752" height="566" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;… but when I’m logged into Messenger, buddy lights up like a Christmas light:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;a href="http://blogs.msdn.com/blogfiles/jrule/WindowsLiveWriter/UsingCloudServicesfromSecondLife_C227/Online_2.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Online" border="0" alt="Online" src="http://blogs.msdn.com/blogfiles/jrule/WindowsLiveWriter/UsingCloudServicesfromSecondLife_C227/Online_thumb.jpg" width="752" height="666" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;So what's the big deal? Why use Azure for such a little thing? I think the answer is that it is such a &amp;quot;little thing.&amp;quot; As a developer I just wanted to get my service online and working. I didn't want to have to go find a hosting provider, sign up and spend a bunch of money, and then take a few days trying to get everything working. I'd rather just spend time on getting the code to work. If I add significant features later on, or make the service public, I am confident Azure will scale with me. Again, I can just focus on the functionality of the service and not worry about scale and configuration.&lt;/p&gt;

&lt;p&gt;When I account for my time on this project, I’m pretty happy with the breakdown. Much of the time was spent on community: &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/user?user=Ben%20Williams%20-%20MSFT"&gt;Ben Williams&lt;/a&gt; pointed me towards the Windows Live Presence API. &lt;a href="http://blogs.msdn.com/jimoneil/"&gt;Jim O’Neil&lt;/a&gt; gave me a rough architecture by suggesting I try a WebRequest and then use the JSON Serializer.&amp;#160; The venerable &lt;a href="http://blog.smarx.com/"&gt;Steve Marx&lt;/a&gt; helped me debug by showing me the enableNativeCodeExecution flag. Second Life resident and coffee machine builder, &lt;a href="http://slurl.com/secondlife/0031%20Boerderij/111/116/22"&gt;amira Mathilde&lt;/a&gt; helped me craft the “buddy” object so it wasn’t terrible looking. &lt;/p&gt;

&lt;p&gt;My Second Life resident is “Macaw Roogus” so say hi to me if you see me online and maybe we can find some more interesting things to build.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9563462" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jrule/archive/tags/contest/">contest</category><category domain="http://blogs.msdn.com/b/jrule/archive/tags/azure/">azure</category><category domain="http://blogs.msdn.com/b/jrule/archive/tags/JSON/">JSON</category><category domain="http://blogs.msdn.com/b/jrule/archive/tags/second+life/">second life</category><category domain="http://blogs.msdn.com/b/jrule/archive/tags/cloud/">cloud</category></item><item><title>The Ingenuity Point Contest</title><link>http://blogs.msdn.com/b/jrule/archive/2007/08/21/the-ingenuity-point-contest.aspx</link><pubDate>Wed, 22 Aug 2007 02:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4500546</guid><dc:creator>jrule</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=4500546</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2007/08/21/the-ingenuity-point-contest.aspx#comments</comments><description>&lt;P&gt;June 26 - October 31 2007&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.theingenuitypoint.com/main/default.aspx"&gt;http://www.theingenuitypoint.com/main/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Microsoft is holding a contest to showcase applications written for healthcare, clean technology, and education. Just looking through the People's Choice Gallery... some neat entries and pretty good odds of winning a trip to France.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4500546" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jrule/archive/tags/isv/">isv</category><category domain="http://blogs.msdn.com/b/jrule/archive/tags/contest/">contest</category></item><item><title>Looking for a Solutions Architect in the SF Bay Area</title><link>http://blogs.msdn.com/b/jrule/archive/2007/07/17/looking-for-a-solutions-architect-in-the-sf-bay-area.aspx</link><pubDate>Tue, 17 Jul 2007 20:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3920457</guid><dc:creator>jrule</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=3920457</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2007/07/17/looking-for-a-solutions-architect-in-the-sf-bay-area.aspx#comments</comments><description>&lt;P&gt;&lt;A href="http://members.microsoft.com/careers/search/details.aspx?JobID=DCDAF7C0-9826-4DD3-B8AD-11B7F4EC41E1"&gt;http://members.microsoft.com/careers/search/details.aspx?JobID=DCDAF7C0-9826-4DD3-B8AD-11B7F4EC41E1&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Drop me a note with your resume if you are interested!&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3920457" width="1" height="1"&gt;</description></item><item><title>Microsoft SQL Server 2005 Administrator's Companion</title><link>http://blogs.msdn.com/b/jrule/archive/2007/01/03/microsoft-sql-server-2005-administrator-s-companion.aspx</link><pubDate>Thu, 04 Jan 2007 02:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1407425</guid><dc:creator>jrule</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=1407425</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2007/01/03/microsoft-sql-server-2005-administrator-s-companion.aspx#comments</comments><description>&lt;P&gt;&lt;A title="SQL Server 2005 Administrator's Companion" href="http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?isbn=9780735621985" mce_href="http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?isbn=9780735621985"&gt;&lt;IMG style="WIDTH: 148px; HEIGHT: 180px" src="http://images.barnesandnoble.com/images/32620000/32622585.JPG" width=148 height=180 mce_src="http://images.barnesandnoble.com/images/32620000/32622585.JPG"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;My friend Burzin Patel co-authored a book on SQL Server. Get all your SQL Server knobs turned in the right direction with this book.&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1407425" width="1" height="1"&gt;</description></item><item><title>Prolog.NET? You bet!</title><link>http://blogs.msdn.com/b/jrule/archive/2006/01/03/508820.aspx</link><pubDate>Tue, 03 Jan 2006 20:15:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:508820</guid><dc:creator>jrule</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=508820</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2006/01/03/508820.aspx#comments</comments><description>&lt;P&gt;Eugene Asahara has launched &lt;A href="http://www.SoftCodedLogic.com"&gt;SoftCodedLogic.com&lt;/A&gt;. The same idea of soft coding UI and data has been extended to program logic. Eugene's implementation is a clever update to prolog to bring it into the world of SQL,&amp;nbsp;XML, and&amp;nbsp;.NET. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=508820" width="1" height="1"&gt;</description></item><item><title>Build Master: Microsoft's Software Configuration Management Best Practices</title><link>http://blogs.msdn.com/b/jrule/archive/2005/11/08/490657.aspx</link><pubDate>Wed, 09 Nov 2005 06:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:490657</guid><dc:creator>jrule</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=490657</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2005/11/08/490657.aspx#comments</comments><description>&lt;P&gt;My colleague, Vince Maraia, has come out with a book on configuration management called &lt;A href="http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?userid=uG0UkwwBwW&amp;amp;isbn=0321332059&amp;amp;itm=2"&gt;The Build Master&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://ec3.images-amazon.com/images/P/0321332059.01._AA240_SCLZZZZZZZ_.jpg"&gt; &lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=490657" width="1" height="1"&gt;</description></item><item><title>Windows for Musicians</title><link>http://blogs.msdn.com/b/jrule/archive/2005/10/31/487472.aspx</link><pubDate>Tue, 01 Nov 2005 00:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:487472</guid><dc:creator>jrule</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=487472</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2005/10/31/487472.aspx#comments</comments><description>&lt;P&gt;Jim Owen, a Technical Account Manager at Microsoft, made a clever song using keyboards and the Windows sounds. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.songfight.org/music/welcome_to/jimofseattle_wt.mp3"&gt;Have a listen.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=487472" width="1" height="1"&gt;</description></item><item><title>Partner Services Hiring - Bay Area - App. Dev. Consultant</title><link>http://blogs.msdn.com/b/jrule/archive/2005/04/19/409714.aspx</link><pubDate>Tue, 19 Apr 2005 22:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:409714</guid><dc:creator>jrule</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=409714</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2005/04/19/409714.aspx#comments</comments><description>&lt;P&gt;Are you gosu with .NET? &lt;A href="mailto:jrule@microsoft.com"&gt;Email me your resume&lt;/A&gt;. I'll get the full job description posted on the microsoft.com careers site soon.&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN&gt;Deep .Net development expertise&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Wingdings size=2&gt;&lt;SPAN&gt;n&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN&gt;C#, J# if possible&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Wingdings size=2&gt;&lt;SPAN&gt;n&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN&gt;Extensive experience with performance testing and optimization of .Net applications, and ASP.Net on IIS optimization&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN&gt;o&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN&gt;Profiling&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN&gt;o&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN&gt;Debugging with symbols and trouble shooting application bottlenecks&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN&gt;o&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN&gt;Analysis of performance data&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face="Courier New" size=2&gt;&lt;SPAN&gt;o&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN&gt;Expertise with a myriad of testing/profiling tools&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;FONT face=Arial size=2&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=409714" width="1" height="1"&gt;</description></item><item><title>The Excel Web Query and Predicting the Washington State Governor's Race</title><link>http://blogs.msdn.com/b/jrule/archive/2004/11/12/256794.aspx</link><pubDate>Fri, 12 Nov 2004 23:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:256794</guid><dc:creator>jrule</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=256794</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2004/11/12/256794.aspx#comments</comments><description>&lt;p&gt;Web Queries in Excel let you grab tabular data off of a web page without writing any code or messing with web services. I use this feature all the time as a manager trying to grab internal business data off of many different systems in order to analyze it. In this example, &lt;a href="http://www.rulesroost.com/images/blog/wagovrace.xls"&gt;&lt;font color="#800080"&gt;I build a computer model of the political race.&lt;/font&gt;&lt;/a&gt; The entire project can be done in less than 20 minutes. &lt;/p&gt; &lt;ol&gt; &lt;li&gt;Open Excel 2003 &lt;li&gt;Choose Data | Import External Data | New Web Query... &lt;li&gt;Browse to &lt;a href="http://vote.wa.gov/general/status.aspx"&gt;http://vote.wa.gov/general/status.aspx&lt;/a&gt;&amp;nbsp;and select the table&amp;nbsp;that lists ballots left to be counted by county.&amp;nbsp; &lt;br /&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.rulesroost.com/images/blog/wagovrace.xls"&gt;&lt;img src="http://www.rulesroost.com/images/blog/excel1.jpg" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;li&gt;After the table is imported do it again for the results in the race found so far found at &lt;a href="http://vote.wa.gov/general/resultsbycounty.aspx?o=3001&amp;amp;t=s"&gt;http://vote.wa.gov/general/resultsbycounty.aspx?o=3001&amp;amp;t=s&lt;/a&gt; &lt;br /&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.rulesroost.com/images/blog/wagovrace.xls"&gt;&lt;img src="http://www.rulesroost.com/images/blog/excel2.jpg" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;li&gt;You should now have both tables side-by-side in Excel. You can color and format them however you like: &lt;br /&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://www.rulesroost.com/images/blog/excel3.jpg" /&gt; &lt;/p&gt; &lt;li&gt;Create further columns to find the percentage a candidate gets from each county and then multiply that percentage against the remaining ballots in that county. &lt;br /&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.rulesroost.com/images/blog/wagovrace.xls"&gt;&lt;img src="http://www.rulesroost.com/images/blog/excel4.jpg" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;li&gt;Finally, total the projected votes with the votes a candidate already has and you will arrive at a projected final outcome. &lt;br /&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.rulesroost.com/images/blog/wagovrace.xls"&gt;&lt;img src="http://www.rulesroost.com/images/blog/excel5.jpg" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;li&gt;Now here is the really cool part: whenever new totals are posted on the web sites you can update your spreadsheet with Data | Refresh Data. Excel keeps your nice formatting and fomulas and just gives you the new numbers.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;A final solution can be &lt;a href="http://www.rulesroost.com/images/blog/wagovrace.xls"&gt;&lt;font color="#800080"&gt;downloaded here.&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=256794" width="1" height="1"&gt;</description></item><item><title>Eugene's blog online</title><link>http://blogs.msdn.com/b/jrule/archive/2004/09/22/232911.aspx</link><pubDate>Wed, 22 Sep 2004 16:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:232911</guid><dc:creator>jrule</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=232911</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2004/09/22/232911.aspx#comments</comments><description>&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;Check it out. One of the most brilliant people I know:&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;&lt;A href="http://weblogs.asp.net/eugenea"&gt;http://weblogs.asp.net/eugenea&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=232911" width="1" height="1"&gt;</description></item><item><title>About Jeremy Rule</title><link>http://blogs.msdn.com/b/jrule/archive/2004/08/17/215942.aspx</link><pubDate>Tue, 17 Aug 2004 18:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:215942</guid><dc:creator>jrule</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=215942</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2004/08/17/215942.aspx#comments</comments><description>&lt;p&gt;&lt;font face="Tahoma" size="4"&gt;&lt;img src="http://www.rulesroost.com/photos/jeremy/jeremy_1_small.jpg" /&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Tahoma" size="4"&gt;Work&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Tahoma"&gt;I'm an engagement manager in Partner Services at Microsoft. We work with other software companies to help their development activities and ultimately decrease their time to market. You can find us &lt;/font&gt;&lt;a href="http://www.microsoft.com/partneradvantage"&gt;&lt;font face="Tahoma"&gt;on the web&lt;/font&gt;&lt;/a&gt;&lt;font face="Tahoma"&gt; or &lt;/font&gt;&lt;a href="mailto:jrule@microsoft.com"&gt;&lt;font face="Tahoma"&gt;email me&lt;/font&gt;&lt;/a&gt;&lt;font face="Tahoma"&gt; if you want more information on Partner Advantage.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Tahoma" size="4"&gt;Background&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Tahoma"&gt;I live in North Bend, Washington with my wife and two kids. I went to school at &lt;/font&gt;&lt;a href="http://www.cwu.edu/"&gt;&lt;font face="Tahoma"&gt;Central Washington University&lt;/font&gt;&lt;/a&gt;&lt;font face="Tahoma"&gt; studying cello and playing in the &lt;/font&gt;&lt;a href="http://symphony.artsyakima.org/"&gt;&lt;font face="Tahoma"&gt;Yakima Symphony&lt;/font&gt;&lt;/a&gt;&lt;font face="Tahoma"&gt;. After being bit by the computer bug I switched over to computer science and got a job working on systems programming for the university. Terry Niles, now retired, had &lt;/font&gt;&lt;a href="http://www.cwu.edu/~auxlib/prevappre.html"&gt;&lt;font face="Tahoma"&gt;this great apprentice program&lt;/font&gt;&lt;/a&gt;&lt;font face="Tahoma"&gt; which taught me about maintaining and improving production systems. Shortly before graduating I took&amp;nbsp;a job at &lt;/font&gt;&lt;a href="http://www.comtronic.com/"&gt;&lt;font face="Tahoma"&gt;Comtronic Systems&lt;/font&gt;&lt;/a&gt;&lt;font face="Tahoma"&gt; writing a Windows version of their debt collection software.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Tahoma"&gt;An unknown-at-the-time company, &lt;/font&gt;&lt;a href="http://www.enron.com/corp/"&gt;&lt;font face="Tahoma"&gt;Enron&lt;/font&gt;&lt;/a&gt;&lt;font face="Tahoma"&gt;, recruited me away and I went there for nearly four years. Enron was an exciting place to work and was growing extremely fast. I spent a lot of time on the trading floor helping traders use technology to gain an advantage. I left in '99 so I missed all the fireworks but I do have a good understanding of wholesale energy trading and financial derivatives. I've give a lectures at the colleges and universities titled "How Enron Made Money."&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Tahoma"&gt;In 1999 I moved back to the Seattle area to work for Microsoft as a consultant in what was Premier Support for Developers. These days I manage consultants who work with our ISV partners but I try to maintain my geeky&amp;nbsp;edge by blogging.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Tahoma" size="4"&gt;Interesting Trivia&lt;/font&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;font face="Tahoma"&gt;I play a mean electric cello. &lt;/font&gt; &lt;li&gt;&lt;font face="Tahoma"&gt;In one weekend I built a dotcom and sold the whole business. I'll blog about this later. &lt;/font&gt; &lt;li&gt;&lt;font face="Tahoma"&gt;I like to say I coined the term "web scraping" (yeah, I know it's based on "screen scraping.") &lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font face="Tahoma" size="4"&gt;Contact Me&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Tahoma"&gt;EMail: &lt;a href="mailto:jrule@microsoft.com"&gt;jrule@microsoft.com&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Tahoma"&gt;MSN Messenger : &lt;a href="mailto:macaw2000@hotmail.com"&gt;macaw2000@hotmail.com&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Tahoma"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Tahoma"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=215942" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jrule/archive/tags/Pages/">Pages</category></item><item><title>Dynamic Image Generation with ASP.Net</title><link>http://blogs.msdn.com/b/jrule/archive/2004/08/16/215393.aspx</link><pubDate>Mon, 16 Aug 2004 23:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:215393</guid><dc:creator>jrule</dc:creator><slash:comments>13</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=215393</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2004/08/16/215393.aspx#comments</comments><description>&lt;p&gt;&lt;font face="Tahoma" size="2"&gt;I've was playing around with image generation. Below is a picture of &lt;/font&gt;&lt;a href="http://www.livejournal.com/users/dragonguyver"&gt;&lt;font face="Tahoma" size="2"&gt;Josh who is a very interesting guy&lt;/font&gt;&lt;/a&gt;&lt;font face="Tahoma" size="2"&gt;. His picture worked quite well because it was a clean slate to write text on.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font face="Tahoma"&gt;The HTML tag &lt;/font&gt;&amp;lt;img src="http://www.rulesroost.com/josh.aspx?Text=Got%20Milk?"&amp;gt;&lt;/font&gt;&lt;/font&gt; &lt;font face="Tahoma" size="2"&gt;produces:&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;img style="COLOR: #000000" src="http://www.rulesroost.com/josh.aspx?Text=Got%20Milk?" /&gt; &lt;font face=""&gt;&lt;font face="Tahoma"&gt;&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font size="2"&gt;&lt;font face="Tahoma"&gt;And&amp;nbsp;&lt;/font&gt;&amp;lt;img src="&lt;font face="Tahoma"&gt;&lt;font face="Courier New"&gt;http://www.rulesroost.com/josh.aspx?Text=This%20is%20a%20much%20longer%20sentence."&amp;gt;&lt;/font&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Tahoma" size="2"&gt;shows:&lt;/font&gt;&lt;/p&gt;&lt;img src="http://www.rulesroost.com/josh.aspx?Text=This%20is%20a%20much%20longer%20sentence." /&gt; &lt;pre&gt;&lt;/pre&gt;&lt;pre style="COLOR: #000000"&gt;&lt;font face="Tahoma" size="2"&gt;&lt;/font&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre style="COLOR: #000000"&gt;&lt;font face="Tahoma" size="2"&gt;And here is the code for the aspx file:&lt;/font&gt;&lt;/pre&gt;&lt;pre style="COLOR: #000000"&gt;&lt;pre style="COLOR: #000000"&gt;&lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;1&lt;/span&gt;&amp;lt;%@ OutputCache Duration=&lt;font color="#004884"&gt;"500"&lt;/font&gt; VaryByParam=&lt;font color="#004884"&gt;"Text"&lt;/font&gt; %&amp;gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;2&lt;/span&gt;&amp;lt;%@ Page Language=&lt;font color="#004884"&gt;"C#"&lt;/font&gt; trace=&lt;font color="#004884"&gt;"false"&lt;/font&gt; Explicit=&lt;font color="#004884"&gt;"true"&lt;/font&gt; aspcompat=&lt;font color="#004884"&gt;"true"&lt;/font&gt; Debug=&lt;font color="#004884"&gt;"true"&lt;/font&gt; %&amp;gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;3&lt;/span&gt;&amp;lt;%@ Import Namespace=&lt;font color="#004884"&gt;"System"&lt;/font&gt; %&amp;gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;4&lt;/span&gt;&amp;lt;%@ Import Namespace=&lt;font color="#004884"&gt;"System.IO"&lt;/font&gt; %&amp;gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;5&lt;/span&gt;&amp;lt;%@ Import Namespace=&lt;font color="#004884"&gt;"System.Text"&lt;/font&gt; %&amp;gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;6&lt;/span&gt;&amp;lt;%@ Import Namespace=&lt;font color="#004884"&gt;"System.Drawing"&lt;/font&gt; %&amp;gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;7&lt;/span&gt;&amp;lt;%@ Import Namespace=&lt;font color="#004884"&gt;"System.Drawing.Imaging"&lt;/font&gt; %&amp;gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;8&lt;/span&gt;&amp;lt;%@ Import Namespace=&lt;font color="#004884"&gt;"System.Drawing.Text"&lt;/font&gt; %&amp;gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;9&lt;/span&gt;&amp;lt;%@ Import Namespace=&lt;font color="#004884"&gt;"System.Drawing.Drawing2D"&lt;/font&gt; %&amp;gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;10&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;11&lt;/span&gt;&amp;lt;script runat=&lt;font color="#004884"&gt;"server"&lt;/font&gt;&amp;gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;12&lt;/span&gt; &lt;font color="#0000ff"&gt;private&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; Page_Load(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, System.EventArgs e) &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;13&lt;/span&gt; { &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;14&lt;/span&gt; Bitmap bitmap = &lt;font color="#0000ff"&gt;new&lt;/font&gt; Bitmap(Server.MapPath(&lt;font color="#004884"&gt;"josh.bmp"&lt;/font&gt;)); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;15&lt;/span&gt; MemoryStream memStream = &lt;font color="#0000ff"&gt;new&lt;/font&gt; MemoryStream(); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;16&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;17&lt;/span&gt; &lt;font color="#008200"&gt;// generate image &lt;/font&gt;&lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;18&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;19&lt;/span&gt; &lt;font color="#008200"&gt;// Create a graphics object for drawing. &lt;/font&gt;&lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;20&lt;/span&gt; Graphics g = Graphics.FromImage(bitmap); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;21&lt;/span&gt; g.SmoothingMode = SmoothingMode.AntiAlias; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;22&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;23&lt;/span&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; width = bitmap.Width; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;24&lt;/span&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; height = bitmap.Height; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;25&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;26&lt;/span&gt; &lt;font color="#0000ff"&gt;string&lt;/font&gt; familyName = &lt;font color="#004884"&gt;"Tahoma"&lt;/font&gt;; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;27&lt;/span&gt; &lt;font color="#0000ff"&gt;string&lt;/font&gt; text = Request.Params[&lt;font color="#004884"&gt;"Text"&lt;/font&gt;]; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;28&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;29&lt;/span&gt; &lt;font color="#008200"&gt;// get a rectangle on his shirt &lt;/font&gt;&lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;30&lt;/span&gt; Rectangle rect = &lt;font color="#0000ff"&gt;new&lt;/font&gt; Rectangle(150, 216, 210, 135); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;31&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;32&lt;/span&gt; &lt;font color="#008200"&gt;// Set up the text font. &lt;/font&gt;&lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;33&lt;/span&gt; Font font; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;34&lt;/span&gt; font = &lt;font color="#0000ff"&gt;new&lt;/font&gt; Font(familyName, 16F, FontStyle.Regular); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;35&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;36&lt;/span&gt; &lt;font color="#008200"&gt;// Set up the text format. &lt;/font&gt;&lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;37&lt;/span&gt; StringFormat format = &lt;font color="#0000ff"&gt;new&lt;/font&gt; StringFormat(); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;38&lt;/span&gt; format.Alignment = StringAlignment.Center; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;39&lt;/span&gt; format.LineAlignment = StringAlignment.Center; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;40&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;41&lt;/span&gt; &lt;font color="#008200"&gt;// Create a path using the text and warp it to fit over his contour &lt;/font&gt;&lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;42&lt;/span&gt; GraphicsPath path = &lt;font color="#0000ff"&gt;new&lt;/font&gt; GraphicsPath(); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;43&lt;/span&gt; path.AddString(text, font.FontFamily, (&lt;font color="#0000ff"&gt;int&lt;/font&gt;) font.Style, font.Size, rect, format); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;44&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;45&lt;/span&gt; PointF[] points = &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;46&lt;/span&gt; { &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;47&lt;/span&gt; &lt;font color="#0000ff"&gt;new&lt;/font&gt; PointF(rect.X - 10, rect.Y - 8), &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;48&lt;/span&gt; &lt;font color="#0000ff"&gt;new&lt;/font&gt; PointF(rect.X + rect.Width - 20, rect.Y + 4), &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;49&lt;/span&gt; &lt;font color="#0000ff"&gt;new&lt;/font&gt; PointF(rect.X - 8, rect.Y + rect.Height - 15), &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;50&lt;/span&gt; &lt;font color="#0000ff"&gt;new&lt;/font&gt; PointF(rect.X + rect.Width - 10, rect.Y + rect.Height + 4) &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;51&lt;/span&gt; }; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;52&lt;/span&gt; Matrix matrix = &lt;font color="#0000ff"&gt;new&lt;/font&gt; Matrix(); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;53&lt;/span&gt; matrix.Translate(0F, 0F); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;54&lt;/span&gt; path.Warp(points, rect, matrix, WarpMode.Perspective, 0F); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;55&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;56&lt;/span&gt; &lt;font color="#008200"&gt;// Draw the text. &lt;/font&gt;&lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;57&lt;/span&gt; HatchBrush hatchBrush = &lt;font color="#0000ff"&gt;new&lt;/font&gt; HatchBrush( &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;58&lt;/span&gt; HatchStyle.LargeConfetti, &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;59&lt;/span&gt; Color.LightGray, &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;60&lt;/span&gt; Color.DarkGray); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;61&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;62&lt;/span&gt; g.FillPath(hatchBrush, path); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;63&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;64&lt;/span&gt; Response.Clear(); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;65&lt;/span&gt; Response.ContentType=&lt;font color="#004884"&gt;"image/jpeg"&lt;/font&gt;; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;66&lt;/span&gt; bitmap.Save(memStream, ImageFormat.Jpeg); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;67&lt;/span&gt; memStream.WriteTo(Response.OutputStream); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;68&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;69&lt;/span&gt; &lt;font color="#008200"&gt;// Clean up. &lt;/font&gt;&lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;70&lt;/span&gt; font.Dispose(); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;71&lt;/span&gt; hatchBrush.Dispose(); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;72&lt;/span&gt; g.Dispose(); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;73&lt;/span&gt; bitmap.Dispose(); &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;74&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;75&lt;/span&gt; } &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;76&lt;/span&gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;77&lt;/span&gt;&amp;lt;/script&amp;gt; &lt;br /&gt;&lt;span style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;78&lt;/span&gt;&lt;/pre&gt;&lt;pre style="COLOR: #000000"&gt;&amp;nbsp;&lt;/pre&gt;&lt;/font&gt;&lt;/pre&gt;&lt;pre style="COLOR: #000000"&gt;&lt;font face="Tahoma" size="2"&gt;Notice the Reponse.ContentType="image/jpeg" - that causes the output to be a picture and not HTML. &lt;/font&gt;&lt;/pre&gt;&lt;pre style="COLOR: #000000"&gt;&lt;font face="Tahoma" size="2"&gt;Also notice the word-wrap is done for me with the StringFormat object.&lt;/font&gt;&lt;/pre&gt;&lt;pre style="COLOR: #000000"&gt;&lt;font face="Tahoma" size="2"&gt;Other resources:&lt;/font&gt;&lt;/pre&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.codeproject.com/aspnet/AspNetCreateTextImage.asp"&gt;&lt;font face="Tahoma" size="2"&gt;The Code Project "How to Create Text Image on the fly with ASP.NET" article.&lt;/font&gt;&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.codeproject.com/aspnet/CaptchaImage.asp"&gt;&lt;font face="Tahoma" size="2"&gt;The Code Project "CAPTCHA Image" article.&lt;/font&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=215393" width="1" height="1"&gt;</description></item><item><title>Fark.com Photoshop Contest</title><link>http://blogs.msdn.com/b/jrule/archive/2004/08/09/211366.aspx</link><pubDate>Mon, 09 Aug 2004 19:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:211366</guid><dc:creator>jrule</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=211366</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2004/08/09/211366.aspx#comments</comments><description>&lt;P&gt;&lt;EM&gt;&lt;A href="http://forums.fark.com/cgi/fark/comments.pl?IDLink=1066684&amp;amp;mode=voteresults"&gt;&amp;#8220;Photoshop what the classic Nintendo games would have been like had they been owned by Microsoft originally&amp;#8221;&lt;/A&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;A few of my favorites:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://img.photobucket.com/albums/v293/jasjas/zelda.jpg"&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://photoshop.superdownloads.net/uploads/microsoftduckhunt.jpg"&gt; 
&lt;P&gt; 
&lt;P&gt;&lt;IMG src="http://photoshop.superdownloads.net/uploads/fark-nes-micro-8-9-04.jpg"&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=211366" width="1" height="1"&gt;</description></item><item><title>Data Protection API (DPAPI)</title><link>http://blogs.msdn.com/b/jrule/archive/2004/08/03/207304.aspx</link><pubDate>Tue, 03 Aug 2004 20:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:207304</guid><dc:creator>jrule</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=207304</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2004/08/03/207304.aspx#comments</comments><description>&lt;P&gt;I've noticed that some recent blog entries talk about the new .NET framework supporting Data Protection API. &lt;/P&gt;
&lt;P&gt;What is the Data Protection API? The DPAPI is used to hide secrets like connection strings and user credentials that are typically stored in a config file. Instead of storing the plain text, you can use DPAPI to encrypt and decrypt the secrets at a machine or user specific level. &lt;/P&gt;
&lt;P&gt;A couple years ago &lt;A href="http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=2CB29D0D-0D24-48A2-AAD6-11900478C689"&gt;&lt;STRONG&gt;I posted a sample DPAPI component on GotDotNet&lt;/STRONG&gt;&lt;/A&gt;. It's still there and you can use it until the real Data Protection API comes out with the next Visual Studio. There are some warts with this one so read the comments people posted in the download link.&lt;/P&gt;
&lt;P&gt;The component comes with a WinForms and WebForms example:&lt;/P&gt;&lt;IMG src="http://www.rulesroost.com/images/dpapi.jpg"&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Code behind the Encrypt button:&lt;/P&gt;&lt;PRE style="COLOR: #000000"&gt;&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;1&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Encrypt_Click(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, System.EventArgs e)
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;2&lt;/SPAN&gt;  {
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;3&lt;/SPAN&gt;   &lt;FONT color=#0000ff&gt;byte&lt;/FONT&gt;[] entropy = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;byte&lt;/FONT&gt;[0];
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;4&lt;/SPAN&gt;   &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (UseEntropy.Checked)
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;5&lt;/SPAN&gt;   {
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;6&lt;/SPAN&gt;    entropy = Encoding.Unicode.GetBytes(EntropyText.Text);
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;7&lt;/SPAN&gt;   }
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;8&lt;/SPAN&gt;
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;9&lt;/SPAN&gt;   DataProtector dp = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; DataProtector(Store.MachineStore);
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;10&lt;/SPAN&gt;   &lt;FONT color=#0000ff&gt;byte&lt;/FONT&gt;[] dataToEncrypt = Encoding.Unicode.GetBytes(SecretText.Text);
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;11&lt;/SPAN&gt;   
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;12&lt;/SPAN&gt;   &lt;FONT color=#0000ff&gt;try&lt;/FONT&gt;
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;13&lt;/SPAN&gt;   {
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;14&lt;/SPAN&gt;    CipherText.Text = Convert.ToBase64String(dp.Encrypt(dataToEncrypt, entropy));
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;15&lt;/SPAN&gt;   }
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;16&lt;/SPAN&gt;   &lt;FONT color=#0000ff&gt;catch&lt;/FONT&gt; (Exception ex)
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;17&lt;/SPAN&gt;   {
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;18&lt;/SPAN&gt;    MessageBox.Show(ex.Message);
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;19&lt;/SPAN&gt;   }
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;20&lt;/SPAN&gt;  
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;21&lt;/SPAN&gt;  }&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Code behind the Decrypt button:&lt;/P&gt;&lt;PRE style="COLOR: #000000"&gt;&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;1&lt;/SPAN&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;void&lt;/FONT&gt; Decrypt_Click(&lt;FONT color=#0000ff&gt;object&lt;/FONT&gt; sender, System.EventArgs e)
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;2&lt;/SPAN&gt;  {
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;3&lt;/SPAN&gt;   &lt;FONT color=#0000ff&gt;byte&lt;/FONT&gt;[] entropy = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;byte&lt;/FONT&gt;[0];
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;4&lt;/SPAN&gt;   &lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (UseEntropy.Checked)
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;5&lt;/SPAN&gt;   {
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;6&lt;/SPAN&gt;    entropy = Encoding.Unicode.GetBytes(EntropyText.Text);
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;7&lt;/SPAN&gt;   }
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;8&lt;/SPAN&gt;
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;9&lt;/SPAN&gt;   DataProtector dp = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt; DataProtector(Store.MachineStore);
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;10&lt;/SPAN&gt;   &lt;FONT color=#0000ff&gt;byte&lt;/FONT&gt;[] dataToDecrypt = Convert.FromBase64String(CipherText.Text);
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;11&lt;/SPAN&gt;   
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;12&lt;/SPAN&gt;   &lt;FONT color=#0000ff&gt;try&lt;/FONT&gt;
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;13&lt;/SPAN&gt;   {
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;14&lt;/SPAN&gt;    DecryptResults.Text = Encoding.Unicode.GetString(dp.Decrypt(dataToDecrypt, entropy));
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;15&lt;/SPAN&gt;   }
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;16&lt;/SPAN&gt;   &lt;FONT color=#0000ff&gt;catch&lt;/FONT&gt; (Exception ex)
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;17&lt;/SPAN&gt;   {
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;18&lt;/SPAN&gt;    MessageBox.Show(ex.Message);
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;19&lt;/SPAN&gt;   }
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;20&lt;/SPAN&gt;  
&lt;BR&gt;&lt;SPAN style="BORDER-RIGHT: #999999 1px solid; WIDTH: 40px; COLOR: #008284; MARGIN-RIGHT: 10px; BACKGROUND-COLOR: #e5e5e5; TEXT-ALIGN: right"&gt;21&lt;/SPAN&gt;  }&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The DataProtector class imports CryptProtectData and CryptUnprotectData from the CryptoAPI to do the work. &lt;/P&gt;
&lt;P&gt;Other options:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;The .Net Security Blog has &lt;A href="http://blogs.msdn.com/shawnfa/archive/2004/05/05/126825.aspx"&gt;two&lt;/A&gt; &lt;A href="http://blogs.msdn.com/shawnfa/archive/2004/05/17/133650.aspx"&gt;articles&lt;/A&gt; on DPAPI. 
&lt;LI&gt;MSDN has &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/windataprotection-dpapi.asp"&gt;an article on DPAPI&lt;/A&gt; that you could use to construct a component. 
&lt;LI&gt;Jerry Dixon has &lt;A href="http://dotnetjunkies.com/WebLog/jdixon/archive/2004/06/19/17038.aspx"&gt;an excellent DPAPI wrapper&lt;/A&gt; posted on his blog.&lt;/LI&gt;&lt;/OL&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=207304" width="1" height="1"&gt;</description></item><item><title>99 Bottles Of Beer</title><link>http://blogs.msdn.com/b/jrule/archive/2004/07/30/202480.aspx</link><pubDate>Fri, 30 Jul 2004 19:43:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:202480</guid><dc:creator>jrule</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=202480</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2004/07/30/202480.aspx#comments</comments><description>&lt;P&gt;Many years ago (1994) programmer, and my geek idol, Tim Robinson compiled a list of ways to output the lyrics to the song 99 Bottles of Beer. It started with someone posting to a mailing list the entire lyrics to the song and then someone else replied with a Basic version of the song:&lt;/P&gt;
&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#000080&gt;10 REM BASIC Version of 99 Bottles of beer&lt;BR&gt;20 FOR X=100 TO 1 STEP -1&lt;BR&gt;30 PRINT X;"Bottle(s) of beer on the wall,";X;"bottle(s) of beer"&lt;BR&gt;40 PRINT "Take one down and pass it around,"&lt;BR&gt;50 PRINT X-1;"bottle(s) of beer on the wall"&lt;BR&gt;60 NEXT&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;/P&gt;
&lt;P&gt;Tim posted a C++ version and it grew from there to hundreds of versions. Unfortunately Tim's web site (and Tim) disappeared from the 'net and all was lost for a few years. Now, Oliver Schade has posted the entire collection and then some on a web site: &lt;A href="http://www.99-bottles-of-beer.net/"&gt;&lt;STRONG&gt;http://www.99-bottles-of-beer.net&lt;/STRONG&gt;&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;One of my contributions was Modula-2:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#000080 size=2&gt;MODULE BottlesOfBeer;&lt;BR&gt;&lt;BR&gt;FROM InOut IMPORT WriteCard, WriteString, WriteLn;&lt;BR&gt;&lt;BR&gt;CONST&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOTTLES = 99;&lt;BR&gt;VAR&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; counter : CARDINAL;&lt;BR&gt;BEGIN&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; counter := BOTTLES;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; REPEAT&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteCard( counter,2 );&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteString(" bottles of beer on the wall, ");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteCard( counter,2 );&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteString(" bottles of beer."); WriteLn;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteString(" Take one down, and pass it around, ");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DEC( counter );&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteCard( counter,2 );&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteString(" bottles of beer on the wall."); WriteLn;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UNTIL ( counter = 1 );&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteString("1 bottle of beer on the wall, 1 bottle of beer"); WriteLn;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteString("Take it down and pass it around, ");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WriteString("No more bottles of beer on the wall."); WriteLn;&lt;BR&gt;&lt;BR&gt;END BottlesOfBeer.&lt;/FONT&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;What I enjoy about this catalog is that people tried to incorporate features from the language. Along with the usual cast of languages like &lt;A href="http://www.99-bottles-of-beer.net/m.html#MS-SQL"&gt;SQL&lt;/A&gt;, &lt;A href="http://www.99-bottles-of-beer.net/c.html"&gt;C#, and various C++ versions&lt;/A&gt;, some clever languages were posted. Here are some of my favorites:&lt;/P&gt;
&lt;P&gt;
&lt;H3&gt;SmallTalk&lt;/H3&gt;
&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;FONT color=#000080 size=2&gt;99 to: 1 by: -1 do: [ :i |
 i print. ' bottles of beer on the wall, ' print.
 i print. ' bottles of beer. ' print.
 'take one down, pass it around, ' print.
 (i-1) print. ' bottles of beer on the wall, ' print.
]&lt;/FONT&gt;
&lt;/PRE&gt;
&lt;P&gt;
&lt;H3&gt;Meta HTML&lt;/H3&gt;
&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;FONT color=#000080 size=2&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt; &amp;lt;title&amp;gt; 99 Bottles of Beer: The Compleat Lyrics &amp;lt;/title&amp;gt; &amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
;;;
;;; The actual source code to The Compleat Lyrics.
&amp;lt;defsubst plural whitespace=delete&amp;gt;
  &amp;lt;if &amp;lt;not &amp;lt;eq %0 1&amp;gt;&amp;gt; s&amp;gt;
&amp;lt;/defsubst&amp;gt;
&amp;lt;set-var beers=99&amp;gt;
&amp;lt;while &amp;lt;gt beers 0&amp;gt;&amp;gt;
  &amp;lt;get-var beers&amp;gt; bottle&amp;lt;plural beers&amp;gt; of beer on the wall, &amp;lt;br&amp;gt;
  &amp;lt;get-var beers&amp;gt; bottle&amp;lt;plural beers&amp;gt; of beer, &amp;lt;br&amp;gt;
  You take one down, pass it around, &amp;lt;br&amp;gt;
  &amp;lt;decrement beers&amp;gt;
  &amp;lt;get-var beers&amp;gt; bottle&amp;lt;plural beers&amp;gt; of beer on the wall.
  &amp;lt;p&amp;gt;
&amp;lt;/while&amp;gt;
No more bottles of beer on the wall, &amp;lt;br&amp;gt;
No more bottles of beer, &amp;lt;br&amp;gt;
Go to the store, and buy some more, &amp;lt;br&amp;gt;
&amp;lt;form method=GET action="&amp;lt;get-var mhtml::current-url&amp;gt;"&amp;gt;
  &amp;lt;input type="submit" name="button" value="99 Bottles of beer on the wall"&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/FONT&gt;&lt;/PRE&gt;
&lt;H3&gt;Perl for Signature&lt;/H3&gt;&lt;PRE&gt;&lt;FONT color=#000080 size=2&gt;#!/usr/bin/perl -iake_one_down_pass_it_around:_bottles_of_beer:_on_the_wall:99
for(($t,$a,$b,$i)=split/:/,$^I;$i;print){$_="-$i$a$b,-$i$a,-T$t,-".--$i."$a$b
";s/(-1_.*?e)s/$1/g;y/_-/ \n/}#     by Randolph Chung and Joey Hess&lt;/FONT&gt;
&lt;/PRE&gt;
&lt;P&gt;
&lt;H3&gt;POV Ray&lt;/H3&gt;
&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;&lt;FONT color=#000080 size=2&gt;POV-Ray is a ray-tracing program.
// povray 3 file for the 99 bottles of beer ...
#declare S1 = " bottles"
#declare L1 = " of beer on the wall,\n"
#declare L2 = " of beer.\n"
#declare L3 = "Take one down and pass it around,\n"
#declare L4 = " of beer on the wall.\n\n"
#declare Beer = 99
#declare S2 = concat(str(Beer,0,0),S1)
#render "\n"
#while (Beer &amp;gt; 0)
  #render concat(S2,L1)
  #render concat(S2,L2)
  #render L3
  #declare Beer = Beer - 1
  #if (Beer = 1)
    #declare S2 = "1 bottle"
  #else
    #if (Beer = 0)
      #declare S2 = "No more bottles"
    #else
      #declare S2 = concat(str(Beer,0,0),S1)
    #end
  #end
  #render concat(S2,L4)
#end
sphere { 0, 1 pigment { colour rgb &amp;lt;1,0,0&amp;gt; } }
light_source { x*2, colour rgb 1 }
camera {
  perspective
  location x*2
  look_at 0
}&lt;/FONT&gt;&lt;/PRE&gt;
&lt;P&gt;There are also some unmentionables like &lt;A href="http://www.99-bottles-of-beer.net/b.html#Brainfuck"&gt;this one&lt;/A&gt;&amp;nbsp;and &lt;A href="http://www.99-bottles-of-beer.net/n.html#Nouse"&gt;this one&lt;/A&gt;. 621 versions so far. One glaring omission is Managed C++ [looks over at &lt;A href="http://blogs.msdn.com/yvesdolc"&gt;Yves Dolce&lt;/A&gt;]. I also wonder whatever happened to Tim Robinson. He was the brains behind Excalibur BBS which was a Windows based BBS that served up screens with meta-driven GUI. Instead of writing classic BBS doors you would write DLL add-in's. It was unfortunately timed to come out just as the WWW was emerging but the software was very cool nonetheless.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=202480" width="1" height="1"&gt;</description></item><item><title>Giant Fresnel Lens</title><link>http://blogs.msdn.com/b/jrule/archive/2004/07/29/201082.aspx</link><pubDate>Thu, 29 Jul 2004 21:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:201082</guid><dc:creator>jrule</dc:creator><slash:comments>32</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=201082</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2004/07/29/201082.aspx#comments</comments><description>&lt;P&gt;I found a company that &lt;A href="http://www.alltronics.com/lenses.htm"&gt;sells giant fresnel lenses&lt;/A&gt;. What is a Fresnel lens? Think of a lighthouse or the top of an overhead projector. As light goes through the lens, spiral cut ridges focus the light to a focal point. You end up with the equivalent of a giant magnifying glass or parabolic mirror. There is some really juicy math invovled in calculating how to create a lens, &lt;A href="http://hyperphysics.phy-astr.gsu.edu/hbase/geoopt/fresnellens.html"&gt;determining the focal length and lens strength&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;I framed the lens with some 2&amp;#8220;x2&amp;#8220; lumber and secured it with electrical tape. When I carried the lens out of the garage, I knew we were in for a good show. The asphalt driveway started smoking. Our first target was a penny which the lens quickly melted into slag. Next up was a hamburger. We widened the focus and it flash cooked the top of the burger.&lt;/P&gt;&lt;IMG src="http://www.rulesroost.com/photos/lens/flens.jpg"&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What I learned:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;You really need welding goggles. I have none so we had to use a spotter from a distance to help us focus. If you knelt down and tried to focus it without eye protection, you would surely suffer eye damage. 
&lt;LI&gt;If the sun is directly overhead, the lens is easier to focus and burns significantly hotter. 
&lt;LI&gt;Burgers cooked with a giant death ray don't taste very good. It's about like cooking in a microwave: you don't get the smoky taste that a BBQ gives you.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=201082" width="1" height="1"&gt;</description></item><item><title>Partner Advantage Launched</title><link>http://blogs.msdn.com/b/jrule/archive/2004/07/29/201054.aspx</link><pubDate>Thu, 29 Jul 2004 20:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:201054</guid><dc:creator>jrule</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=201054</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2004/07/29/201054.aspx#comments</comments><description>&lt;P&gt;If you are&amp;nbsp;a partner (System Integrator or Independent Software Vendor) and you would like services, Partner Advantage has launched:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/partneradvantage"&gt;http://www.microsoft.com/partneradvantage&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;I'm an engagement manager in this group and our goal is pretty straightforward: decrease your time-to-market. How do we do that? Code reviews, architecture reviews, scalability labs, break-fix work (e.g. why isn't this API working?), cooperative support, training, prototyping, test planning, and so on. &lt;/P&gt;
&lt;P&gt;As penance for this marketing entry, I promise my next blog entry will be geekier. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=201054" width="1" height="1"&gt;</description></item><item><title>AnandTech's move to .NET</title><link>http://blogs.msdn.com/b/jrule/archive/2004/07/28/200316.aspx</link><pubDate>Thu, 29 Jul 2004 01:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:200316</guid><dc:creator>jrule</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jrule/rsscomments.aspx?WeblogPostID=200316</wfw:commentRss><comments>http://blogs.msdn.com/b/jrule/archive/2004/07/28/200316.aspx#comments</comments><description>&lt;P&gt;Hardware mega site Anandtech documented the&lt;A href="http://www.anandtech.com/IT/showdoc.aspx?i=2136"&gt; history of their web site including the move to .NET&lt;/A&gt;. Cool stuff.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=200316" width="1" height="1"&gt;</description></item></channel></rss>
