<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Exclaim Computing</title>
	<atom:link href="http://www.exclaimcomputing.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.exclaimcomputing.com</link>
	<description>Specialists in cloud computing, enterprise application development, and client application development for the iPhone, Windows Phone 7 Series, and other platforms</description>
	<lastBuildDate>Tue, 23 Feb 2010 03:23:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Exclaim Computing is Now a Microsoft BizSpark Startup</title>
		<link>http://www.exclaimcomputing.com/2010/02/22/exclaim-computing-is-now-a-microsoft-bizspark-startup/</link>
		<comments>http://www.exclaimcomputing.com/2010/02/22/exclaim-computing-is-now-a-microsoft-bizspark-startup/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 03:23:01 +0000</pubDate>
		<dc:creator>nate.dudek</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[BizSpark]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://www.exclaimcomputing.com/?p=303</guid>
		<description><![CDATA[We are excited to announce that we are now a Microsoft BizSpark startup, a program that helps to provide software, support, and visibility to software startups.  Together with our sponsor, Connecticut Innovations, we are looking forward to utilizing the program to enhance the products and services we can provide you.
For more information on the [...]]]></description>
			<content:encoded><![CDATA[<p>We are excited to announce that we are now a Microsoft BizSpark startup,<span id="more-303"></span> a program that helps to provide software, support, and visibility to software startups.  Together with our sponsor, <a href="http://www.ctinnovations.com/">Connecticut Innovations</a>, we are looking forward to utilizing the program to enhance the products and services we can provide you.</p>
<p>For more information on the Microsoft BizSpark program, visit <a href="http://www.microsoft.com/BizSpark/">http://www.microsoft.com/BizSpark/</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.exclaimcomputing.com/2010/02/22/exclaim-computing-is-now-a-microsoft-bizspark-startup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fueling Your Application&#8217;s Engine with Windows Azure Storage</title>
		<link>http://www.exclaimcomputing.com/2010/01/06/fueling-your-applications-engine-with-windows-azure-storage/</link>
		<comments>http://www.exclaimcomputing.com/2010/01/06/fueling-your-applications-engine-with-windows-azure-storage/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 21:39:21 +0000</pubDate>
		<dc:creator>nate.dudek</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Windows Azure]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.exclaimcomputing.com/?p=294</guid>
		<description><![CDATA[An article we wrote for MSDN Magazine is in the January 2010 issue.  &#8220;Fueling Your Application’s Engine with Windows Azure Storage&#8221; discusses the utilization of Azure Queue and Table storage, Azure Worker Roles, and jQuery to send asynchronous messages to an ASP.NET MVC application and process shopping cart orders. Check it out!
Fueling Your Application&#8217;s Engine [...]]]></description>
			<content:encoded><![CDATA[<p>An article we wrote for MSDN Magazine is in the January 2010 issue.  &#8220;Fueling Your Application’s Engine with Windows Azure Storage&#8221; discusses the utilization of Azure Queue <span id="more-294"></span>and Table storage, Azure Worker Roles, and jQuery to send asynchronous messages to an ASP.NET MVC application and process shopping cart orders. Check it out!</p>
<p><a href="http://msdn.microsoft.com/en-us/magazine/ee335721.aspx" target="_blank">Fueling Your Application&#8217;s Engine with Windows Azure Storage</a> via <a href="http://msdn.microsoft.com/en-us/magazine/default.aspx" target="_blank">MSDN Magazine</a>: <a href="http://msdn.microsoft.com/en-us/magazine/ee335721.aspx" target="_blank">http://msdn.microsoft.com/en-us/magazine/ee335721.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.exclaimcomputing.com/2010/01/06/fueling-your-applications-engine-with-windows-azure-storage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>To MonoTouch or Not to MonoTouch, That is the Question</title>
		<link>http://www.exclaimcomputing.com/2009/11/23/to-monotouch-or-not-to-monotouch-that-is-the-question/</link>
		<comments>http://www.exclaimcomputing.com/2009/11/23/to-monotouch-or-not-to-monotouch-that-is-the-question/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 16:30:36 +0000</pubDate>
		<dc:creator>nate.dudek</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[MonoDevelop]]></category>
		<category><![CDATA[MonoTouch]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://www.exclaimcomputing.com/?p=288</guid>
		<description><![CDATA[The following post originally appeared on Kevin Hoffman&#8217;s blog, The DotNet Addict, on 11/23/2009.
Those of you who have been reading my blog for a while know that I&#8217;m not always just about .NET &#8211; I&#8217;m a pretty huge iPhone guy as well. In fact, I&#8217;m a fan of all technologies and programming languages that don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p><em>The following post originally appeared on Kevin Hoffman&#8217;s blog, <a href="http://dotnetaddict.dotnetdevelopersjournal.com/" target="_blank">The DotNet Addict</a>, on 11/23/2009.</em></p>
<p>Those of you who have been reading my blog for a while know that I&#8217;m not always just about .NET &#8211; I&#8217;m a pretty huge iPhone guy as well. In fact, I&#8217;m a fan of all technologies and programming languages that don&#8217;t suck, regardless of who makes them or on what platform they run.<span id="more-288"></span></p>
<p>At one point I was actually thinking about writing a book for .NET developers to learn Cocoa but other plans, time constraints, and life issues all got in the way. I have posted countless times comparing the worlds of Cocoa and .NET and have twice presented at Apple&#8217;s WWDC comparing both the desktop and mobile programming environments of Apple and Microsoft. So you can imagine the raw, unfiltered, pure geek joy that coursed through my veins when I heard about <a title="Monotouch Website" href="http://monotouch.net/" target="_blank"><strong>Monotouch</strong></a>, a programming library coupled with an IDE (MonoDevelop + Interface Builder) that would let me <em>write my iPhone applications using C# and the .NET Framework</em> (the mono version).</p>
<p>To get Monotouch working you&#8217;re going to need the following:</p>
<ul>
<li>A Mac.
<ul>
<li>Intel</li>
<li>Running Leopard or Snow Leopard</li>
<li>Decently fast (a current Macbook Air is about the slowest I can tolerate for compilations)</li>
</ul>
</li>
<li>Monotouch Framework (can download the eval free)</li>
<li>MonoDevelop &#8211; IDE for mono and monotouch, <em>for the Mac, NOT Windows or linux!</em></li>
<li>$500 for the professional edition, $3500 for the enterprise edition. You can evaluate for free, but you can&#8217;t put a monotouch app on an actual piece of hardware without forking over the duckets.</li>
</ul>
<p>Understanding all of the plumbing of how this works requires a time investment that I just can&#8217;t put forth right now. So, for now, assume that little magic elves within the MonoDevelop IDE perform post-build tasks on your compiled mono application that can then convert it to native iPhone code. When you&#8217;re working with C# classes like <em>UITableViewController</em>, all you&#8217;re really doing is telling the post-compile steps that your final C type in the native app will be a <em>UITableViewController</em>. It&#8217;s smoke and mirrors, but it&#8217;s damned powerful smoke and mirrors.</p>
<p>So what&#8217;s it like to build a monotouch application? It&#8217;s actually pretty similar to building a regular Cocoa Touch application. You create a new project in monotouch (there are several really good &#8220;hello world&#8221; tutorials available on monotouch from their site). Drag UI elements into your XIB using Interface Builder and, here&#8217;s where some of the magic starts, create outlets and actions and <em>link your C# code to your interface builder UI elements</em>. I am pretty sure portions of my brain liquified when I first created a C# view controller and ctrl-dragged to link UI actions to the controller.</p>
<p>This is where many of my avid .NET readers are going to think I&#8217;ve simply flipped and gone off the reservation&#8230;</p>
<p>Despite the fact that I can now <em>quickly and easily</em> create <em>C#/.NET</em> classes and use them to power my iPhone applications, which gives me access to things like WCF and the <em>absolutely, definitively better</em> XML libraries of .NET&#8230; I am not going to be using monotouch for real application development.</p>
<p>ok, I&#8217;ll pause here to let you all stop shouting, &#8220;OMFGWTFTRAITOR!!!1&#8243;</p>
<p>A little history: I learned C# in 2000 on .NET 1.0. I published my first book on the .NET Framework in 2001 and have been writing blogs, books, articles, and flaming truckloads of code on this framework for the past 9 years now. If there ever was a human being on the planet who should by all rights reach out to and lovingly hug the Monotouch box &#8211; it should be me. <em>However</em>, all of that time and experience has made me wary of layers of abstraction. I learned how to write Cocoa for the Mac when Leopard was in beta. I found the learning curve steep, and painful. I felt like I was being deprogrammed &#8211; but it was a good thing. If you remember my blog posts from that era, you&#8217;ll recall that I felt like I was growing as a programmer and architect. My skills in .NET increased dramatically as a result of the enlightenment that I found while learning Cocoa and Objective-C. My .NET skills also increased (though not as dramatically) when I suffered through writing enterprise Java applications.</p>
<p>I literally spent hours trying to write down the list of reasons why I didn&#8217;t want to use Monotouch and some of them were extremely valid reasons concerning the fact that monotouch is always going to be behind the leading SDK revision from Apple and blah blah yadda yadda&#8230; The bottom line is <em>I just love the way it feels to write Objective-C and Cocoa code.</em> Period.</p>
<p>Bottom line:</p>
<p><strong>[self heart:Cocoa];</strong></p>
<p>That said, there are a thousand reasons for people to use monotouch, including the ability to re-use .NET (mono) code across the client (iPhone) and server as well as to allow .NET developers who have absolutely no experience with Cocoa or Objective-C to quickly and easily get rolling building iPhone apps. In the real world we don&#8217;t always have the luxury of learning new languages and environments &#8211; if you&#8217;re a .NET developer and your boss tells you write an iPhone app for your company and to do it in 3 weeks or you&#8217;re fired &#8211; you&#8217;re going to use Monotouch (and so would I). I have the luxury of knowing both .NET and Cocoa and so I can pick and choose. Knowing both, I&#8217;ll be writing my iPhone apps in Cocoa and the back-end servers that support them in .NET.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.exclaimcomputing.com/2009/11/23/to-monotouch-or-not-to-monotouch-that-is-the-question/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Exclaim Computing Cloudcast #1: Azure vs. Amazon AWS</title>
		<link>http://www.exclaimcomputing.com/2009/11/19/exclaim-computing-cloudcast-1-azure-vs-amazon-aws/</link>
		<comments>http://www.exclaimcomputing.com/2009/11/19/exclaim-computing-cloudcast-1-azure-vs-amazon-aws/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 03:35:17 +0000</pubDate>
		<dc:creator>nate.dudek</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://www.exclaimcomputing.com/?p=211</guid>
		<description><![CDATA[In this first edition of the Exclaim Computing Cloudcast, Kevin and Nate discuss the Azure and Amazon Web Services cloud platforms &#8211; what they each have to offer, the differences between them, and the developer experience.
Resources

Windows Azure Platform
Amazon Web Services
Azure TCO Calculator
Amazon AWS Monthly Calculator

]]></description>
			<content:encoded><![CDATA[<p>In this first edition of the Exclaim Computing Cloudcast, Kevin and Nate discuss the Azure and Amazon Web Services cloud platforms &#8211; what they each have to offer, <span id="more-211"></span>the differences between them, and the developer experience.</p>

<h4>Resources</h4>
<ul>
<li><a href="http://www.google.com/url?sa=t&amp;source=web&amp;ct=res&amp;cd=4&amp;ved=0CBoQFjAD&amp;url=http%3A%2F%2Fwww.microsoft.com%2Fwindowsazure%2F&amp;ei=aw8GS-bIJsG2lAe-w4GeDA&amp;usg=AFQjCNFdv6-7pG7rrMkyVy3hN7Se9Rb_mg&amp;sig2=BkctsjltteQo14nZACXN3w" target="_blank">Windows Azure Platform</a></li>
<li><a href="http://aws.amazon.com/" target="_blank">Amazon Web Services</a></li>
<li><a href="http://www.microsoft.com/windowsazure/tco/" target="_blank">Azure TCO Calculator</a></li>
<li><a href="http://calculator.s3.amazonaws.com/calc5.html" target="_blank">Amazon AWS Monthly Calculator</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.exclaimcomputing.com/2009/11/19/exclaim-computing-cloudcast-1-azure-vs-amazon-aws/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.exclaimcomputing.com/podcast/Exclaim%20Computing%20Cloudcast%201%20-%20Azure%20vs%20Amazon.mp3" length="48281115" type="audio/mpeg" />
		</item>
		<item>
		<title>Using jQuery and LiquidCanvas to Add Drop Shadows, Borders, Rounded Corners, and Other Effects to your Website &#8211; Even in IE6 and IE7</title>
		<link>http://www.exclaimcomputing.com/2009/11/14/using-jquery-and-liquidcanvas-to-add-drop-shadows-borders-rounded-corners-and-other-effects-to-your-website-even-in-ie6-and-ie7/</link>
		<comments>http://www.exclaimcomputing.com/2009/11/14/using-jquery-and-liquidcanvas-to-add-drop-shadows-borders-rounded-corners-and-other-effects-to-your-website-even-in-ie6-and-ie7/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 21:43:14 +0000</pubDate>
		<dc:creator>nate.dudek</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[drop shadow]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[visual effects]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.exclaimcomputing.com/?p=297</guid>
		<description><![CDATA[ //  area.height ? area.height : area.width;
          var trans = min / 2;
          var rad = trans / 3;
          for (var i = 0; i < 10; [...]]]></description>
			<content:encoded><![CDATA[<p><script src="/js/jquery-1.3.2.js" type="text/javascript"></script><script src="/js/liquid-canvas.js" type="text/javascript"></script><script src="/js/liquid-canvas-plugins.js" type="text/javascript"></script> <script src="/js/excanvas.js" type="text/javascript"></script><script type="text/javascript">// <![CDATA[
$.registerLiquidCanvasPlugin({
        name: "mandala",
        paint: function(area) {
          var opts = this.opts;
          var ctx = area.ctx;
          var min = area.width > area.height ? area.height : area.width;
          var trans = min / 2;
          var rad = trans / 3;
          for (var i = 0; i < 10; ++i) {
            area.save();
            ctx.translate(area.width / 2, area.height / 2);
            ctx.rotate(i * 2*Math.PI / 10);
            ctx.translate(trans - rad, 0);
            area.width = 10;
            area.height = 10;
            this.action.paint(area);
            area.restore();
          }
        }
      });
      $(window).load(function() {
        $("#example1").liquidCanvas(
             "border => rect");
		$("#example2").liquidCanvas(
            "fill{color:#39c} => rect");
		$("#example3").liquidCanvas(
            "[shadow fill] => roundedRect");
		$("#example4").liquidCanvas(
            "[gradient{from:rgba(255, 255, 255, 0.2); to:#888;} border{color: #00f}] => rect");
		$("#example5").liquidCanvas(
            "[shadow{color:#333} border{color:#eee} fill{color:#fff} ] => roundedRect{radius:5}");
                $("#example6").liquidCanvas(
            "fill => rect, mandala => ([border{color:#fff; width:1}] => roundedRect{radius:10})");
      });
// ]]&gt;</script><em>This post by Nate Dudek was originally published to his blog, <a href="../www.caffeinedi.com" target="_blank">Caffeine Dependency Injection</a>, on 11/2/2009.</em> <!-- .example {width:500px; overflow:hidden; margin: 20px; padding:20px;} --></p>
<p>Recently, I was working on a website redesign project for a client.  They wanted to keep some of their product catalog, shopping cart and back-end pages, but redesign their homepage while keeping the catalog’s borders and styles.  The existing design had a drop shadow around the main content along with several borders. <span id="more-297"></span> I designed a new CSS-based layout for the page, and instead of trying to modify all of the existing drop shadow and border graphics to fit, I decided to use <a href="http://www.jquery.com" target="_blank">jQuery</a> and the <a href="http://www.ruzee.com/content/liquid-canvas" target="_blank">LiquidCanvas plugin</a> to keep the page size small while retaining all of the visual effects.</p>
<p><a href="http://www.ruzee.com/content/liquid-canvas" target="_blank">LiquidCanvas</a> can be used to draw all sorts of graphics without any actual images, such as drop shadows, rounded corners, gradients, borders, and shapes.  The <a href="http://www.ruzee.com/files/liquid-canvas/demo.html" target="_blank">developer’s demo page</a> shows a lot of examples.</p>
<p>I’ve seen a lot of forum posts discuss how the plugin looks great in Firefox and IE8, but fails to render in IE6 and IE7.  <strong>If you are here looking for a LiquidCanvas fix for IE6 and IE7, it’s included in this post.  You’ll kick yourself at how easy the fix is.</strong></p>
<h4>Getting Started</h4>
<p>To start using LiquidCanvas in your site, download jQuery and the LiquidCanvas plugin from their respective sites.  Copy the scripts to a location that your website can access (I’m using a subdirectory called js in my examples), and then add the following lines to the header section of your HTML:</p>
<pre>[code language="html"]&lt;head&gt;
...
&lt;script type="text/javascript" src="/js/jquery-1.3.2.js" &lt;/script&gt;
&lt;script type="text/javascript" src="/js/liquid-canvas.js"&lt;/script&gt;
&lt;script type="text/javascript" src="/js/liquid-canvas-plugins.js"&lt;/script&gt;
...
&lt;/head&gt;[/code]</pre>
<p>Most jQuery scripts are loaded using the <code>$(document).ready()</code> function.  However, IE6 and IE7 choke on this with LiquidCanvas, so you need to use <code>$(window).load()</code> instead.</p>
<p>To start drawing, use a jQuery selector to select a div or other container.  Call the liquidCanvas() function on your selection and pass in parameters to add your visual effects.</p>
<p>To produce a simple rectangle with a border:</p>
<pre>[code language="javascript"]$(window).load(function() {
        $("#container").liquidCanvas(
            "border =&gt; rect");});
[/code]</pre>
<div id="example1">w/ Border</div>
<h4>IE6/7 Fix</h4>
<p>Even when using <code>$(window).load()</code>, IE6 and IE7 won’t render the effects.  The fix for these browsers is incredibly simple – you simply need to add one more script that’s included with the LiquidCanvas package:</p>
<pre>[code language="javascript"]
&lt;!--[if IE]
&lt;script type="text/javascript" src="/js/excanvas.js"&lt;/script&gt;
&lt;![endif]--&gt;
[/code]</pre>
<p>That’s it.  The [if IE] statement that wraps the script include tells IE to load the script while all other browsers simply ignore it.  This one line makes your visual effects fully cross-browser compatible.  Now that we’re up and ready to go, let’s play around with some examples.</p>
<h4>Examples</h4>
<p>To fill a rectangle with a color (we used blue, but gray is the default if you don’t specify one), you can use:</p>
<pre>[code language="javascript"]$(window).load(function() {
        $("#container").liquidCanvas(
            "fill{color:#39c} =&gt; rect");});[/code]</pre>
<div id="example2">Blue fill</div>
<p>To pass in multiple parameters, you can use an array.  To fill a rounded rectangle with gray and add a drop shadow:</p>
<pre>[code language="javascript"]$(window).load(function() {
        $("#container").liquidCanvas(
            "[shadow fill] =&gt; roundedRect");});[/code]</pre>
<div id="example3">Shadow and rounded</div>
<p>Even in an array, you can set your colors and other options.  Here, we’ll add a semi-transparent gradient and a blue border to a rectangle:</p>
<pre>[code language="javascript"]$(window).load(function() {
        $("#container").liquidCanvas(
            "[gradient{from:rgba(255, 255, 255, 0.2); to:#888;} border{color: #00f}] =&gt; rect");});[/code]</pre>
<div id="example4">Gradient / border</div>
<p>To create the gray drop shadow and light gray border around the white main content container on my client’s site, we used the following snippet:</p>
<pre>[code language="javascript"]$(window).load(function() {
        $("#container").liquidCanvas(
            "[shadow{color:#333} border{color:#eee} fill{color:#fff} ] =&gt; roundedRect{radius:5}");});[/code]</pre>
<div id="example5">Shadow, border, white fill</div>
<h4>Creating Your Own Effects With Custom LiquidCanvas Plugins</h4>
<p>If you really want to dive in, you can create your own effects by writing your own LiquidCanvas plugins.  On the demo page, for example, the final example uses a user-written effect called &#8220;Mandala&#8221; to create a circular background effect.</p>
<pre>[code language="javascript"]
$("#container").liquidCanvas(
            "fill =&gt; rect, mandala =&gt; ([border{color:#fff; width:1}] =&gt; roundedRect{radius:10})");[/code]</pre>
<div id="example6">Mandala</div>
<p>To accomplish this, the author uses the .registerLiquidCanvasPlugin() function and writes the custom painting code:</p>
<pre>[code language="javascript"]$.registerLiquidCanvasPlugin({
 name: "mandala",
 paint: function(area) {
 var opts = this.opts;
 var ctx = area.ctx;
 var min = area.width &gt; area.height ? area.height : area.width;
 var trans = min / 2;
 var rad = trans / 3;
 for (var i = 0; i &lt; 10; ++i) {
     area.save();
     ctx.translate(area.width / 2, area.height / 2);
     ctx.rotate(i * 2*Math.PI / 10);
     ctx.translate(trans - rad, 0);
     area.width = 10;
     area.height = 10;
     this.action.paint(area);
     area.restore();
     }
   }
 });[/code]</pre>
<p>There several things to focus on in this function.  The key variable is &#8220;area.&#8221;  By modifying properties like the height and width of the area variable, you can manipulate what gets drawn.  The &#8220;ctx&#8221; variable, which is really the area.ctx property, allows you to perform other functions on the drawing such as translating (moving where the image gets drawn) and rotating. The best way to see how this plugin works is to modify various things in the function and see what happens to your drawing. Once you get the basics down, you&#8217;ll be well on your way to creating your own custom effects.</p>
<h4>Conclusion</h4>
<p>There are lots of possibilities with this plugin to create great visual enhancements while keeping your page size small (no images!) and cross-browser compliant.  Add it to your toolbox today!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.exclaimcomputing.com/2009/11/14/using-jquery-and-liquidcanvas-to-add-drop-shadows-borders-rounded-corners-and-other-effects-to-your-website-even-in-ie6-and-ie7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Build Your First Azure-Powered ASP.NET MVC App</title>
		<link>http://www.exclaimcomputing.com/2009/11/01/how-to-build-your-first-azure-powered-asp-net-mvc-app/</link>
		<comments>http://www.exclaimcomputing.com/2009/11/01/how-to-build-your-first-azure-powered-asp-net-mvc-app/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 16:19:59 +0000</pubDate>
		<dc:creator>nate.dudek</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Windows Azure]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.exclaimcomputing.com/?p=279</guid>
		<description><![CDATA[This post by Nate Dudek was originally published to his blog, Caffeine Dependency Injection, on 9/30/2009.
The Visual Studio project templates included with the Azure Tools provide a quick way to get started with a cloud-hosted web application.  Unfortunately, it only supports classic ASP.NET web projects by default.  This tutorial will get you going [...]]]></description>
			<content:encoded><![CDATA[<p><em>This post by Nate Dudek was originally published to his blog, <a href="www.caffeinedi.com" target="_blank">Caffeine Dependency Injection</a>, on 9/30/2009.</em></p>
<p>The Visual Studio project templates included with the Azure Tools provide a quick way to get started with a cloud-hosted web application.  Unfortunately, it only supports classic ASP.NET web projects by default.  This tutorial will get you going on deploying an ASP.NET MVC web application to Azure.<span id="more-279"></span></p>
<h4>PreRequisites</h4>
<p>To get started, you&#8217;ll need to have the following tools installed on your machine:</p>
<ul>
<li>Microsoft Visual Studio 2008 (or <a href="http://www.microsoft.com/express/vwd/" target="_blank">Visual Web Developer 2008 Express Edition</a>)</li>
<li><a href="http://www.microsoft.com/express/sql/default.aspx" target="_blank">SQL Server Express</a> (or SQL Server 2008)</li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=8d75d4f7-77a4-4adf-bce8-1b10608574bb&amp;displaylang=en" target="_blank">Windows Azure Tools for Microsoft Visual Studio (July 2009 CTP)</a></li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=aa40f3e2-afc5-484d-b4e9-6a5227e73590&amp;displaylang=en" target="_blank">Windows Azure SDK (July 2009 CTP)</a> (this is included in the Visual Studio Azure Tools installation)</li>
<li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&amp;displaylang=en" target="_blank">ASP.NET MVC 1.0</a></li>
</ul>
<p>Installing the Azure SDK will install the two important local development components &#8211; Development Fabric, which simulates the cloud on your local machine, and Development Storage, which simulates the Azure Storage components (table, blob, and queue) using SQL Server.</p>
<p>In addition to the listed components, you will reuse code from the Azure Samples.  These are included with the Azure SDK in a samples.zip file, which can be found in the installation directory (C:\Program Files\Windows Azure SDK\v1.0 by default).  Unzip this file to a folder on your local machine, such as C:\Azure Samples.</p>
<h4>Create Your Cloud Project</h4>
<p>To get started, start up a session of Visual Studio 2008.  If you are using Windows 7 or Vista, <strong>make sure you start it with administrator privileges</strong> or you will run into permission problems later:</p>
<p style="text-align: center;"><a rel="attachment wp-att-44" href="http://www.exclaimcomputing.com/?attachment_id=44"><img class="size-medium wp-image-44 aligncenter" title="Azure Development Fabric Permissions Error" src="http://www.caffeinedi.com/wp-content/uploads/2009/09/start-dev-fabric-error-300x125.png" alt="Azure Development Fabric Permissions Error" width="300" height="125" /></a></p>
<p>Click File -&gt; New -&gt; Project and select &#8220;Cloud Service&#8221; from the list of Project Types on the left.  Then choose &#8220;Cloud Service&#8221; from the list of templates, give your project a name, and click OK.</p>
<p style="text-align: center;"><a rel="attachment wp-att-45" href="http://www.exclaimcomputing.com/?attachment_id=45"></a><a rel="attachment wp-att-50" href="http://www.exclaimcomputing.com/?attachment_id=50"><img class="alignright size-medium wp-image-50" title="Cloud Service Project Role Selection" src="http://www.caffeinedi.com/wp-content/uploads/2009/09/Cloud-Service-Project-Role-Selection-300x187.png" alt="Cloud Service Project Role Selection" width="300" height="187" /></a></p>
<p>You&#8217;ll need to choose one or more Roles to add to your cloud service.  Roles are the basic managed-code, scalable components in an Azure-based application.  Web Roles are web applications accessed by HTTP or HTTPS endpoints, while Worker Roles are background-processing applications with no external endpoints (although they communicate with storage and other internet-enabled services).  The third option, FastCGI, allows developers to easily incorporate third-party programming languages into the Azure-enabled application.  Since we will be writing an ASP.NET MVC application accessed over HTTP, add a single ASP.NET Web Role and click OK.</p>
<p>Let&#8217;s take a look at the Solution Explorer.  You&#8217;ll see two projects have been created from the template: the Cloud Service project, consisting of two Azure configuration files and the WebRole association; and the classic ASP.NET project named WebRole1.</p>
<p>As basic as it is, this simple solution is a fully-functional cloud-based web application.  Hit F5 to launch the debugger instance.  If all goes well, the Development Fabric will start in the background (you should see an icon for it appear in the system tray) and your default web browser will launch to your local cloud-enabled application (usually something like http://127.0.0.1:85).</p>
<p>If you get some funky errors messages, <strong>make sure your CloudService project is selected as the StartUp Project</strong>.  It should be the bold name in your list of projects in the Solution Explorer.  If it&#8217;s not, right-click on the project name, choose &#8220;Set as StartUp Project&#8221; from the menu, and try again.</p>
<h4>Change Your Web Project to an ASP.NET MVC Application</h4>
<p>Now we need to change our Web Role to an MVC application.  First, remove the ASP.NET application from the solution by right-clicking the project name in the Solution Explorer window and selecting &#8220;Remove.&#8221;  Next, add a new ASP.NET MVC project by right-clicking on the solution name and selecting Add -&gt; New Project. From the list of project types on the left, choose &#8220;Web&#8221; under the &#8220;Visual C#&#8221; category.  Select &#8220;ASP.NET MVC Web Application&#8221; from the list of installed templates.  Give your web project a name, and click okay.  A unit test project will be created by default, although we won&#8217;t utilize it in this tutorial.</p>
<p>Attempt to build the solution, or hit F5 to start the debugger.  You&#8217;ll get an error: &#8220;A Web or Worker project is required but could not be found.&#8221;  T<a rel="attachment wp-att-61" href="http://www.exclaimcomputing.com/?attachment_id=61"><img class="alignright size-medium wp-image-61" title="associate mvc app with azure web role" src="http://www.caffeinedi.com/wp-content/uploads/2009/09/associate-mvc-app-with-azure-web-role-300x182.png" alt="associate mvc app with azure web role" width="300" height="182" /></a>he CloudService project needs to know what web application is associated with the Web Role; without it, it doesn&#8217;t know how to configure the HTTP endpoint.  In the solution explorer, the Roles folder in the CloudService project will display &#8220;No project associated (WebRole1)&#8221;.  To create this association, right click on that role, select Associate with -&gt; Web Role Project in solution.  In the dialog that appears, choose your newly added ASP.NET MVC project and click OK.  The solution explorer will now show the MVC application under the Roles subfolder.</p>
<p>Hit F5 to start the debugger.  Looking good!  Your MVC application is now running on your local Azure fabric.  Although the application is up and running, try clicking on the &#8220;Log On&#8221; link in the top right corner of the page.  Try to register for an account.  Uh oh.  You&#8217;ll get an exception indicating the membership provider couldn&#8217;t connect to the database.</p>
<p>While we could modify the connection string in our web.config to configure the ASP.NET SQL Membership Provider, this would completely defeat the purpose of deploying our app to the cloud.  Instead, we&#8217;ll utilize Azure Storage to enable the membership functionality.</p>
<h4>Configure the Membership Provider</h4>
<p>The Azure SDK ships with great samples that demonstrate the various features of Azure Storage.  These samples include two incredibly useful projects: StorageClient, a wrapper around the Azure Storage functions, and AspProviders, which implement the Membership, Profile, Role, and Session State Providers using Azure Table storage.  We&#8217;ll utilize these two projects to enable the remaining features of our basic MVC application.</p>
<p>Navigate to the folder where you unzipped the Azure samples and go to the StorageClient\Lib directory.  Select everything in this folder and copy it to the clipboard.  Create a new folder in your solution folder and name it StorageClient.  Paste all of the files in your clipboard to this new folder.  Repeat the process for the AspProviders folder &#8211; copy all of the AspProviders\Lib files to a new AspProviders folder in your solution directory.</p>
<p>Add these two new projects to your solution.  Right-click on the solution and select Add -&gt; Existing project.  Choose the StorageClient.proj file from your solution directory&#8217;s newly-created StorageClient folder.  Repeat the process for the AspProviders project.</p>
<p>At this point, you should have five projects in your solution:</p>
<ul>
<li>AspProviders</li>
<li>AzureMVCSample (StartUp project)</li>
<li>&lt;Your MVC web project&gt;</li>
<li>&lt;Your MVC web project&gt;.Tests (if you selected to create unit tests)</li>
<li>StorageClient</li>
</ul>
<p>Looking good?  Great.  We have a few last steps before we can utilize the Azure-enabled membership provider.  First, we need to tell our MVC application where the provider exists.  To do this, add a reference to the AspProviders project in your MVC application.</p>
<p>We also need to configure Azure storage  to work on your local machine.  First, you need to configure the required keys in your cloud service configuration files: ServiceDefinition.csdef and ServiceConfiguration.cscfg.  The StorageClient project has three configuration settings that it uses to connect and authenticate to Azure Storage.  In ServiceDefinition.csdef, add the following three setting keys to the ConfigurationSettings node:</p>
<p><code>&lt;ConfigurationSettings&gt;<br />
&lt;Setting name="AccountName" /&gt;<br />
&lt;Setting name="AccountSharedKey" /&gt;<br />
&lt;Setting name="TableStorageEndpoint" /&gt;<br />
&lt;/ConfigurationSettings&gt;</code></p>
<p>Then, in ServiceConfiguration.cscfg, we need to set the values of those settings.  For simplicity&#8217;s sake, we&#8217;ll use the same values used by the Azure sample projects.  If you were to deploy this solution to the cloud, you would need to change these values to match your production (or staging) configuration.</p>
<p><code>&lt;ConfigurationSettings &gt;<br />
&lt;Setting name="AccountName" value="devstoreaccount1"/&gt;<br />
&lt;Setting name="AccountSharedKey" value="Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="/&gt;<br />
&lt;Setting name="TableStorageEndpoint" value="http://127.0.0.1:10002"/&gt;<br />
&lt;/ConfigurationSettings&gt;</code></p>
<p>Now, we need to initialize our local SQL Server with the required tables so w<a rel="attachment wp-att-69" href="http://www.exclaimcomputing.com/?attachment_id=69"><img class="alignright size-full wp-image-69" title="create test azure storage tables" src="http://www.caffeinedi.com/wp-content/uploads/2009/09/create-test-azure-storage-tables.png" alt="create test azure storage tables" width="187" height="274" /></a>e can simulate Azure Storage.  There are two ways to do this.  If you are running SQL Server Express, you can right-click on your cloud service project and select &#8220;Create Test Storage Tables.&#8221; If you are using SQL Server 2008, you will need to use the DevTableGen command-line tool.  From  an Azure Command Prompt (found in the Start Menu), run the following command:</p>
<p><code>devtablegen &lt;path-to-your-cloud-service-assembly&gt; /server localhost</code></p>
<p>At this point, your Azure configuration is ready to go.  All we have left is to configure your application to use the Azure Storage Membership provider.  In your MVC application&#8217;s web.config file, scroll down to the membership section.  The default configuration will be using the SqlMembershipProvider.  Delete that line, add your TableStorageMembershipProvider, and set the defaultProvider property as shown below:</p>
<p><code>&lt;membership defaultProvider="TableStorageMembershipProvider"&gt;<br />
&lt;providers&gt;<br />
&lt;clear/&gt;<br />
&lt;add name="TableStorageMembershipProvider" type="Microsoft.Samples.ServiceHosting.AspProviders.TableStorageMembershipProvider" description="Membership provider using Azure table storage" applicationName="AzureMVCSample" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0" requiresUniqueEmail="true" passwordFormat="Hashed"/&gt;<br />
&lt;/providers&gt;<br />
&lt;/membership&gt;</code></p>
<p>Save the file, hit F5, and try registering for an account and logging on.  All of the basic site features should work &#8211; enjoy your Azure-hosted MVC application!</p>
<h4>Next steps</h4>
<p>While it may feel like you&#8217;ve put in a lot of work just to get a basic &#8220;Hello World&#8221; site up and running, you are now in a very good position to easily extend your application and quickly add features that utilize Azure functionality.  The StorageClient project allows you to easily access Table, Blob, and Queue storage, and all of your initial configuration to get that up and running has already been completed. Similarly, you can now implement the Role and Profile providers just by modifying the web.config file in the same way as the membership provider &#8211; no extra configuration required.</p>
<p>The sky (the cloud?) is the limit from here &#8211; explore the features of Azure and how you can integrate them into your MVC application!</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 81px; width: 1px; height: 1px;">
<h1>Windows Azure Tools for Microsoft Visual Studio July 2009 CTPW</h1>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.exclaimcomputing.com/2009/11/01/how-to-build-your-first-azure-powered-asp-net-mvc-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

