<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Rule's Roost</title><subtitle type="html">Jeremy Rule's blog</subtitle><id>http://blogs.msdn.com/jrule/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/jrule/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2004-07-29T14:17:00Z</updated><entry><title>Using Cloud Services from Second Life</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/archive/2009/04/22/using-cloud-services-from-second-life.aspx" /><id>http://blogs.msdn.com/jrule/archive/2009/04/22/using-cloud-services-from-second-life.aspx</id><published>2009-04-23T02:02:32Z</published><updated>2009-04-23T02:02:32Z</updated><content type="html">&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;</content><author><name>jrule</name><uri>http://blogs.msdn.com/members/jrule.aspx</uri></author><category term="contest" scheme="http://blogs.msdn.com/jrule/archive/tags/contest/default.aspx" /><category term="azure" scheme="http://blogs.msdn.com/jrule/archive/tags/azure/default.aspx" /><category term="JSON" scheme="http://blogs.msdn.com/jrule/archive/tags/JSON/default.aspx" /><category term="second life" scheme="http://blogs.msdn.com/jrule/archive/tags/second+life/default.aspx" /><category term="cloud" scheme="http://blogs.msdn.com/jrule/archive/tags/cloud/default.aspx" /></entry><entry><title>The Ingenuity Point Contest</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/archive/2007/08/21/the-ingenuity-point-contest.aspx" /><id>http://blogs.msdn.com/jrule/archive/2007/08/21/the-ingenuity-point-contest.aspx</id><published>2007-08-22T02:20:00Z</published><updated>2007-08-22T02:20:00Z</updated><content type="html">&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4500546" width="1" height="1"&gt;</content><author><name>jrule</name><uri>http://blogs.msdn.com/members/jrule.aspx</uri></author><category term="isv" scheme="http://blogs.msdn.com/jrule/archive/tags/isv/default.aspx" /><category term="contest" scheme="http://blogs.msdn.com/jrule/archive/tags/contest/default.aspx" /></entry><entry><title>Looking for a Solutions Architect in the SF Bay Area</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/archive/2007/07/17/looking-for-a-solutions-architect-in-the-sf-bay-area.aspx" /><id>http://blogs.msdn.com/jrule/archive/2007/07/17/looking-for-a-solutions-architect-in-the-sf-bay-area.aspx</id><published>2007-07-17T20:39:00Z</published><updated>2007-07-17T20:39:00Z</updated><content type="html">&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3920457" width="1" height="1"&gt;</content><author><name>jrule</name><uri>http://blogs.msdn.com/members/jrule.aspx</uri></author></entry><entry><title>Microsoft SQL Server 2005 Administrator's Companion</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/archive/2007/01/03/microsoft-sql-server-2005-administrator-s-companion.aspx" /><id>http://blogs.msdn.com/jrule/archive/2007/01/03/microsoft-sql-server-2005-administrator-s-companion.aspx</id><published>2007-01-04T02:22:00Z</published><updated>2007-01-04T02:22:00Z</updated><content type="html">&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1407425" width="1" height="1"&gt;</content><author><name>jrule</name><uri>http://blogs.msdn.com/members/jrule.aspx</uri></author></entry><entry><title>Prolog.NET? You bet!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/archive/2006/01/03/508820.aspx" /><id>http://blogs.msdn.com/jrule/archive/2006/01/03/508820.aspx</id><published>2006-01-03T20:15:00Z</published><updated>2006-01-03T20:15:00Z</updated><content type="html">&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=508820" width="1" height="1"&gt;</content><author><name>jrule</name><uri>http://blogs.msdn.com/members/jrule.aspx</uri></author></entry><entry><title>Build Master: Microsoft's Software Configuration Management Best Practices</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/archive/2005/11/08/490657.aspx" /><id>http://blogs.msdn.com/jrule/archive/2005/11/08/490657.aspx</id><published>2005-11-09T06:32:00Z</published><updated>2005-11-09T06:32:00Z</updated><content type="html">&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=490657" width="1" height="1"&gt;</content><author><name>jrule</name><uri>http://blogs.msdn.com/members/jrule.aspx</uri></author></entry><entry><title>Windows for Musicians</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/archive/2005/10/31/487472.aspx" /><id>http://blogs.msdn.com/jrule/archive/2005/10/31/487472.aspx</id><published>2005-11-01T00:54:00Z</published><updated>2005-11-01T00:54:00Z</updated><content type="html">&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=487472" width="1" height="1"&gt;</content><author><name>jrule</name><uri>http://blogs.msdn.com/members/jrule.aspx</uri></author></entry><entry><title>Partner Services Hiring - Bay Area - App. Dev. Consultant</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/archive/2005/04/19/409714.aspx" /><id>http://blogs.msdn.com/jrule/archive/2005/04/19/409714.aspx</id><published>2005-04-19T22:22:00Z</published><updated>2005-04-19T22:22:00Z</updated><content type="html">&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=409714" width="1" height="1"&gt;</content><author><name>jrule</name><uri>http://blogs.msdn.com/members/jrule.aspx</uri></author></entry><entry><title>The Excel Web Query and Predicting the Washington State Governor's Race</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/archive/2004/11/12/256794.aspx" /><id>http://blogs.msdn.com/jrule/archive/2004/11/12/256794.aspx</id><published>2004-11-12T23:42:00Z</published><updated>2004-11-12T23:42:00Z</updated><content type="html">&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=256794" width="1" height="1"&gt;</content><author><name>jrule</name><uri>http://blogs.msdn.com/members/jrule.aspx</uri></author></entry><entry><title>Eugene's blog online</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/archive/2004/09/22/232911.aspx" /><id>http://blogs.msdn.com/jrule/archive/2004/09/22/232911.aspx</id><published>2004-09-22T16:48:00Z</published><updated>2004-09-22T16:48:00Z</updated><content type="html">&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=232911" width="1" height="1"&gt;</content><author><name>jrule</name><uri>http://blogs.msdn.com/members/jrule.aspx</uri></author></entry><entry><title>Dynamic Image Generation with ASP.Net</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/archive/2004/08/16/215393.aspx" /><id>http://blogs.msdn.com/jrule/archive/2004/08/16/215393.aspx</id><published>2004-08-16T23:11:00Z</published><updated>2004-08-16T23:11:00Z</updated><content type="html">&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=215393" width="1" height="1"&gt;</content><author><name>jrule</name><uri>http://blogs.msdn.com/members/jrule.aspx</uri></author></entry><entry><title>Fark.com Photoshop Contest</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/archive/2004/08/09/211366.aspx" /><id>http://blogs.msdn.com/jrule/archive/2004/08/09/211366.aspx</id><published>2004-08-09T19:20:00Z</published><updated>2004-08-09T19:20:00Z</updated><content type="html">&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=211366" width="1" height="1"&gt;</content><author><name>jrule</name><uri>http://blogs.msdn.com/members/jrule.aspx</uri></author></entry><entry><title>Data Protection API (DPAPI)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/archive/2004/08/03/207304.aspx" /><id>http://blogs.msdn.com/jrule/archive/2004/08/03/207304.aspx</id><published>2004-08-03T20:44:00Z</published><updated>2004-08-03T20:44:00Z</updated><content type="html">&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=207304" width="1" height="1"&gt;</content><author><name>jrule</name><uri>http://blogs.msdn.com/members/jrule.aspx</uri></author></entry><entry><title>99 Bottles Of Beer</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/archive/2004/07/30/202480.aspx" /><id>http://blogs.msdn.com/jrule/archive/2004/07/30/202480.aspx</id><published>2004-07-30T19:43:00Z</published><updated>2004-07-30T19:43:00Z</updated><content type="html">&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=202480" width="1" height="1"&gt;</content><author><name>jrule</name><uri>http://blogs.msdn.com/members/jrule.aspx</uri></author></entry><entry><title>Giant Fresnel Lens</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/jrule/archive/2004/07/29/201082.aspx" /><id>http://blogs.msdn.com/jrule/archive/2004/07/29/201082.aspx</id><published>2004-07-29T21:17:00Z</published><updated>2004-07-29T21:17:00Z</updated><content type="html">&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=201082" width="1" height="1"&gt;</content><author><name>jrule</name><uri>http://blogs.msdn.com/members/jrule.aspx</uri></author></entry></feed>