<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Syringe.Net.Nz - Windows Azure</title>
    <link>http://www.syringe.net.nz/</link>
    <description>Irregular Injection Of Opinion</description>
    <language>en-us</language>
    <copyright>Chris J.T. Auld</copyright>
    <lastBuildDate>Fri, 10 Jun 2011 12:29:01 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>chris@syringe.net.nz</managingEditor>
    <webMaster>chris@syringe.net.nz</webMaster>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=94979e2d-6f5f-44d1-b6b0-3b711c2afb47</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,94979e2d-6f5f-44d1-b6b0-3b711c2afb47.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,94979e2d-6f5f-44d1-b6b0-3b711c2afb47.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=94979e2d-6f5f-44d1-b6b0-3b711c2afb47</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Hi All, 
</p>
        <p>
Saw this rather interesting snippet come through on the Twitter feed this morning. 
</p>
        <p>
          <a href="http://mobilitydigest.com/icloud-brought-to-you-by-microsoft-and-amazon/">http://mobilitydigest.com/icloud-brought-to-you-by-microsoft-and-amazon/</a>
        </p>
        <p>
Clicking through shows you some partial HTTP messages (some stuff is blurred out) 
</p>
        <p>
          <img title="icloud2" alt="" src="http://www.infiniteapple.net/wp-content/blogs.dir/10/files/2011/06/icloud2.jpg" width="556" height="230" />
        </p>
        <p>
Certainly looks like iCloud is using both Azure Blob storage and S3. 
</p>
        <p>
They are probably using Blob storage for the ability to use Shared Access Signatures
for file upload, but, without seeing the full URL in the HTTP request that’s a bit
of a guess. 
</p>
        <p>
My guess is that the call to the iCloud servers for authorizePut will be fetching
a SAS and then this is being used in the PUT request to the Blob storage endpoint. 
</p>
        <p>
There is a header in there called AuthorizationBSharedKey. I certainly hope that’s
not the storage account shared key for the Azure storage account! But again, without
seeing the full messages I can’t really tell. It’s certainly not a standard Azure
header, but, it does have a somewhat worrying name. 
</p>
        <p>
Anyone able to pull the headers in full for some analysis? chris(at)syringe.net.nz 
</p>
        <p>
Chris <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=94979e2d-6f5f-44d1-b6b0-3b711c2afb47" /></p>
      </body>
      <title>Apple iCloud Running on Windows Azure and Amazon S3</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,94979e2d-6f5f-44d1-b6b0-3b711c2afb47.aspx</guid>
      <link>http://www.syringe.net.nz/2011/06/10/AppleICloudRunningOnWindowsAzureAndAmazonS3.aspx</link>
      <pubDate>Fri, 10 Jun 2011 12:29:01 GMT</pubDate>
      <description>&lt;p&gt;
Hi All, 
&lt;p&gt;
Saw this rather interesting snippet come through on the Twitter feed this morning. 
&lt;p&gt;
&lt;a href="http://mobilitydigest.com/icloud-brought-to-you-by-microsoft-and-amazon/"&gt;http://mobilitydigest.com/icloud-brought-to-you-by-microsoft-and-amazon/&lt;/a&gt; 
&lt;p&gt;
Clicking through shows you some partial HTTP messages (some stuff is blurred out) 
&lt;p&gt;
&lt;img title="icloud2" alt="" src="http://www.infiniteapple.net/wp-content/blogs.dir/10/files/2011/06/icloud2.jpg" width="556" height="230"&gt; 
&lt;p&gt;
Certainly looks like iCloud is using both Azure Blob storage and S3. 
&lt;p&gt;
They are probably using Blob storage for the ability to use Shared Access Signatures
for file upload, but, without seeing the full URL in the HTTP request that’s a bit
of a guess. 
&lt;p&gt;
My guess is that the call to the iCloud servers for authorizePut will be fetching
a SAS and then this is being used in the PUT request to the Blob storage endpoint. 
&lt;p&gt;
There is a header in there called AuthorizationBSharedKey. I certainly hope that’s
not the storage account shared key for the Azure storage account! But again, without
seeing the full messages I can’t really tell. It’s certainly not a standard Azure
header, but, it does have a somewhat worrying name. 
&lt;p&gt;
Anyone able to pull the headers in full for some analysis? chris(at)syringe.net.nz 
&lt;p&gt;
Chris &lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=94979e2d-6f5f-44d1-b6b0-3b711c2afb47" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,94979e2d-6f5f-44d1-b6b0-3b711c2afb47.aspx</comments>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=0ebfe8e0-3017-482c-820c-f16902dc6ae9</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,0ebfe8e0-3017-482c-820c-f16902dc6ae9.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,0ebfe8e0-3017-482c-820c-f16902dc6ae9.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=0ebfe8e0-3017-482c-820c-f16902dc6ae9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So there’s not a whole lots of stuff on the interweb that gets you started with drives
and SQL Compact 4 is only just out into the open. My need was for a lightweight database
for a sample app I’m building with <a href="http://www.59north.com">Chris Klug</a> for
our session at Tech Ed New Zealand.
</p>
        <p>
I thought I’d run quickly through how I got things going.
</p>
        <p>
          <strong>Getting the Bits<br /></strong>I grabbed the bits using the <a href="http://microsoft.com/web">Microsoft
Web Platform installer</a>. I wanted two things. 1) SQL Compact 4 CTP1 and; 2) The
Web Matrix tool.<br />
It’s hopefully fairly obvious why I needed SQL Compact. The reason I wanted Web Matrix
is because it’s currently the only tool I could find that will allow me to create
and edit SQL Compact databases.<br /></p>
        <p>
          <a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/trznaj5k_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="trznaj5k" border="0" alt="trznaj5k" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/trznaj5k_thumb.jpg" width="244" height="150" />
          </a>  <a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ixuyzv04_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ixuyzv04" border="0" alt="ixuyzv04" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ixuyzv04_thumb.jpg" width="244" height="94" /></a></p>
        <p>
I’ll be using Visual Studio for much of this post; I’m guessing y’all know how to
get your mittens on that now.
</p>
        <p>
          <strong>Creating a Database<br /></strong>To build our database we’ll be using Web Matrix. It doesn’t have a specific
database designer that is independent of the site editor so we’ll need to create a
site and then create it in the context of our site.
</p>
        <p>
          <a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/mdhkuthy_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="mdhkuthy" border="0" alt="mdhkuthy" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/mdhkuthy_thumb.jpg" width="244" height="117" />
          </a>
          <br />
We’ll start from a template.
</p>
        <p>
          <a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/sepojgnz_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="sepojgnz" border="0" alt="sepojgnz" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/sepojgnz_thumb.jpg" width="244" height="174" />
          </a>
          <br />
…and create an empty site.
</p>
        <p>
Choose <em>Databases </em>from the left hand nav.
</p>
        <p>
          <a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/p2py5yin_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="p2py5yin" border="0" alt="p2py5yin" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/p2py5yin_thumb.jpg" width="244" height="154" />
          </a>
        </p>
        <p>
Choose to create a new database from the ribbon
</p>
        <p>
          <a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/1cx4dml5_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="1cx4dml5" border="0" alt="1cx4dml5" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/1cx4dml5_thumb.jpg" width="244" height="98" />
          </a>
        </p>
        <p>
Double click to select tables. And right click to add a new table
</p>
        <p>
          <a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/a5kbmcaw_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="a5kbmcaw" border="0" alt="a5kbmcaw" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/a5kbmcaw_thumb.jpg" width="241" height="244" />
          </a>
        </p>
        <p>
Create a basic table definition with a ContactID and ContactName. Use the Ribbon controls
to create new columns. Use a BigInt identity column for the ID and make it the Primary
Key.
</p>
        <p>
          <a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ih4vdprv_2.jpg">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ih4vdprv" border="0" alt="ih4vdprv" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ih4vdprv_thumb.jpg" width="244" height="140" />
          </a>
        </p>
        <p>
Save the table as <em>Contact</em></p>
Close Web Matrix- our database has been created and saved into a subfolder of my documents.
Mine was at 
<p>
C:\Users\Chris Auld\Documents\My Web Sites\Empty Site\App_Data 
</p><p>
We need some data in our database. We could ahve used Web Matrix to do this but I
wanted to show another tool that allows us to execute raw SQL against the DB as it
may be more suited to some developers.
</p><p>
The tool in question is the SQL CE Toolbox (you’ll need the latest version which is
a standalone application)<br />
Grab it from here: <a title="http://sqlcetoolbox.codeplex.com/" href="http://sqlcetoolbox.codeplex.com/">http://sqlcetoolbox.codeplex.com/</a><br />
Don’t just install the VIsual Studio add-in version as at the time of writing it doesn’t
support the v4 sdf format.
</p><p>
Open the tool and right click to add a new connection
</p><p><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/wgaqiuot_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="wgaqiuot" border="0" alt="wgaqiuot" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/wgaqiuot_thumb.jpg" width="244" height="64" /></a></p><p>
Open the database file and test the connection
</p><p><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ztpigimk_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ztpigimk" border="0" alt="ztpigimk" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ztpigimk_thumb.jpg" width="244" height="201" /></a></p><p>
Expand the tree to show our <em>Contact</em> table. Right click and choose ‘Script
as Insert’. This will create a template insert script for us.<br />
Enter some sensible (or stupid if you prefer) values and then execute the query. I
didn’t attempt to insert the identity column and so removed that from the query.
</p><p><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/slfl4yrk_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="slfl4yrk" border="0" alt="slfl4yrk" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/slfl4yrk_thumb.jpg" width="244" height="114" /></a></p><p>
Before we leave this tool click the Estimated Plan toolbar button. As long as you
have SQL Server Management Studio installed it’ll open that tool and hand over the
query plan text.
</p><p><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/43uma5oy_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="43uma5oy" border="0" alt="43uma5oy" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/43uma5oy_thumb.jpg" width="244" height="104" /></a><br />
That’s right folks. That is a graphical query plan graph of the query for my embedded
database. That’s pretty damn cool!
</p><p><strong>Getting Your Database Into Windows Azure Storage</strong></p><p>
Being a database we want our *.sdf file sitting in a WIndows Azure drive. There are
a bunch of ways we could do this:
</p><p>
- We could put it into our service package, create a drive on startup, copy to the
drive and then do a lazy check each time we start so it’s only done once.<br />
-We could create the whole VHD on the client machine and upload that to storage. This
removes any of the once only init code from our application. THis is the approach
I chose to use
</p><p>
We need to create a VHD. Hooray for Windows 7- this is trivial. If you are a hard-ass
like Steve Marx then you can use a <a href="http://blog.smarx.com/posts/serving-your-website-from-a-windows-azure-drive">batch
command to do this</a> but you all know that I’m not really a hard ass so I’ll do
the draggy droppy clicky clicky thing.
</p><p>
Open Disk Management. I’m a fan of the search box in the start menu- type ‘Disk Management’
and then select ‘Create and format hard disk partitions’
</p><p><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ll3azfwj_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ll3azfwj" border="0" alt="ll3azfwj" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ll3azfwj_thumb.jpg" width="244" height="166" /></a></p><p>
Use the <em>Action </em>menu to <em>Create VHD. </em>Stick it somewhere useful like
the desktop as we’ll need to grab it later. You’ll want to choose a fixed size- I
chose to make it 100MB. You’ll only pay for the actual data you store on disk (not
the empty stuff) but more on that shortly.
</p><p><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/soyitaae_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="soyitaae" border="0" alt="soyitaae" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/soyitaae_thumb.jpg" width="244" height="233" /></a></p><p>
Once created you’ll need to Initialize the disk with an MBR
</p><p><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/mhcwels0_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="mhcwels0" border="0" alt="mhcwels0" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/mhcwels0_thumb.jpg" width="244" height="91" /></a></p><p>
.. and Format as NTFS
</p><p><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/0bubf4tl_2.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="0bubf4tl" border="0" alt="0bubf4tl" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/0bubf4tl_thumb.jpg" width="244" height="89" /></a></p><p><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/image_2.png"><img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/image_thumb.png" width="244" height="191" /></a>\
</p><p>
The drive will now be available in Windows Explorer and we can copy our *.sdf file
across from the <em>My Web Sites </em>directory to our new VHD
</p><p>
Once we’ve copied it over we can go back and <em>Detach</em> the VHD
</p><p><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/hg2c3kjm_2.jpg"><img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="hg2c3kjm" border="0" alt="hg2c3kjm" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/hg2c3kjm_thumb.jpg" width="244" height="128" /></a></p><p>
Now we can upload the VHD to Blob storage. Before you crack out your favourite Azure
storage client (I like <a href="http://www.cerebrata.com/products/cloudstoragestudio/">Cloud
Studio</a> from Cerebrata) you’ll need to want to check that it supports sparse Page
Blob uploads. Cloud Studio doesn’t so we’ll use the VHDUpload Tool from here: <a title="http://blogs.msdn.com/b/windowsazurestorage/archive/2010/04/11/using-windows-azure-page-blobs-and-how-to-efficiently-upload-and-download-page-blobs.aspx" href="http://blogs.msdn.com/b/windowsazurestorage/archive/2010/04/11/using-windows-azure-page-blobs-and-how-to-efficiently-upload-and-download-page-blobs.aspx">http://blogs.msdn.com/b/windowsazurestorage/archive/2010/04/11/using-windows-azure-page-blobs-and-how-to-efficiently-upload-and-download-page-blobs.aspx</a> I
took the liberty of building the tool: <a href="http://cid-331c152ae0a57e96.office.live.com/self.aspx/Public/VHDUploadTool.zip">VHDUpload</a></p><p><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/image_4.png"><img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/image_thumb_1.png" width="244" height="232" /></a></p><p>
 
</p><p>
More in the Part 2 of this post tomorrow.
</p><img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=0ebfe8e0-3017-482c-820c-f16902dc6ae9" /></body>
      <title>Windows Azure Drives + SQL Compact 4 &amp;ndash; Part #1</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,0ebfe8e0-3017-482c-820c-f16902dc6ae9.aspx</guid>
      <link>http://www.syringe.net.nz/2010/07/20/WindowsAzureDrivesSQLCompact4NdashPart1.aspx</link>
      <pubDate>Tue, 20 Jul 2010 08:24:02 GMT</pubDate>
      <description>&lt;p&gt;
So there’s not a whole lots of stuff on the interweb that gets you started with drives
and SQL Compact 4 is only just out into the open. My need was for a lightweight database
for a sample app I’m building with &lt;a href="http://www.59north.com"&gt;Chris Klug&lt;/a&gt; for
our session at Tech Ed New Zealand.
&lt;/p&gt;
&lt;p&gt;
I thought I’d run quickly through how I got things going.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Getting the Bits&lt;br&gt;
&lt;/strong&gt;I grabbed the bits using the &lt;a href="http://microsoft.com/web"&gt;Microsoft
Web Platform installer&lt;/a&gt;. I wanted two things. 1) SQL Compact 4 CTP1 and; 2) The
Web Matrix tool.&lt;br&gt;
It’s hopefully fairly obvious why I needed SQL Compact. The reason I wanted Web Matrix
is because it’s currently the only tool I could find that will allow me to create
and edit SQL Compact databases.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/trznaj5k_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="trznaj5k" border="0" alt="trznaj5k" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/trznaj5k_thumb.jpg" width="244" height="150"&gt;&lt;/a&gt;&amp;nbsp; &lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ixuyzv04_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="ixuyzv04" border="0" alt="ixuyzv04" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ixuyzv04_thumb.jpg" width="244" height="94"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I’ll be using Visual Studio for much of this post; I’m guessing y’all know how to
get your mittens on that now.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Creating a Database&lt;br&gt;
&lt;/strong&gt;To build our database we’ll be using Web Matrix. It doesn’t have a specific
database designer that is independent of the site editor so we’ll need to create a
site and then create it in the context of our site.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/mdhkuthy_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="mdhkuthy" border="0" alt="mdhkuthy" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/mdhkuthy_thumb.jpg" width="244" height="117"&gt;&lt;/a&gt;
&lt;br&gt;
We’ll start from a template.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/sepojgnz_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="sepojgnz" border="0" alt="sepojgnz" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/sepojgnz_thumb.jpg" width="244" height="174"&gt;&lt;/a&gt;
&lt;br&gt;
…and create an empty site.
&lt;/p&gt;
&lt;p&gt;
Choose &lt;em&gt;Databases &lt;/em&gt;from the left hand nav.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/p2py5yin_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="p2py5yin" border="0" alt="p2py5yin" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/p2py5yin_thumb.jpg" width="244" height="154"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Choose to create a new database from the ribbon
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/1cx4dml5_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="1cx4dml5" border="0" alt="1cx4dml5" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/1cx4dml5_thumb.jpg" width="244" height="98"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Double click to select tables. And right click to add a new table
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/a5kbmcaw_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="a5kbmcaw" border="0" alt="a5kbmcaw" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/a5kbmcaw_thumb.jpg" width="241" height="244"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Create a basic table definition with a ContactID and ContactName. Use the Ribbon controls
to create new columns. Use a BigInt identity column for the ID and make it the Primary
Key.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ih4vdprv_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="ih4vdprv" border="0" alt="ih4vdprv" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ih4vdprv_thumb.jpg" width="244" height="140"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Save the table as &lt;em&gt;Contact&lt;/em&gt;
&lt;/p&gt;
Close Web Matrix- our database has been created and saved into a subfolder of my documents.
Mine was at 
&lt;p&gt;
C:\Users\Chris Auld\Documents\My Web Sites\Empty Site\App_Data 
&lt;/p&gt;
&lt;p&gt;
We need some data in our database. We could ahve used Web Matrix to do this but I
wanted to show another tool that allows us to execute raw SQL against the DB as it
may be more suited to some developers.
&lt;/p&gt;
&lt;p&gt;
The tool in question is the SQL CE Toolbox (you’ll need the latest version which is
a standalone application)&lt;br&gt;
Grab it from here: &lt;a title="http://sqlcetoolbox.codeplex.com/" href="http://sqlcetoolbox.codeplex.com/"&gt;http://sqlcetoolbox.codeplex.com/&lt;/a&gt;
&lt;br&gt;
Don’t just install the VIsual Studio add-in version as at the time of writing it doesn’t
support the v4 sdf format.
&lt;/p&gt;
&lt;p&gt;
Open the tool and right click to add a new connection
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/wgaqiuot_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="wgaqiuot" border="0" alt="wgaqiuot" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/wgaqiuot_thumb.jpg" width="244" height="64"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Open the database file and test the connection
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ztpigimk_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="ztpigimk" border="0" alt="ztpigimk" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ztpigimk_thumb.jpg" width="244" height="201"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Expand the tree to show our &lt;em&gt;Contact&lt;/em&gt; table. Right click and choose ‘Script
as Insert’. This will create a template insert script for us.&lt;br&gt;
Enter some sensible (or stupid if you prefer) values and then execute the query. I
didn’t attempt to insert the identity column and so removed that from the query.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/slfl4yrk_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="slfl4yrk" border="0" alt="slfl4yrk" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/slfl4yrk_thumb.jpg" width="244" height="114"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Before we leave this tool click the Estimated Plan toolbar button. As long as you
have SQL Server Management Studio installed it’ll open that tool and hand over the
query plan text.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/43uma5oy_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="43uma5oy" border="0" alt="43uma5oy" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/43uma5oy_thumb.jpg" width="244" height="104"&gt;&lt;/a&gt;
&lt;br&gt;
That’s right folks. That is a graphical query plan graph of the query for my embedded
database. That’s pretty damn cool!
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Getting Your Database Into Windows Azure Storage&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Being a database we want our *.sdf file sitting in a WIndows Azure drive. There are
a bunch of ways we could do this:
&lt;/p&gt;
&lt;p&gt;
- We could put it into our service package, create a drive on startup, copy to the
drive and then do a lazy check each time we start so it’s only done once.&lt;br&gt;
-We could create the whole VHD on the client machine and upload that to storage. This
removes any of the once only init code from our application. THis is the approach
I chose to use
&lt;/p&gt;
&lt;p&gt;
We need to create a VHD. Hooray for Windows 7- this is trivial. If you are a hard-ass
like Steve Marx then you can use a &lt;a href="http://blog.smarx.com/posts/serving-your-website-from-a-windows-azure-drive"&gt;batch
command to do this&lt;/a&gt; but you all know that I’m not really a hard ass so I’ll do
the draggy droppy clicky clicky thing.
&lt;/p&gt;
&lt;p&gt;
Open Disk Management. I’m a fan of the search box in the start menu- type ‘Disk Management’
and then select ‘Create and format hard disk partitions’
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ll3azfwj_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="ll3azfwj" border="0" alt="ll3azfwj" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/ll3azfwj_thumb.jpg" width="244" height="166"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Use the &lt;em&gt;Action &lt;/em&gt;menu to &lt;em&gt;Create VHD. &lt;/em&gt;Stick it somewhere useful like
the desktop as we’ll need to grab it later. You’ll want to choose a fixed size- I
chose to make it 100MB. You’ll only pay for the actual data you store on disk (not
the empty stuff) but more on that shortly.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/soyitaae_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="soyitaae" border="0" alt="soyitaae" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/soyitaae_thumb.jpg" width="244" height="233"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Once created you’ll need to Initialize the disk with an MBR
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/mhcwels0_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="mhcwels0" border="0" alt="mhcwels0" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/mhcwels0_thumb.jpg" width="244" height="91"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
.. and Format as NTFS
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/0bubf4tl_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="0bubf4tl" border="0" alt="0bubf4tl" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/0bubf4tl_thumb.jpg" width="244" height="89"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/image_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/image_thumb.png" width="244" height="191"&gt;&lt;/a&gt;\
&lt;/p&gt;
&lt;p&gt;
The drive will now be available in Windows Explorer and we can copy our *.sdf file
across from the &lt;em&gt;My Web Sites &lt;/em&gt;directory to our new VHD
&lt;/p&gt;
&lt;p&gt;
Once we’ve copied it over we can go back and &lt;em&gt;Detach&lt;/em&gt; the VHD
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/hg2c3kjm_2.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="hg2c3kjm" border="0" alt="hg2c3kjm" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/hg2c3kjm_thumb.jpg" width="244" height="128"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Now we can upload the VHD to Blob storage. Before you crack out your favourite Azure
storage client (I like &lt;a href="http://www.cerebrata.com/products/cloudstoragestudio/"&gt;Cloud
Studio&lt;/a&gt; from Cerebrata) you’ll need to want to check that it supports sparse Page
Blob uploads. Cloud Studio doesn’t so we’ll use the VHDUpload Tool from here: &lt;a title="http://blogs.msdn.com/b/windowsazurestorage/archive/2010/04/11/using-windows-azure-page-blobs-and-how-to-efficiently-upload-and-download-page-blobs.aspx" href="http://blogs.msdn.com/b/windowsazurestorage/archive/2010/04/11/using-windows-azure-page-blobs-and-how-to-efficiently-upload-and-download-page-blobs.aspx"&gt;http://blogs.msdn.com/b/windowsazurestorage/archive/2010/04/11/using-windows-azure-page-blobs-and-how-to-efficiently-upload-and-download-page-blobs.aspx&lt;/a&gt; I
took the liberty of building the tool: &lt;a href="http://cid-331c152ae0a57e96.office.live.com/self.aspx/Public/VHDUploadTool.zip"&gt;VHDUpload&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/image_4.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" class="wlDisabledImage" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WindowsAzureDrivesASimpleHow2_10236/image_thumb_1.png" width="244" height="232"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
More in the Part 2 of this post tomorrow.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=0ebfe8e0-3017-482c-820c-f16902dc6ae9" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,0ebfe8e0-3017-482c-820c-f16902dc6ae9.aspx</comments>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=b7933390-cb36-497e-8c86-6c32af691882</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,b7933390-cb36-497e-8c86-6c32af691882.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,b7933390-cb36-497e-8c86-6c32af691882.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=b7933390-cb36-497e-8c86-6c32af691882</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The Windows Azure Management API uses x509 certificates to authenticate callers. In
order to make a call to the API you need to have a certificate with both public and
private key at the client and and the public key uploaded into the Azure portal. But,
if you then want to call the management API from your Windows Azure VMs then you’ll
also need to install the cert into the instances by defining them in the service definition
This post will show you how.
</p>
        <p>
I found it a bit of a pain to get going so here’s my simple guide. I used this to
setup the certs for my favourite open source Azure toolkit <a href="http://lokadcloud.codeplex.com/">Lokad-Cloud</a>.
We’ll be creating a self signed certificate, then uploading that certificate into
the Windows Azure management portal. Finally we’ll add the certificate to our service
model to ensure that Windows Azure installs the certificate into our VM instance when
it is started.
</p>
        <p>
Here’s the approach in pictures so you can follow along.
</p>
        <ol>
          <li>
Create a self signed certificate in the IIS7 Manager<br />
Open IIS7 Manager<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb.png" width="244" height="74" /></a>  
</li>
          <li>
Expand the node for your local machine<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_1.png" width="244" height="95" /></a>  
</li>
          <li>
Double Click Server Certificates<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_2.png" width="244" height="89" /></a></li>
          <li>
Choose Create Self-Signed Certificate<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_8.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_3.png" width="226" height="152" /></a></li>
          <li>
Give it a friendly name<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_10.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_4.png" width="244" height="56" /></a></li>
        </ol>
        <p>
You’re all done in IIS7 Manager. It’s just created a new Certificate and added this
into the trusted root certification authorities on your machine. This is a highly
trusted location for the cert so do be careful if you ever export it with the private
key included.
</p>
        <p>
We need to export it with the public key included so that we can upload it to the
Windows Azure Portal.
</p>
        <ol>
          <li>
Run CertMgr.msc - just type it in full into the Start box.<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_12.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_5.png" width="244" height="40" /></a></li>
          <li>
Expand 'Trusted Root Certificates Authorities –&gt; Certificates"’<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_16.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_7.png" width="208" height="205" /></a></li>
          <li>
Find your cert using the friendly name column and right click and choose Export<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_18.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_8.png" width="244" height="41" /></a></li>
          <li>
Choose the option to <strong>NOT </strong>export the public key. You should generally
avoid exporting the public key if at all possible*. 
</li>
          <li>
Choose to export as a DER Encoded binary 
</li>
          <li>
Save it somewhere useful – we stick ours into source control 
</li>
          <li>
Choose Export again, but, this time choose to export the private key<br />
Leave the PFX options all unchecked<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_42.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_18.png" width="244" height="222" /></a></li>
          <li>
Give it a sensible name.</li>
        </ol>
        <p>
You’re all done exporting. Now we need to upload it to Azure.
</p>
        <ol>
          <li>
Go to the Windows Azure Portal 
</li>
          <li>
Choose the appropriate project<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_20.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_9.png" width="244" height="86" /></a></li>
          <li>
Click the Account tab across the top of the page<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_22.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_10.png" width="244" height="52" /></a></li>
          <li>
Click Manage My API Certificates<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_24.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_11.png" width="244" height="78" /></a></li>
          <li>
Browse to and upload your *.cer file you created earlier<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_26.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_12.png" width="244" height="36" /></a></li>
          <li>
You should now see the certificate listed against the account.<br />
Note that it’ll be listed using the Subject rather than the friendly name. So you’ll
need to identify it by the thumbprint if you have multiple uploaded from the same
machine. Azure Team: Can we please have the friendly name listed here?<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_28.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_13.png" width="244" height="132" /></a></li>
        </ol>
        <p>
Now we’re ready to use our certificate from the Windows Azure Tools for Visual Studio
</p>
        <ol>
          <li>
Open your Windows Azure Project – We’re using Lokad-Cloud here 
</li>
          <li>
Expand the Cloud Project to show the Roles.<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_30.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_14.png" width="244" height="241" /></a></li>
          <li>
Right click the Web Role and choose properties<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_32.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_15.png" width="244" height="153" /></a><br />
This will open the Snazzy Windows Azure graphical UI. This is much nice than editing
the Model XML by hand. 
</li>
          <li>
Choose the Certificates Tab<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_34.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_16.png" width="136" height="244" /></a></li>
          <li>
In our case there is already a certificate entry defined by the default Lokad Model
definition.<br />
Click the elipses (…) at the end of the thumbnail column to open the certificate chooser
dialog.<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_36.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_17.png" width="244" height="52" /></a></li>
          <li>
Choose the cert from the dialog<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_40.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_19.png" width="198" height="244" /></a></li>
          <li>
Repeat for the worker role</li>
        </ol>
        <p>
The last thing we need to do is upload the certificate into our cloud service before
we can upload our packages. 
</p>
        <ol>
          <li>
Create a new Cloud Service 
</li>
          <li>
Browse to the bottom of the page to find certificates and choose Manage<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_38.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_6.png" width="244" height="152" /></a></li>
          <li>
Browse for your certificate (including the private key) 
</li>
          <li>
Punch in your password and hit upload 
</li>
          <li>
Confirm that you’re all uploaded.<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_44.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_20.png" width="244" height="37" /></a><br /></li>
        </ol>
        <p>
You’re all done. Now you can happily deploy the app to Windows Azure along with having
your certificate deployed into your Azure instances as well. This means that your
Azure roles can now call the management API themselves.
</p>
        <p>
*There will be times when you need to export the public key. We’ve had to do that
in this scenario as we actually want to install the private key into our Azure instances.
Another good example here is in a shared development environment. You have the option
of either sharing a certificate among everyone or each uploading your own public key.
Because we’re using the lokad tool and this explicitly supports just a single cert
we’ve actually exported our cert (password protected) into our source control system
so all developers can install the same private key.<br /></p>
        <p>
If you have done an export and want to install the private cert onto a new machine
then you’ll need to add it into the Local Computer –&gt; Personal store.
</p>
        <ol>
          <li>
Run MMC by typing MMC in the start run box</li>
          <li>
Add the Certificates Snapin<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_46.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_21.png" width="244" height="161" /></a><br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_48.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_22.png" width="244" height="172" /></a></li>
          <li>
Choose Computer Account<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_50.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_23.png" width="244" height="181" /></a></li>
          <li>
Choose local computer</li>
          <li>
Open the Personal Store and choose More Actions&gt;Import<br /><a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_52.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_24.png" width="244" height="67" /></a></li>
          <li>
Browse to and import your certificate.</li>
        </ol>
        <p>
The certificate should now be visible in the Windows Azure Tools for VS.NET cert selector
dialog.
</p>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=b7933390-cb36-497e-8c86-6c32af691882" />
      </body>
      <title>Windows Azure Certificates for Self management Scenarios</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,b7933390-cb36-497e-8c86-6c32af691882.aspx</guid>
      <link>http://www.syringe.net.nz/2010/05/03/WindowsAzureCertificatesForSelfManagementScenarios.aspx</link>
      <pubDate>Mon, 03 May 2010 09:18:56 GMT</pubDate>
      <description>&lt;p&gt;
The Windows Azure Management API uses x509 certificates to authenticate callers. In
order to make a call to the API you need to have a certificate with both public and
private key at the client and and the public key uploaded into the Azure portal. But,
if you then want to call the management API from your Windows Azure VMs then you’ll
also need to install the cert into the instances by defining them in the service definition
This post will show you how.
&lt;/p&gt;
&lt;p&gt;
I found it a bit of a pain to get going so here’s my simple guide. I used this to
setup the certs for my favourite open source Azure toolkit &lt;a href="http://lokadcloud.codeplex.com/"&gt;Lokad-Cloud&lt;/a&gt;.
We’ll be creating a self signed certificate, then uploading that certificate into
the Windows Azure management portal. Finally we’ll add the certificate to our service
model to ensure that Windows Azure installs the certificate into our VM instance when
it is started.
&lt;/p&gt;
&lt;p&gt;
Here’s the approach in pictures so you can follow along.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Create a self signed certificate in the IIS7 Manager&lt;br&gt;
Open IIS7 Manager&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb.png" width="244" height="74"&gt;&lt;/a&gt;&amp;nbsp; 
&lt;li&gt;
Expand the node for your local machine&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_1.png" width="244" height="95"&gt;&lt;/a&gt;&amp;nbsp; 
&lt;li&gt;
Double Click Server Certificates&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_2.png" width="244" height="89"&gt;&lt;/a&gt; 
&lt;li&gt;
Choose Create Self-Signed Certificate&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_3.png" width="226" height="152"&gt;&lt;/a&gt; 
&lt;li&gt;
Give it a friendly name&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_4.png" width="244" height="56"&gt;&lt;/a&gt; 
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
You’re all done in IIS7 Manager. It’s just created a new Certificate and added this
into the trusted root certification authorities on your machine. This is a highly
trusted location for the cert so do be careful if you ever export it with the private
key included.
&lt;/p&gt;
&lt;p&gt;
We need to export it with the public key included so that we can upload it to the
Windows Azure Portal.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Run CertMgr.msc - just type it in full into the Start box.&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_12.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_5.png" width="244" height="40"&gt;&lt;/a&gt; 
&lt;li&gt;
Expand 'Trusted Root Certificates Authorities –&amp;gt; Certificates"’&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_16.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_7.png" width="208" height="205"&gt;&lt;/a&gt; 
&lt;li&gt;
Find your cert using the friendly name column and right click and choose Export&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_18.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_8.png" width="244" height="41"&gt;&lt;/a&gt; 
&lt;li&gt;
Choose the option to &lt;strong&gt;NOT &lt;/strong&gt;export the public key. You should generally
avoid exporting the public key if at all possible*. 
&lt;li&gt;
Choose to export as a DER Encoded binary 
&lt;li&gt;
Save it somewhere useful – we stick ours into source control 
&lt;li&gt;
Choose Export again, but, this time choose to export the private key&lt;br&gt;
Leave the PFX options all unchecked&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_42.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_18.png" width="244" height="222"&gt;&lt;/a&gt; 
&lt;li&gt;
Give it a sensible name.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
You’re all done exporting. Now we need to upload it to Azure.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Go to the Windows Azure Portal 
&lt;li&gt;
Choose the appropriate project&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_20.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_9.png" width="244" height="86"&gt;&lt;/a&gt; 
&lt;li&gt;
Click the Account tab across the top of the page&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_22.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_10.png" width="244" height="52"&gt;&lt;/a&gt; 
&lt;li&gt;
Click Manage My API Certificates&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_24.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_11.png" width="244" height="78"&gt;&lt;/a&gt; 
&lt;li&gt;
Browse to and upload your *.cer file you created earlier&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_26.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_12.png" width="244" height="36"&gt;&lt;/a&gt; 
&lt;li&gt;
You should now see the certificate listed against the account.&lt;br&gt;
Note that it’ll be listed using the Subject rather than the friendly name. So you’ll
need to identify it by the thumbprint if you have multiple uploaded from the same
machine. Azure Team: Can we please have the friendly name listed here?&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_28.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_13.png" width="244" height="132"&gt;&lt;/a&gt; 
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Now we’re ready to use our certificate from the Windows Azure Tools for Visual Studio
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Open your Windows Azure Project – We’re using Lokad-Cloud here 
&lt;li&gt;
Expand the Cloud Project to show the Roles.&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_30.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_14.png" width="244" height="241"&gt;&lt;/a&gt; 
&lt;li&gt;
Right click the Web Role and choose properties&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_32.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_15.png" width="244" height="153"&gt;&lt;/a&gt; 
&lt;br&gt;
This will open the Snazzy Windows Azure graphical UI. This is much nice than editing
the Model XML by hand. 
&lt;li&gt;
Choose the Certificates Tab&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_34.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_16.png" width="136" height="244"&gt;&lt;/a&gt; 
&lt;li&gt;
In our case there is already a certificate entry defined by the default Lokad Model
definition.&lt;br&gt;
Click the elipses (…) at the end of the thumbnail column to open the certificate chooser
dialog.&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_36.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_17.png" width="244" height="52"&gt;&lt;/a&gt; 
&lt;li&gt;
Choose the cert from the dialog&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_40.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_19.png" width="198" height="244"&gt;&lt;/a&gt; 
&lt;li&gt;
Repeat for the worker role&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
The last thing we need to do is upload the certificate into our cloud service before
we can upload our packages. 
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Create a new Cloud Service 
&lt;li&gt;
Browse to the bottom of the page to find certificates and choose Manage&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_38.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_6.png" width="244" height="152"&gt;&lt;/a&gt; 
&lt;li&gt;
Browse for your certificate (including the private key) 
&lt;li&gt;
Punch in your password and hit upload 
&lt;li&gt;
Confirm that you’re all uploaded.&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_44.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_20.png" width="244" height="37"&gt;&lt;/a&gt; 
&lt;br&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
You’re all done. Now you can happily deploy the app to Windows Azure along with having
your certificate deployed into your Azure instances as well. This means that your
Azure roles can now call the management API themselves.
&lt;/p&gt;
&lt;p&gt;
*There will be times when you need to export the public key. We’ve had to do that
in this scenario as we actually want to install the private key into our Azure instances.
Another good example here is in a shared development environment. You have the option
of either sharing a certificate among everyone or each uploading your own public key.
Because we’re using the lokad tool and this explicitly supports just a single cert
we’ve actually exported our cert (password protected) into our source control system
so all developers can install the same private key.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
If you have done an export and want to install the private cert onto a new machine
then you’ll need to add it into the Local Computer –&amp;gt; Personal store.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Run MMC by typing MMC in the start run box&lt;/li&gt;
&lt;li&gt;
Add the Certificates Snapin&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_46.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_21.png" width="244" height="161"&gt;&lt;/a&gt; 
&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_48.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_22.png" width="244" height="172"&gt;&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
Choose Computer Account&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_50.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_23.png" width="244" height="181"&gt;&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
Choose local computer&lt;/li&gt;
&lt;li&gt;
Open the Personal Store and choose More Actions&amp;gt;Import&lt;br&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_52.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/TheUltimateGuidetoWindowsAzureManagement_E94C/image_thumb_24.png" width="244" height="67"&gt;&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
Browse to and import your certificate.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
The certificate should now be visible in the Windows Azure Tools for VS.NET cert selector
dialog.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=b7933390-cb36-497e-8c86-6c32af691882" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,b7933390-cb36-497e-8c86-6c32af691882.aspx</comments>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=9366bfd0-5df9-48d5-94a2-87030d59cc84</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,9366bfd0-5df9-48d5-94a2-87030d59cc84.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,9366bfd0-5df9-48d5-94a2-87030d59cc84.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=9366bfd0-5df9-48d5-94a2-87030d59cc84</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I’ve mentioned this at a heap of sessions I’ve presented at and have never managed
to get around to posting it.
</p>
        <p>
So. Attached is my Windows Azure Pricing spreadsheet.
</p>
        <p>
Pretty simple. has three worksheets.
</p>
        <ol>
          <li>
A simple Table storage calculator that determines the cost of table storage.<br />
This includes overhead calculation – i.e. what is the ration of name to value in your
name/value pairs<br />
It also checks your key lengths fall within the 260 char URI limit and a few other
things. 
</li>
          <li>
A model of session state pricing.<br />
Basically shows that SQL Azure will typically be a cheaper option for Session state
storage (or anything with little data on disk and high read/write counts). 
</li>
          <li>
A detailed (very detailed) model of PhluffyPhotos.<br /></li>
        </ol>
        <p>
For more detail please see my MIX10 session on Storage in Windows Azure Platform
</p>
        <p>
          <a title="http://live.visitmix.com/MIX10/Sessions/EX11" href="http://live.visitmix.com/MIX10/Sessions/EX11">http://live.visitmix.com/MIX10/Sessions/EX11</a>
        </p>
        <iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-331c152ae0a57e96.skydrive.live.com/embedicon.aspx/Public/Pricing%20Calculators.xlsx" frameborder="0" marginwidth="0" scrolling="no">
        </iframe>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=9366bfd0-5df9-48d5-94a2-87030d59cc84" />
      </body>
      <title>Windows Azure Pricing Calculator Spreadsheet</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,9366bfd0-5df9-48d5-94a2-87030d59cc84.aspx</guid>
      <link>http://www.syringe.net.nz/2010/04/20/WindowsAzurePricingCalculatorSpreadsheet.aspx</link>
      <pubDate>Tue, 20 Apr 2010 21:06:10 GMT</pubDate>
      <description>&lt;p&gt;
I’ve mentioned this at a heap of sessions I’ve presented at and have never managed
to get around to posting it.
&lt;/p&gt;
&lt;p&gt;
So. Attached is my Windows Azure Pricing spreadsheet.
&lt;/p&gt;
&lt;p&gt;
Pretty simple. has three worksheets.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
A simple Table storage calculator that determines the cost of table storage.&lt;br&gt;
This includes overhead calculation – i.e. what is the ration of name to value in your
name/value pairs&lt;br&gt;
It also checks your key lengths fall within the 260 char URI limit and a few other
things. 
&lt;li&gt;
A model of session state pricing.&lt;br&gt;
Basically shows that SQL Azure will typically be a cheaper option for Session state
storage (or anything with little data on disk and high read/write counts). 
&lt;li&gt;
A detailed (very detailed) model of PhluffyPhotos.&lt;br&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
For more detail please see my MIX10 session on Storage in Windows Azure Platform
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://live.visitmix.com/MIX10/Sessions/EX11" href="http://live.visitmix.com/MIX10/Sessions/EX11"&gt;http://live.visitmix.com/MIX10/Sessions/EX11&lt;/a&gt;
&lt;/p&gt;
&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="http://cid-331c152ae0a57e96.skydrive.live.com/embedicon.aspx/Public/Pricing%20Calculators.xlsx" frameborder="0" marginwidth="0" scrolling="no"&gt;
&lt;/iframe&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=9366bfd0-5df9-48d5-94a2-87030d59cc84" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,9366bfd0-5df9-48d5-94a2-87030d59cc84.aspx</comments>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=10391f1a-95a8-4d87-8e95-27d7dcb1247c</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,10391f1a-95a8-4d87-8e95-27d7dcb1247c.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,10391f1a-95a8-4d87-8e95-27d7dcb1247c.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=10391f1a-95a8-4d87-8e95-27d7dcb1247c</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Much like <a href="http://blog.wadewegner.com/">Wade Wegner</a> I think that SQL Azure
is the jewel in the cloud for Microsoft. None of the other vendors have anything like
it. While it can be a bit sticker-shock-ish given that nominally a gig in SQL Azure
is 65 times the price of a gig in Azure storage, once you actually run some real world
scenario models it turns out to be really well priced. Think of a SQL Azure instance
not as 1GB (or 10GB… but I see no reason to use 10GB partitions) of storage but rather
as the cheapest damn fully backed up and HA relational database solution you’ll find
anywhere- and yes FOSSers I include your stuff in that calculation; no greasy haired, <a href="http://linuxandfriends.com/2009/07/26/baking-soda-uses-and-benefits/">under
washed</a> and over <a href="http://www.worldofwarcraft.com">WoWed</a> engineers needed
here.
</p>
        <p>
Anyway… I digress.
</p>
        <p>
A major PITA in using SQL Azure is that the tooling is tantalizingly close to be OK…
but in many ways it just doesn’t work. Dumping a SQL script and then re-creating the
DB in SQL Azure is a painful exercise in find and replace- check out the hands on
lab on Migrating a DB to the cloud in the <a href="http://www.microsoft.com/azure/trainingkit.mspx">Azure
training kit</a> for the gory details…
</p>
        <p>
Wade has a blog post up about a <a href="http://blog.wadewegner.com/index.php/2009/09/01/sql-azure-migration-wizard/">freebie
tool written by George Huey</a> that automates this process for you. Essential for
your Azure kit bag. It will parse out all the unsupported stuff.
</p>
        <p>
I ran it up and gave it a nice brutal challenge…. the AdventureWorksLT script that’s
used in the aforementioned lab. This includes both schema and data and is a decent
effort to parse. The tool churned for a good 3 or 4 minutes…. but I got a script out!
The original script includes some real curve-balls like XML Indexes and some tables
with data to populate but no clustered index (SQL Azure needs a clustered index before
you can insert into a table). I don’t expect it’ll get everything right., but, let’s
take a look at how it does against my hand crafted script….. 
</p>
        <p>
DOH!
</p>
        <p>
It doesn’t support cut and paste or saving of the script yet so I’ll need to go and
change the source first… More reporting back from me later. This looks really promising
and I’m confident it’s going to solve 90% of the pain points I’ve been hitting trying
to move complex (hell even simple) databases to the cloud.
</p>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=10391f1a-95a8-4d87-8e95-27d7dcb1247c" />
      </body>
      <title>Essential Tools for SQL Azure Development</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,10391f1a-95a8-4d87-8e95-27d7dcb1247c.aspx</guid>
      <link>http://www.syringe.net.nz/2009/09/03/EssentialToolsForSQLAzureDevelopment.aspx</link>
      <pubDate>Thu, 03 Sep 2009 11:12:12 GMT</pubDate>
      <description>&lt;p&gt;
Much like &lt;a href="http://blog.wadewegner.com/"&gt;Wade Wegner&lt;/a&gt; I think that SQL Azure
is the jewel in the cloud for Microsoft. None of the other vendors have anything like
it. While it can be a bit sticker-shock-ish given that nominally a gig in SQL Azure
is 65 times the price of a gig in Azure storage, once you actually run some real world
scenario models it turns out to be really well priced. Think of a SQL Azure instance
not as 1GB (or 10GB… but I see no reason to use 10GB partitions) of storage but rather
as the cheapest damn fully backed up and HA relational database solution you’ll find
anywhere- and yes FOSSers I include your stuff in that calculation; no greasy haired, &lt;a href="http://linuxandfriends.com/2009/07/26/baking-soda-uses-and-benefits/"&gt;under
washed&lt;/a&gt; and over &lt;a href="http://www.worldofwarcraft.com"&gt;WoWed&lt;/a&gt; engineers needed
here.
&lt;/p&gt;
&lt;p&gt;
Anyway… I digress.
&lt;/p&gt;
&lt;p&gt;
A major PITA in using SQL Azure is that the tooling is tantalizingly close to be OK…
but in many ways it just doesn’t work. Dumping a SQL script and then re-creating the
DB in SQL Azure is a painful exercise in find and replace- check out the hands on
lab on Migrating a DB to the cloud in the &lt;a href="http://www.microsoft.com/azure/trainingkit.mspx"&gt;Azure
training kit&lt;/a&gt; for the gory details…
&lt;/p&gt;
&lt;p&gt;
Wade has a blog post up about a &lt;a href="http://blog.wadewegner.com/index.php/2009/09/01/sql-azure-migration-wizard/"&gt;freebie
tool written by George Huey&lt;/a&gt; that automates this process for you. Essential for
your Azure kit bag. It will parse out all the unsupported stuff.
&lt;/p&gt;
&lt;p&gt;
I ran it up and gave it a nice brutal challenge…. the AdventureWorksLT script that’s
used in the aforementioned lab. This includes both schema and data and is a decent
effort to parse. The tool churned for a good 3 or 4 minutes…. but I got a script out!
The original script includes some real curve-balls like XML Indexes and some tables
with data to populate but no clustered index (SQL Azure needs a clustered index before
you can insert into a table). I don’t expect it’ll get everything right., but, let’s
take a look at how it does against my hand crafted script….. 
&lt;/p&gt;
&lt;p&gt;
DOH!
&lt;/p&gt;
&lt;p&gt;
It doesn’t support cut and paste or saving of the script yet so I’ll need to go and
change the source first… More reporting back from me later. This looks really promising
and I’m confident it’s going to solve 90% of the pain points I’ve been hitting trying
to move complex (hell even simple) databases to the cloud.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=10391f1a-95a8-4d87-8e95-27d7dcb1247c" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,10391f1a-95a8-4d87-8e95-27d7dcb1247c.aspx</comments>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=cebe3e19-85e6-4d5b-bc24-afb6f66aaeb1</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,cebe3e19-85e6-4d5b-bc24-afb6f66aaeb1.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,cebe3e19-85e6-4d5b-bc24-afb6f66aaeb1.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=cebe3e19-85e6-4d5b-bc24-afb6f66aaeb1</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
While there are certainly situations where it makes sense to have a natural <em>PartitionKey </em>when
working with Azure storage there are other times when all you really want is a simple
way to bucket up your data into equal bins. The usual approach to partitioning is
going to be some sort of hash function but if you decide to use a Guid as the RowKey
for your data you’ve basically got a nice collision resistant equal distribution already,
you just need to turn it into a partition key.
</p>
        <p>
I was sitting on the plane back from Singapore having a bit of a think about this.
Given that we can represent our Guid as a 128 bit Interger we can probably just do <em>RowKey </em>% <em>PartitionCount</em> 
and get a nice simple ordinal for each partition.
</p>
        <p>
So after my birthday dinner I did what any dedicated birthday boy would do and broke
out Visual Studio for a bit of a hack around..
</p>
        <p>
First problem was the ‘128 bit integer’ as .NET doesn’t have a native BigInt type.
A quick bit of Tiwtter asking and <a href="http://twitter.com/adjames">@adjames</a> suggested
the BigInteger class in .NET 4.0, but, given this is Azure there’s no .NET 4.0 support
quite yet. A bit of <a href="http://www.bing.com">Binging</a> (is that a verb yet?)
found some posts on <a href="http://stackoverflow.com/questions/567753/what-should-i-use-for-a-bigint-class-in-net">StackOverflow</a> and
an implementation of a <a href="http://biginteger.codeplex.com">BigInteger class on
CodePlex</a>.
</p>
        <p>
A quick console application confirmed that my thinking on the plane was right. 
</p>
        <div class="csharpcode">
          <pre class="csharpcode">
            <span class="kwrd">static</span>
            <span class="kwrd">void</span> Main(<span class="kwrd">string</span>[]
args) { <span class="kwrd">int</span>[] counts = <span class="kwrd">new</span><span class="kwrd">int</span>[]{0,0,0,0,0,0,0,0,0,0};
DateTime start = DateTime.Now; <span class="kwrd">for</span> (<span class="kwrd">int</span> i
= 0; i &lt; 1000000; i++) { Guid g = Guid.NewGuid(); BigInteger b = <span class="kwrd">new</span> BigInteger(g.ToByteArray());
BigInteger c = <span class="kwrd">new</span> BigInteger(10); <span class="rem">//Number
of partitions</span><span class="kwrd">int</span> p = BigInteger.ToInt32(BigInteger.Abs(b
% c)); <span class="rem">//Console.WriteLine(g.ToString() + " : " + p.ToString());</span> counts[p]
+= 1; } DateTime end = DateTime.Now; TimeSpan duration = end - start; Console.WriteLine(<span class="str">"Took:
"</span> + duration.TotalMilliseconds + <span class="str">" milliseconds"</span>);
Console.WriteLine(counts.ToString(<span class="str">","</span>)); Console.ReadKey();
}</pre>
          <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        </div>
        <style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
        <p>
        </p>
        <p>
Running this confirmed that my <em>RowKey</em> values would be evenly distributed
across the 10 partitions- my concern here was that the Guid algorithm might not be
quite up to the task but all seems good.
</p>
        <p>
          <a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/SimplePartitioningwithWindowsAzureTableS_10E39/image_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/SimplePartitioningwithWindowsAzureTableS_10E39/image_thumb.png" width="644" height="78" />
          </a>
        </p>
        <p>
6500ms for a million rows doesn’t look too bad on the face of it. I’m sure there are
plenty of performance optimizations to be eeked out, but, they’ll pale into insignificance
compared to a round trip to Azure storage via the load balancer. What I do need to
test is that it’s not more efficient to rehash the Guid into 64 bits and then calculate
the modulo. But that’s for another night- jaded now and hoping to do 100km on the
roadie in the morning.
</p>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=cebe3e19-85e6-4d5b-bc24-afb6f66aaeb1" />
      </body>
      <title>Simple Partitioning with Windows Azure Table Storage</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,cebe3e19-85e6-4d5b-bc24-afb6f66aaeb1.aspx</guid>
      <link>http://www.syringe.net.nz/2009/08/08/SimplePartitioningWithWindowsAzureTableStorage.aspx</link>
      <pubDate>Sat, 08 Aug 2009 07:50:00 GMT</pubDate>
      <description>&lt;p&gt;
While there are certainly situations where it makes sense to have a natural &lt;em&gt;PartitionKey &lt;/em&gt;when
working with Azure storage there are other times when all you really want is a simple
way to bucket up your data into equal bins. The usual approach to partitioning is
going to be some sort of hash function but if you decide to use a Guid as the RowKey
for your data you’ve basically got a nice collision resistant equal distribution already,
you just need to turn it into a partition key.
&lt;/p&gt;
&lt;p&gt;
I was sitting on the plane back from Singapore having a bit of a think about this.
Given that we can represent our Guid as a 128 bit Interger we can probably just do &lt;em&gt;RowKey &lt;/em&gt;% &lt;em&gt;PartitionCount&lt;/em&gt;&amp;nbsp;
and get a nice simple ordinal for each partition.
&lt;/p&gt;
&lt;p&gt;
So after my birthday dinner I did what any dedicated birthday boy would do and broke
out Visual Studio for a bit of a hack around..
&lt;/p&gt;
&lt;p&gt;
First problem was the ‘128 bit integer’ as .NET doesn’t have a native BigInt type.
A quick bit of Tiwtter asking and &lt;a href="http://twitter.com/adjames"&gt;@adjames&lt;/a&gt; suggested
the BigInteger class in .NET 4.0, but, given this is Azure there’s no .NET 4.0 support
quite yet. A bit of &lt;a href="http://www.bing.com"&gt;Binging&lt;/a&gt; (is that a verb yet?)
found some posts on &lt;a href="http://stackoverflow.com/questions/567753/what-should-i-use-for-a-bigint-class-in-net"&gt;StackOverflow&lt;/a&gt; and
an implementation of a &lt;a href="http://biginteger.codeplex.com"&gt;BigInteger class on
CodePlex&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
A quick console application confirmed that my thinking on the plane was right. 
&lt;/p&gt;
&lt;div class="csharpcode"&gt;&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Main(&lt;span class="kwrd"&gt;string&lt;/span&gt;[]
args) { &lt;span class="kwrd"&gt;int&lt;/span&gt;[] counts = &lt;span class="kwrd"&gt;new&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt;[]{0,0,0,0,0,0,0,0,0,0};
DateTime start = DateTime.Now; &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i
= 0; i &amp;lt; 1000000; i++) { Guid g = Guid.NewGuid(); BigInteger b = &lt;span class="kwrd"&gt;new&lt;/span&gt; BigInteger(g.ToByteArray());
BigInteger c = &lt;span class="kwrd"&gt;new&lt;/span&gt; BigInteger(10); &lt;span class="rem"&gt;//Number
of partitions&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; p = BigInteger.ToInt32(BigInteger.Abs(b
% c)); &lt;span class="rem"&gt;//Console.WriteLine(g.ToString() + " : " + p.ToString());&lt;/span&gt; counts[p]
+= 1; } DateTime end = DateTime.Now; TimeSpan duration = end - start; Console.WriteLine(&lt;span class="str"&gt;"Took:
"&lt;/span&gt; + duration.TotalMilliseconds + &lt;span class="str"&gt;" milliseconds"&lt;/span&gt;);
Console.WriteLine(counts.ToString(&lt;span class="str"&gt;","&lt;/span&gt;)); Console.ReadKey();
}&lt;/pre&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
&lt;/style&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Running this confirmed that my &lt;em&gt;RowKey&lt;/em&gt; values would be evenly distributed
across the 10 partitions- my concern here was that the Guid algorithm might not be
quite up to the task but all seems good.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/SimplePartitioningwithWindowsAzureTableS_10E39/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/SimplePartitioningwithWindowsAzureTableS_10E39/image_thumb.png" width="644" height="78"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
6500ms for a million rows doesn’t look too bad on the face of it. I’m sure there are
plenty of performance optimizations to be eeked out, but, they’ll pale into insignificance
compared to a round trip to Azure storage via the load balancer. What I do need to
test is that it’s not more efficient to rehash the Guid into 64 bits and then calculate
the modulo. But that’s for another night- jaded now and hoping to do 100km on the
roadie in the morning.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=cebe3e19-85e6-4d5b-bc24-afb6f66aaeb1" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,cebe3e19-85e6-4d5b-bc24-afb6f66aaeb1.aspx</comments>
      <category>.NET</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=50e9fb70-e9a2-40d7-9c15-e55b61b88dee</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,50e9fb70-e9a2-40d7-9c15-e55b61b88dee.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,50e9fb70-e9a2-40d7-9c15-e55b61b88dee.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=50e9fb70-e9a2-40d7-9c15-e55b61b88dee</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Originally post on the <a href="http://www.intergen.co.nz/Blog/">Intergen Blog</a></p>
        <p>
I’ve been spending a bunch of time of late thinking, working and talking about Cloud
Computing platforms. There’s plenty of smoke and even a little fire too.
</p>
        <p>
If you’ve been listening to the IT media for the past 12 months: Cloud Computing means
many things to many different people but I tend to list 3 key attributes of most Cloud
Platforms.
</p>
        <ol>
          <li>
Elasticity<br />
The ability to turn capacity on and off as and when required 
</li>
          <li>
Infinite Scale (or the illusion thereof)<br />
The ability to scale up/out your solution as much as you want. It’s illusory in that
Microsoft or Amazon do have a limited data centre resource, but it’s unlikely your
application will be able to come even close to saturating it. 
</li>
          <li>
Pay for what you use<br />
In the cloud you only pay for the user accounts, or processor hours, or gigabytes
of storage/traffic that you actually use. To a degree this goes along with elasticity-
though the level of granularity is key.</li>
        </ol>
        <p>
From the various vendors there are Cloud Platform offerings with differing degrees
of what I tend to think of as vertical integration.
</p>
        <ul>
          <li>
Software as a Service<br />
These are the likes of the <a href="http://www.microsoft.com/resources/Technet/en-us/MSOnline/bpos/html/99d9ede5-ce15-476c-9a3f-d42a481d287e.htm">Microsoft
BPOS</a> offerings or <a href="http://salesforce.com">Salesforce.com</a>. They’re
fully packaged services- rock up with your credit card and you can have a seat of
Salesforce or an Exchange mailbox. Your unit of scale is basically a user account-
have as many user accounts as you want for as much scale as you want. 
</li>
          <li>
Infrastructure as a Service<br />
At the other end of the spectrum are the big virtual machine clouds run by people
like Amazon.com (<a href="http://aws.amazon.com/ec2/">EC2</a>) or Rackspace (<a href="http://www.mosso.com/">Mosso</a>).
Your unit of scale here is a Virtual Machine (complete with operating system). I also
group things like Amazon <a href="https://s3.amazonaws.com/">S3</a> and <a href="http://www.microsoft.com/azure/windowsazure.mspx">Azure
Storage</a> in here. You can have as many virtual machines as you want in EC2- but,
remember that scale doesn’t come for free, you’re still going to be looking after
your operating system; keeping it patched and so forth. 
</li>
          <li>
Platform as a Service<br />
This is the greyest of the categories. We’re talking here about platforms that provide
you with some sort of abstraction atop multiple servers allowing you to scale out
(elastically). The sorts of things that fall in here are Windows Azure Compute, Google
Gears and Microsoft Live mesh. Arguably <a href="http://salesforce.com">Salesforce</a>, <a href="http://crm.dynamics.com/deployment/ondemand.aspx">CRM
Online</a> and <a href="http://www.microsoft.com/online/sharepoint-online.mspx">SharePoint
Online</a> fit in here to a degree too. The unit of scale here is a more abstract
concept- these platforms generally require you to build a scale ready application
from the outset; by taking this hit up front you get the benefits of not having to
worry about things like the underlying operating system management.</li>
        </ul>
        <p>
So if that’s our taxonomy why do I say that elasticity is the key for early adopters?
</p>
        <p>
Elasticity is the one thing that the cloud vendors can do that you can’t achieve in
any other way. Being able to efficiently support users who want to turn things off
an on all the time requires both scale and diversity. Scale, because you need to have
a large enough customer base that a user turning off a hundred or so machines represents
a mere fraction of your total capacity rather than the vast majority of it. Diversity,
because you want to have different workloads with different peak demands running on
your gear.
</p>
        <p>
The parallels here with more traditional utilities should be obvious. The reason that
the electricity system works is scale and diversity. Save for some very large industrial
customers, who tend to have different contractual terms, dropping 90% of the demand
for a given customer really doesn’t make a big difference to a utility. Their scale
is such that individual customer load changes tend to wash each other out. Yes there
are national changes in demand over the day but your power company turns capacity
on and off in large (and relatively efficient to start/stop) generating units. One
of the reasons that this model works is that the utility customers are a diverse bunch-
if their entire customer base were residential customers, all of whom cooked roast
lamb every night and all at 6pm exactly then the model wouldn’t work quite so well
would it?
</p>
        <p>
We’ve got a pretty nice data centre setup at Intergen. We can run applications very
efficiently- we have a PUE of 1.62. We can run applications at great scale- need 1000
cores on a 12 month contract we can do that. We can keep you going 24/7/365- we’ve
not had an outage since we moved to our new Terrace premises. What I can’t offer you
though is 1000 cores for 4 hours one morning because you’ve got a big online sale
happening- we simply don’t have the scale nor the customer diversity to make that
happen. I’d hazard a guess that there isn’t an internal enterprise data centre in
the world geared up for this sort of request. This is the sweet spot of the cloud
vendors, particularly the Infrastructure/Platform as a Service people.
</p>
        <p>
It basically comes down to your periodicity and differential of demand. If your application
needs 100 cores during working hours and 10 outside working hours you’re a good candidate
for the cloud but other options might suffice. If your application needs 10 cores
for 360 days of the year and 100 cores for 5 days in that period then my submission
is that cloud is your only sensible option here. Highly elastic workloads can only
be cost effectively delivered through cloud computing.
</p>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=50e9fb70-e9a2-40d7-9c15-e55b61b88dee" />
      </body>
      <title>Elasticity is the Key For Early Cloud Adopters</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,50e9fb70-e9a2-40d7-9c15-e55b61b88dee.aspx</guid>
      <link>http://www.syringe.net.nz/2009/06/01/ElasticityIsTheKeyForEarlyCloudAdopters.aspx</link>
      <pubDate>Mon, 01 Jun 2009 06:13:51 GMT</pubDate>
      <description>&lt;p&gt;
Originally post on the &lt;a href="http://www.intergen.co.nz/Blog/"&gt;Intergen Blog&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
I’ve been spending a bunch of time of late thinking, working and talking about Cloud
Computing platforms. There’s plenty of smoke and even a little fire too.
&lt;/p&gt;
&lt;p&gt;
If you’ve been listening to the IT media for the past 12 months: Cloud Computing means
many things to many different people but I tend to list 3 key attributes of most Cloud
Platforms.
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Elasticity&lt;br&gt;
The ability to turn capacity on and off as and when required 
&lt;li&gt;
Infinite Scale (or the illusion thereof)&lt;br&gt;
The ability to scale up/out your solution as much as you want. It’s illusory in that
Microsoft or Amazon do have a limited data centre resource, but it’s unlikely your
application will be able to come even close to saturating it. 
&lt;li&gt;
Pay for what you use&lt;br&gt;
In the cloud you only pay for the user accounts, or processor hours, or gigabytes
of storage/traffic that you actually use. To a degree this goes along with elasticity-
though the level of granularity is key.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
From the various vendors there are Cloud Platform offerings with differing degrees
of what I tend to think of as vertical integration.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Software as a Service&lt;br&gt;
These are the likes of the &lt;a href="http://www.microsoft.com/resources/Technet/en-us/MSOnline/bpos/html/99d9ede5-ce15-476c-9a3f-d42a481d287e.htm"&gt;Microsoft
BPOS&lt;/a&gt; offerings or &lt;a href="http://salesforce.com"&gt;Salesforce.com&lt;/a&gt;. They’re
fully packaged services- rock up with your credit card and you can have a seat of
Salesforce or an Exchange mailbox. Your unit of scale is basically a user account-
have as many user accounts as you want for as much scale as you want. 
&lt;li&gt;
Infrastructure as a Service&lt;br&gt;
At the other end of the spectrum are the big virtual machine clouds run by people
like Amazon.com (&lt;a href="http://aws.amazon.com/ec2/"&gt;EC2&lt;/a&gt;) or Rackspace (&lt;a href="http://www.mosso.com/"&gt;Mosso&lt;/a&gt;).
Your unit of scale here is a Virtual Machine (complete with operating system). I also
group things like Amazon &lt;a href="https://s3.amazonaws.com/"&gt;S3&lt;/a&gt; and &lt;a href="http://www.microsoft.com/azure/windowsazure.mspx"&gt;Azure
Storage&lt;/a&gt; in here. You can have as many virtual machines as you want in EC2- but,
remember that scale doesn’t come for free, you’re still going to be looking after
your operating system; keeping it patched and so forth. 
&lt;li&gt;
Platform as a Service&lt;br&gt;
This is the greyest of the categories. We’re talking here about platforms that provide
you with some sort of abstraction atop multiple servers allowing you to scale out
(elastically). The sorts of things that fall in here are Windows Azure Compute, Google
Gears and Microsoft Live mesh. Arguably &lt;a href="http://salesforce.com"&gt;Salesforce&lt;/a&gt;, &lt;a href="http://crm.dynamics.com/deployment/ondemand.aspx"&gt;CRM
Online&lt;/a&gt; and &lt;a href="http://www.microsoft.com/online/sharepoint-online.mspx"&gt;SharePoint
Online&lt;/a&gt; fit in here to a degree too. The unit of scale here is a more abstract
concept- these platforms generally require you to build a scale ready application
from the outset; by taking this hit up front you get the benefits of not having to
worry about things like the underlying operating system management.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So if that’s our taxonomy why do I say that elasticity is the key for early adopters?
&lt;/p&gt;
&lt;p&gt;
Elasticity is the one thing that the cloud vendors can do that you can’t achieve in
any other way. Being able to efficiently support users who want to turn things off
an on all the time requires both scale and diversity. Scale, because you need to have
a large enough customer base that a user turning off a hundred or so machines represents
a mere fraction of your total capacity rather than the vast majority of it. Diversity,
because you want to have different workloads with different peak demands running on
your gear.
&lt;/p&gt;
&lt;p&gt;
The parallels here with more traditional utilities should be obvious. The reason that
the electricity system works is scale and diversity. Save for some very large industrial
customers, who tend to have different contractual terms, dropping 90% of the demand
for a given customer really doesn’t make a big difference to a utility. Their scale
is such that individual customer load changes tend to wash each other out. Yes there
are national changes in demand over the day but your power company turns capacity
on and off in large (and relatively efficient to start/stop) generating units. One
of the reasons that this model works is that the utility customers are a diverse bunch-
if their entire customer base were residential customers, all of whom cooked roast
lamb every night and all at 6pm exactly then the model wouldn’t work quite so well
would it?
&lt;/p&gt;
&lt;p&gt;
We’ve got a pretty nice data centre setup at Intergen. We can run applications very
efficiently- we have a PUE of 1.62. We can run applications at great scale- need 1000
cores on a 12 month contract we can do that. We can keep you going 24/7/365- we’ve
not had an outage since we moved to our new Terrace premises. What I can’t offer you
though is 1000 cores for 4 hours one morning because you’ve got a big online sale
happening- we simply don’t have the scale nor the customer diversity to make that
happen. I’d hazard a guess that there isn’t an internal enterprise data centre in
the world geared up for this sort of request. This is the sweet spot of the cloud
vendors, particularly the Infrastructure/Platform as a Service people.
&lt;/p&gt;
&lt;p&gt;
It basically comes down to your periodicity and differential of demand. If your application
needs 100 cores during working hours and 10 outside working hours you’re a good candidate
for the cloud but other options might suffice. If your application needs 10 cores
for 360 days of the year and 100 cores for 5 days in that period then my submission
is that cloud is your only sensible option here. Highly elastic workloads can only
be cost effectively delivered through cloud computing.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=50e9fb70-e9a2-40d7-9c15-e55b61b88dee" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,50e9fb70-e9a2-40d7-9c15-e55b61b88dee.aspx</comments>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=908e822d-e1fa-4963-a154-8119e7995e8a</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,908e822d-e1fa-4963-a154-8119e7995e8a.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,908e822d-e1fa-4963-a154-8119e7995e8a.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=908e822d-e1fa-4963-a154-8119e7995e8a</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So a <a href="http://dunnry.com/blog/Trackback.aspx?guid=1356c5a2-08ee-4a61-9668-1c680d0b5353">post
that came through on RSS this morning</a> from Ryan Dunn got me motivated to jot down
some notes on a topic I’ve bee thinking about for a while. How best to deploy into
Windows Azure. I’ll caveat this post with the fact that at the moment the Windows
Azure deployment story is fairly simplistic- I don’t think we’ll be deploying via
the web portal come RTM. 
</p>
        <p>
So in Windows Azure you basically have two types of account, Storage and Compute.
Within a compute account you effectively have  two sets of instances that are
grouped behind two URLs. These are referred to as ‘Staging’ and ‘Production’. So you
might have two URLs that look something like this:<br /><a href="http://foobar.cloudapp.net">http://foobar.cloudapp.net</a><br /><a href="http://&lt;guid&gt;.cloudapp.net">http://&lt;guid&gt;.cloudapp.net</a></p>
        <p>
For all intents and purposes there is no difference between the instances that sit
in behind these URLs. Basically the Azure Load Balancers are just pointing requests
at the two different groups of servers. When you then push the ‘big blue button’ to
do a production release you are basically just re-configuring the rules on the load
balancer to swap the URLs around. This leads me to my point from the post title. In
Windows Azure the idea of Staging really is much more akin to the military idea of
a <a href="http://en.wikipedia.org/wiki/Staging_area">staging area</a>. It’s the place
where you marshal the troops ready to charge over the trenches.
</p>
        <p>
          <a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WhenStagingIsntReallyStagingDeploymentPa_7241/image_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WhenStagingIsntReallyStagingDeploymentPa_7241/image_thumb.png" width="644" height="251" />
          </a>
        </p>
        <p>
The ‘Staging’ deployment in Windows Azure basically gives us an area to marshall our
instances before we make them live on the production URL. It means that we can achieve
a Zero downtime deployment model because the machines are warm when we start routing
traffic to them. It also means that you might not be able to  (or probably shouldn’t) 
treat the Staging Deployment like you might traditionally treat a staging server in
a more traditional on premise deployment. In an on premise staging server you’ll usually
take your application, deploy it into staging, test it (under limited load) then redeploy
it into production- this is a very different model.
</p>
        <p>
Looking at the image above you’ll see I have 1 instance in my Staging Deployment and
2 Instances in my production deployment.  If I do a swap of these then we’ll
end up with 1 instance in production and 2 in staging- basically halving the capacity
of our production system. This would be bad.
</p>
        <p>
You should use your Staging deployment as a true staging area. You should configure
it to run the same number of instances. You should give it the same configuration
settings (where possible given code/data change vectors). In this way when you flick
the switch and route traffic at those warm servers you’ll be ready to rock at full
capacity.
</p>
        <p>
What does this mean for your Windows Azure development lifecycle? Here’s how I’d configure
my accounts for a real world scenario aiming to achieve zero downtime upgrades. I’m
going to *gloss over* the considerations of upgrading your data layer and leave that
for another blog post.
</p>
        <p>
I’d configure myself with 3 storage accounts and 2 compute accounts for my application.<br />
foobarDevStorage, foobarStageStorage, foobarProdStorage<br />
foobarStage, foobarProd
</p>
        <p>
I’d dev my project on my local box using the local computer fabric and local storage.
In some situations I’d use the cloud for my Dev storage instead.
</p>
        <p>
I’d treat my Stage accounts like a traditional Staging server. In other words I’d
configure it with a couple of instances and deploy my package up there for pre-release
testing. In reality I’d probably never use the Stage.Production Deployment on my staging
server instead contenting myself with the <a href="http://&lt;guid&gt;.cloudapp.net">http://&lt;guid&gt;.cloudapp.net</a> URL.
When I’m ready to do a production release I’d take the same package I used in Stage
and deploy it into the Prod account. I’d use a Production config file and my Prod.Staging
Deployment in the foobarProd account would be configured to run the full number of
instances- i.e. if my production site runs on 30 instances my Prod.Staging deployment
would need to be running 30 instances. I’d then to a quick^^ *smoke test* on the Prod.Staging
deployment before finally swapping the Prod.Production and Prod.Staging deployments
and basically routing traffic at my new deployment. I’d then suspend my Prod.Staging
deployment because I’ll be paying to have those instances running.
</p>
        <p>
That’s my current thinking anyway. All subject to change as Windows Azure changes
over the coming month. 
</p>
        <p>
Now that’s the easy bit! Hot swapping the compute instances like this is easy because
we are (or at least should be) building them using a <a href="http://en.wikipedia.org/wiki/Stateless_server">stateless
server</a> pattern.
</p>
        <p>
The harder part is achieving a hot swap upgrade when you need to change your data
tier. Because the data tier is stateful we need to consider consistency of the data.
This is a problem in on-premise models too and one that does not have an easy solution.
Maybe the Azure team will come up with some ‘magic’ that helps here??? I’ve got some
thoughts on how it might be done but none of them are particularly elegant or developed
yet. keep your eye out for a post on it sometime in the future.
</p>
        <p>
If this stuff appears useful to people (including the footnote below) I might bang
up a sample and a web cast. Let me know in the comments.
</p>
        <p>
P.S. Ryan: Looking forward to seeing that tool!<br />
^^ In reality I’d probably want each instance to have serviced at least one request
in order to have JIT’ed everything and spun up. This means, for a 30 instance deployment,
that I’d really have to slam the server with some load and probably have some way
(setting a flag in the Application.OnStart event?) of ensuring that I had hit 30 unique
servers. Easiest way to generate the load would probably be with a Windows Azure Worker
role :-)
</p>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=908e822d-e1fa-4963-a154-8119e7995e8a" />
      </body>
      <title>When Staging Really is for Staging&amp;ndash; Deployment Patterns for Windows Azure</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,908e822d-e1fa-4963-a154-8119e7995e8a.aspx</guid>
      <link>http://www.syringe.net.nz/2009/04/28/WhenStagingReallyIsForStagingndashDeploymentPatternsForWindowsAzure.aspx</link>
      <pubDate>Tue, 28 Apr 2009 23:37:03 GMT</pubDate>
      <description>&lt;p&gt;
So a &lt;a href="http://dunnry.com/blog/Trackback.aspx?guid=1356c5a2-08ee-4a61-9668-1c680d0b5353"&gt;post
that came through on RSS this morning&lt;/a&gt; from Ryan Dunn got me motivated to jot down
some notes on a topic I’ve bee thinking about for a while. How best to deploy into
Windows Azure. I’ll caveat this post with the fact that at the moment the Windows
Azure deployment story is fairly simplistic- I don’t think we’ll be deploying via
the web portal come RTM. 
&lt;/p&gt;
&lt;p&gt;
So in Windows Azure you basically have two types of account, Storage and Compute.
Within a compute account you effectively have&amp;nbsp; two sets of instances that are
grouped behind two URLs. These are referred to as ‘Staging’ and ‘Production’. So you
might have two URLs that look something like this:&lt;br&gt;
&lt;a href="http://foobar.cloudapp.net"&gt;http://foobar.cloudapp.net&lt;/a&gt;
&lt;br&gt;
&lt;a href="http://&amp;lt;guid&amp;gt;.cloudapp.net"&gt;http://&amp;lt;guid&amp;gt;.cloudapp.net&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
For all intents and purposes there is no difference between the instances that sit
in behind these URLs. Basically the Azure Load Balancers are just pointing requests
at the two different groups of servers. When you then push the ‘big blue button’ to
do a production release you are basically just re-configuring the rules on the load
balancer to swap the URLs around. This leads me to my point from the post title. In
Windows Azure the idea of Staging really is much more akin to the military idea of
a &lt;a href="http://en.wikipedia.org/wiki/Staging_area"&gt;staging area&lt;/a&gt;. It’s the place
where you marshal the troops ready to charge over the trenches.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WhenStagingIsntReallyStagingDeploymentPa_7241/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WhenStagingIsntReallyStagingDeploymentPa_7241/image_thumb.png" width="644" height="251"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The ‘Staging’ deployment in Windows Azure basically gives us an area to marshall our
instances before we make them live on the production URL. It means that we can achieve
a Zero downtime deployment model because the machines are warm when we start routing
traffic to them. It also means that you might not be able to&amp;nbsp; (or probably shouldn’t)&amp;nbsp;
treat the Staging Deployment like you might traditionally treat a staging server in
a more traditional on premise deployment. In an on premise staging server you’ll usually
take your application, deploy it into staging, test it (under limited load) then redeploy
it into production- this is a very different model.
&lt;/p&gt;
&lt;p&gt;
Looking at the image above you’ll see I have 1 instance in my Staging Deployment and
2 Instances in my production deployment.&amp;nbsp; If I do a swap of these then we’ll
end up with 1 instance in production and 2 in staging- basically halving the capacity
of our production system. This would be bad.
&lt;/p&gt;
&lt;p&gt;
You should use your Staging deployment as a true staging area. You should configure
it to run the same number of instances. You should give it the same configuration
settings (where possible given code/data change vectors). In this way when you flick
the switch and route traffic at those warm servers you’ll be ready to rock at full
capacity.
&lt;/p&gt;
&lt;p&gt;
What does this mean for your Windows Azure development lifecycle? Here’s how I’d configure
my accounts for a real world scenario aiming to achieve zero downtime upgrades. I’m
going to *gloss over* the considerations of upgrading your data layer and leave that
for another blog post.
&lt;/p&gt;
&lt;p&gt;
I’d configure myself with 3 storage accounts and 2 compute accounts for my application.&lt;br&gt;
foobarDevStorage, foobarStageStorage, foobarProdStorage&lt;br&gt;
foobarStage, foobarProd
&lt;/p&gt;
&lt;p&gt;
I’d dev my project on my local box using the local computer fabric and local storage.
In some situations I’d use the cloud for my Dev storage instead.
&lt;/p&gt;
&lt;p&gt;
I’d treat my Stage accounts like a traditional Staging server. In other words I’d
configure it with a couple of instances and deploy my package up there for pre-release
testing. In reality I’d probably never use the Stage.Production Deployment on my staging
server instead contenting myself with the &lt;a href="http://&amp;lt;guid&amp;gt;.cloudapp.net"&gt;http://&amp;lt;guid&amp;gt;.cloudapp.net&lt;/a&gt; URL.
When I’m ready to do a production release I’d take the same package I used in Stage
and deploy it into the Prod account. I’d use a Production config file and my Prod.Staging
Deployment in the foobarProd account would be configured to run the full number of
instances- i.e. if my production site runs on 30 instances my Prod.Staging deployment
would need to be running 30 instances. I’d then to a quick^^ *smoke test* on the Prod.Staging
deployment before finally swapping the Prod.Production and Prod.Staging deployments
and basically routing traffic at my new deployment. I’d then suspend my Prod.Staging
deployment because I’ll be paying to have those instances running.
&lt;/p&gt;
&lt;p&gt;
That’s my current thinking anyway. All subject to change as Windows Azure changes
over the coming month. 
&lt;/p&gt;
&lt;p&gt;
Now that’s the easy bit! Hot swapping the compute instances like this is easy because
we are (or at least should be) building them using a &lt;a href="http://en.wikipedia.org/wiki/Stateless_server"&gt;stateless
server&lt;/a&gt; pattern.
&lt;/p&gt;
&lt;p&gt;
The harder part is achieving a hot swap upgrade when you need to change your data
tier. Because the data tier is stateful we need to consider consistency of the data.
This is a problem in on-premise models too and one that does not have an easy solution.
Maybe the Azure team will come up with some ‘magic’ that helps here??? I’ve got some
thoughts on how it might be done but none of them are particularly elegant or developed
yet. keep your eye out for a post on it sometime in the future.
&lt;/p&gt;
&lt;p&gt;
If this stuff appears useful to people (including the footnote below) I might bang
up a sample and a web cast. Let me know in the comments.
&lt;/p&gt;
&lt;p&gt;
P.S. Ryan: Looking forward to seeing that tool!&lt;br&gt;
^^ In reality I’d probably want each instance to have serviced at least one request
in order to have JIT’ed everything and spun up. This means, for a 30 instance deployment,
that I’d really have to slam the server with some load and probably have some way
(setting a flag in the Application.OnStart event?) of ensuring that I had hit 30 unique
servers. Easiest way to generate the load would probably be with a Windows Azure Worker
role :-)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=908e822d-e1fa-4963-a154-8119e7995e8a" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,908e822d-e1fa-4963-a154-8119e7995e8a.aspx</comments>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=c39b3c56-f0df-4787-ad8b-403c0bde5c52</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,c39b3c56-f0df-4787-ad8b-403c0bde5c52.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,c39b3c56-f0df-4787-ad8b-403c0bde5c52.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=c39b3c56-f0df-4787-ad8b-403c0bde5c52</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So at almost all the Windows Azure events I’ve run around the world recently we’ve
always gotten into a discussion about hooking Windows Azure applications up to on-premise
systems. Indeed in a recent demo I wrote for a CRM + Windows Azure session I showed
how to wire up Windows Azure applications to your on-premise CRM server. Often you’ll
be using the cloud for what I call forward processing.
</p>
        <p>
          <a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/BufferingRequeststoOnPremiseSystemsviaAz_145F1/image_4.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/BufferingRequeststoOnPremiseSystemsviaAz_145F1/image_thumb_1.png" width="244" height="184" />
          </a>
        </p>
        <p>
You should use caution here. Your Windows Azure application has the ability to scale
almost infinitely. Your on-premise application does not. If you wire your Windows
Azure web role directly to your on-premise system, say by making a direct Web Service
call, and then your site gets slash dotted you’ve basically built your self a massive
cloud hosted Distributed Denial of Service engine!
</p>
        <p>
What you need to ensure that you do is buffer all of your requests from the cloud
to your on-premise system via a queue of some sort. You may choose to use a Windows
Azure Storage Queue for this or you may choose to use the new Queue and Router capabilities
in the .NET Service bus. This means that if your Azure Web Role suddenly gets a huge
amount of traffic the requests to your back end system will be queued and processed
only as fast as the on premise application is able to handle them- the last thing
you want is for a simple client self service application in the cloud to bring down
a core business application on premise.
</p>
        <p>
Obviously doing this is going to require that the call to the backend system is capable
of being made asynchronously. If it’s a one way operation then it’s easy, if it’s
a two way operation then getting data back to your user is generally going to be a
case of having your worker role right back to to an Azure Table or indeed having a
notification queue for each user that your worker role can enqueue the result onto.
</p>
        <p>
          <a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/BufferingRequeststoOnPremiseSystemsviaAz_145F1/image_6.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/BufferingRequeststoOnPremiseSystemsviaAz_145F1/image_thumb_2.png" width="244" height="184" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
In summary: <strong>If you wire your Windows Azure application directly to your on-premise
application you are dicing with danger.</strong></p>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=c39b3c56-f0df-4787-ad8b-403c0bde5c52" />
      </body>
      <title>Buffering Requests to On-Premise Systems via Windows Azure Worker Roles</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,c39b3c56-f0df-4787-ad8b-403c0bde5c52.aspx</guid>
      <link>http://www.syringe.net.nz/2009/04/08/BufferingRequestsToOnPremiseSystemsViaWindowsAzureWorkerRoles.aspx</link>
      <pubDate>Wed, 08 Apr 2009 00:02:09 GMT</pubDate>
      <description>&lt;p&gt;
So at almost all the Windows Azure events I’ve run around the world recently we’ve
always gotten into a discussion about hooking Windows Azure applications up to on-premise
systems. Indeed in a recent demo I wrote for a CRM + Windows Azure session I showed
how to wire up Windows Azure applications to your on-premise CRM server. Often you’ll
be using the cloud for what I call forward processing.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/BufferingRequeststoOnPremiseSystemsviaAz_145F1/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/BufferingRequeststoOnPremiseSystemsviaAz_145F1/image_thumb_1.png" width="244" height="184"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
You should use caution here. Your Windows Azure application has the ability to scale
almost infinitely. Your on-premise application does not. If you wire your Windows
Azure web role directly to your on-premise system, say by making a direct Web Service
call, and then your site gets slash dotted you’ve basically built your self a massive
cloud hosted Distributed Denial of Service engine!
&lt;/p&gt;
&lt;p&gt;
What you need to ensure that you do is buffer all of your requests from the cloud
to your on-premise system via a queue of some sort. You may choose to use a Windows
Azure Storage Queue for this or you may choose to use the new Queue and Router capabilities
in the .NET Service bus. This means that if your Azure Web Role suddenly gets a huge
amount of traffic the requests to your back end system will be queued and processed
only as fast as the on premise application is able to handle them- the last thing
you want is for a simple client self service application in the cloud to bring down
a core business application on premise.
&lt;/p&gt;
&lt;p&gt;
Obviously doing this is going to require that the call to the backend system is capable
of being made asynchronously. If it’s a one way operation then it’s easy, if it’s
a two way operation then getting data back to your user is generally going to be a
case of having your worker role right back to to an Azure Table or indeed having a
notification queue for each user that your worker role can enqueue the result onto.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/BufferingRequeststoOnPremiseSystemsviaAz_145F1/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/BufferingRequeststoOnPremiseSystemsviaAz_145F1/image_thumb_2.png" width="244" height="184"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
In summary: &lt;strong&gt;If you wire your Windows Azure application directly to your on-premise
application you are dicing with danger.&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=c39b3c56-f0df-4787-ad8b-403c0bde5c52" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,c39b3c56-f0df-4787-ad8b-403c0bde5c52.aspx</comments>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=f86df890-d895-45d7-80f7-873b3b90af9c</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,f86df890-d895-45d7-80f7-873b3b90af9c.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,f86df890-d895-45d7-80f7-873b3b90af9c.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=f86df890-d895-45d7-80f7-873b3b90af9c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So I’ve been head down and arse up this week; I’ve barely had enough time to get on
top of my email inbox let alone my unread blog entries. Finally made some progress
this evening at YVR and now on NZ83 en route YVR-AKL.
</p>
        <p>
So while I was underwater a stink kicked up around a thing called the ‘Cloud Manifesto’.
Meant to be being released Monday, it was leaked <a href="http://www.scribd.com/doc/13710927/Open-Cloud-Manifesto-v109">here</a> (all
6 pages of it) a few days early. From my reading between the lines of the <a href="http://blogs.msdn.com/stevemar/archive/2009/03/26/moving-toward-an-open-process-on-cloud-computing-interoperability.aspx">thinly
veiled blog post</a> by <a href="http://blogs.msdn.com/stevemar/">Steve Martin</a> from
Microsoft it looks like the document has been written, by an as yet undisclosed group,
and is being farmed around a bunch of companies for them to ‘sign up’. There is <a href="http://groups.google.com/group/opencloud/browse_thread/thread/43d2e3346a2d2ac2">a
posting</a> on the Cloud Computing Interop Forum (on Google Groups) by <a href="http://www.elasticvapour.com">Reuven
Cohen</a> (who I’ve never heard of) who is the ‘Creator of the <a href="http://www.enomalism.com">Enomalism
Elastic Computing Platform</a>’ (which I have to admit I’ve never heard of either).
Reuven is also involved in <a href="http://www.cloudcamp.com">Cloud Camp</a> (which
I have heard of). I tell you all this and encourage you to go and have a sniff around
some of the links above and some of the press coverage so far so that you have some
context before continuing.
</p>
        <p>
          <a href="http://www.techcrunchit.com/2009/03/26/out-of-order-20/">http://www.techcrunchit.com/2009/03/26/out-of-order-20/</a> Steve
Gillmor from TechCrunch 
</p>
        <p>
          <a href="http://blogs.zdnet.com/BTL/?p=15341">http://blogs.zdnet.com/BTL/?p=15341</a> –
Amazon expressing their antipathy towards the whole thing 
</p>
        <p>
          <a href="http://www.eweek.com/c/a/Cloud-Computing/Microsoft-Calls-for-Open-Cloud-Standards-538212/">http://www.eweek.com/c/a/Cloud-Computing/Microsoft-Calls-for-Open-Cloud-Standards-538212/</a> Darryl
Taft 
</p>
        <p>
I provide the above to give some background. Now for some of my thoughts. 
</p>
        <h3>The Emperors New Clothes* 
</h3>
        <p>
So reading the <a href="http://www.scribd.com/doc/13710927/Open-Cloud-Manifesto-v109">document
itself</a> most of it feels so obvious it barely warrants saying- it’s PR puffery
really. I’m going to cherry pick a few statements from the document to discuss.
</p>
        <blockquote>
          <p>
            <em>“We believe that these core principles are rooted in the belief that cloud computing
should be as open as all other IT technologies.  “</em>
          </p>
        </blockquote>
        <p>
I hate to break it, but, other IT technologies aren’t that open. As I’ll set out below
I’m a big believer that in most cases openness and interoperability are emergent aspects
of technology and not something you should really set out to engineer. 
</p>
        <blockquote>
          <p>
            <em>“To reassure their customers, cloud providers must offer a high degree of transparency
into their operations.”</em>
          </p>
        </blockquote>
        <p>
So I just don’t know how realistic this is. Certainly Microsoft and even more so Google
are highly protective of their data center operation details. A measure of security
through obscurity is important here still I think. I would also disagree with the
authors that moving data into a shared infrastructure necessarily exposes one to more
potential for unauthorized exposure. 
</p>
        <blockquote>
          <p>
            <em>“Cloud providers must use and adopt existing standards wherever appropriate. 
The IT industry has invested heavily in existing standards and standards organizations;
there is no need to duplicate or reinvent them. “</em>
          </p>
        </blockquote>
        <p>
So this is bang on target and to be honest the biggest thing that the Cloud Providers
can do to ensure *useful* openness is to ensure they use existing standards wherever
possible. But do we need this sort of industry bickering to state the bleeding obvious?
</p>
        <blockquote>
          <p>
            <em>“Any community effort around the open cloud should be driven by customer needs,
not merely the technical needs of cloud providers, and should be tested or verified
against real customer requirements.  “</em>
          </p>
        </blockquote>
        <p>
Would be interesting to know what level of customer involvement there was in the Manifesto
document? Were folks like SmugMug (who are my favourite example of a great Cloud operated
business) or enterprise customers (I know there is at least one airline using EC2
for some of their stuff) involved? It all feels like a bit much of a simplistic puff
piece at the moment- though according to the CCIP group post ‘major players’ have
been involved.
</p>
        <blockquote>
          <p>
            <em>“Cloud computing standards organizations, advocacy groups, and communities should
work together and stay coordinated, making sure that efforts do not conflict or overlap.
“</em>
          </p>
        </blockquote>
        <p>
Haven’t really gotten off to the best start in this regard to be honest.
</p>
        <blockquote>
          <p>
            <em>This document is meant to begin the conversation, not define it. </em>
          </p>
        </blockquote>
        <p>
I’m afraid I agree with a number of the commentators (both vested interests and ‘independent’
voices) at the top of this post. It was a pretty shitty way to ‘begin the conversation’.
</p>
        <h3>Who’s Actually Behind It All
</h3>
        <p>
So a big question in my mind is who is actually driving this thing?
</p>
        <p>
To be honest if it were just a group of bit players stroking and stoking their egos
then I don’t actually think it would have generated the level of interest and posturing
(from MS and Amazon to date) that we’ve seen.
</p>
        <p>
Gillmor looks at the obvious candidates, IBM and Google (Amazon having declared they’re
outside the tent). It seems inconceivable that Microsoft and Amazon would not be invited
to be involved in this at the earliest opportunity. Even if it were the ‘Anything
But Microsoft Brigade’ you’d still expect Amazon to be seated at the table- hell their
model of a high scale application operator selling their dog food to others embodies
for me much of what the cloud is about.
</p>
        <p>
I have no idea how Cohen can, with a straight face, <a href="http://groups.google.com/group/opencloud/browse_thread/thread/43d2e3346a2d2ac2">say</a>:
</p>
        <blockquote>
          <p>
            <em>“Given the nature of this document we have attempted to be<br />
as inclusive as possible inviting most of the major names in technology to<br />
participate in the initial draft.”</em>
          </p>
        </blockquote>
        <p>
Given that this Manifesto appears to be largely driven by East Coast companies I can’t
help but think that IBM have got their finger in this somehow. It’ll be somewhat ironic
if this the case, as a key proponent of the standardization of Office Open XML (now
ISO29500) I’ve had first hand knowledge of IBM’s ‘do as we say’; might this be their
‘not as we do’ moment?
</p>
        <p>
I guess all will be revealed come Monday.
</p>
        <h3>On The Substantive Matter- Or Why I Only Kind Of Give a Crap About Interop in
the Cloud
</h3>
        <p>
Standards stifle innovation. There, I said it. <a href="http://www.osrin.net">Friends</a> of
mine will probably bitch at me for being so blunt, but, I genuinely believe that standardizing
technologies is, in most cases, best left until they have reached a reasonable level
of maturity.
</p>
        <p>
Once something is standardized pace becomes glacially slow and the ability for innovators
to recover a return on intellectual property becomes nigh on impossible. There are,
of course, some business whom this model is <em>de rigueur</em>- I guess we’ve got
to wait until Moday to find out more.
</p>
        <p>
For the most part we’ll be building our applications using the same protocols and
technologies that we’ve always done. At least for the stuff that spins my wheels,
high scale applications, there’s not a lot that’s new in the cloud; it’s really just
an interesting new way to deploy and dynamically scale the same architectures I’ve
been working on since I was building SaaS apps in the Dot Bomb days.
</p>
        <p>
The new stuff really comes down to the cloud fabric^ and the management thereof and
frankly I think it’s too early to think about standards. Amazon scales at the unit
of a virtual machine, Microsoft does the same but with sugar on the top to hide the
fact that it’s really Windows at all. Let’s see what sort of models shake out best
for customers before we try and anoint one king. 
</p>
        <h3>I Guess We Wait Until Monday
</h3>
        <p>
As someone looking to ship a pretty significant Cloud delivered app later this year
what I really want is;
</p>
        <ul>
          <li>
For my Cloud provider of choice to ship their bits! 
</li>
          <li>
For my travel schedule to slow down a bit- my Tripit stats are truly horrendous and
I’m flying to Bangalore Monday morning. 
</li>
          <li>
For the Manifesto authors, whoever and wherever they might be to read a little Hayek.</li>
        </ul>
        <p>
Let’s see was happens Monday.
</p>
        <p>
*So worth nothing this wasn’t my turn of phrase. <a href="http://groups.google.com/group/cloudforum/msg/8b36cbcf5627353f">Used
here first</a> but I liked it so much I pinched it!<br />
^Call it what you will, this is the term I use when talking about Windows Azure at
least.
</p>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=f86df890-d895-45d7-80f7-873b3b90af9c" />
      </body>
      <title>The &amp;ldquo;Open&amp;rdquo; Cloud Manifesto</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,f86df890-d895-45d7-80f7-873b3b90af9c.aspx</guid>
      <link>http://www.syringe.net.nz/2009/03/28/TheLdquoOpenrdquoCloudManifesto.aspx</link>
      <pubDate>Sat, 28 Mar 2009 19:53:37 GMT</pubDate>
      <description>&lt;p&gt;
So I’ve been head down and arse up this week; I’ve barely had enough time to get on
top of my email inbox let alone my unread blog entries. Finally made some progress
this evening at YVR and now on NZ83 en route YVR-AKL.
&lt;/p&gt;
&lt;p&gt;
So while I was underwater a stink kicked up around a thing called the ‘Cloud Manifesto’.
Meant to be being released Monday, it was leaked &lt;a href="http://www.scribd.com/doc/13710927/Open-Cloud-Manifesto-v109"&gt;here&lt;/a&gt; (all
6 pages of it) a few days early. From my reading between the lines of the &lt;a href="http://blogs.msdn.com/stevemar/archive/2009/03/26/moving-toward-an-open-process-on-cloud-computing-interoperability.aspx"&gt;thinly
veiled blog post&lt;/a&gt; by &lt;a href="http://blogs.msdn.com/stevemar/"&gt;Steve Martin&lt;/a&gt; from
Microsoft it looks like the document has been written, by an as yet undisclosed group,
and is being farmed around a bunch of companies for them to ‘sign up’. There is &lt;a href="http://groups.google.com/group/opencloud/browse_thread/thread/43d2e3346a2d2ac2"&gt;a
posting&lt;/a&gt; on the Cloud Computing Interop Forum (on Google Groups) by &lt;a href="http://www.elasticvapour.com"&gt;Reuven
Cohen&lt;/a&gt; (who I’ve never heard of) who is the ‘Creator of the &lt;a href="http://www.enomalism.com"&gt;Enomalism
Elastic Computing Platform&lt;/a&gt;’ (which I have to admit I’ve never heard of either).
Reuven is also involved in &lt;a href="http://www.cloudcamp.com"&gt;Cloud Camp&lt;/a&gt; (which
I have heard of). I tell you all this and encourage you to go and have a sniff around
some of the links above and some of the press coverage so far so that you have some
context before continuing.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.techcrunchit.com/2009/03/26/out-of-order-20/"&gt;http://www.techcrunchit.com/2009/03/26/out-of-order-20/&lt;/a&gt; Steve
Gillmor from TechCrunch 
&lt;p&gt;
&lt;a href="http://blogs.zdnet.com/BTL/?p=15341"&gt;http://blogs.zdnet.com/BTL/?p=15341&lt;/a&gt; –
Amazon expressing their antipathy towards the whole thing 
&lt;p&gt;
&lt;a href="http://www.eweek.com/c/a/Cloud-Computing/Microsoft-Calls-for-Open-Cloud-Standards-538212/"&gt;http://www.eweek.com/c/a/Cloud-Computing/Microsoft-Calls-for-Open-Cloud-Standards-538212/&lt;/a&gt; Darryl
Taft 
&lt;p&gt;
I provide the above to give some background. Now for some of my thoughts. 
&lt;h3&gt;The Emperors New Clothes* 
&lt;/h3&gt;
&lt;p&gt;
So reading the &lt;a href="http://www.scribd.com/doc/13710927/Open-Cloud-Manifesto-v109"&gt;document
itself&lt;/a&gt; most of it feels so obvious it barely warrants saying- it’s PR puffery
really. I’m going to cherry pick a few statements from the document to discuss.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;“We believe that these core principles are rooted in the belief that cloud computing
should be as open as all other IT technologies.&amp;nbsp; “&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I hate to break it, but, other IT technologies aren’t that open. As I’ll set out below
I’m a big believer that in most cases openness and interoperability are emergent aspects
of technology and not something you should really set out to engineer. 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;“To reassure their customers, cloud providers must offer a high degree of transparency
into their operations.”&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
So I just don’t know how realistic this is. Certainly Microsoft and even more so Google
are highly protective of their data center operation details. A measure of security
through obscurity is important here still I think. I would also disagree with the
authors that moving data into a shared infrastructure necessarily exposes one to more
potential for unauthorized exposure. 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;“Cloud providers must use and adopt existing standards wherever appropriate.&amp;nbsp;
The IT industry has invested heavily in existing standards and standards organizations;
there is no need to duplicate or reinvent them. “&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
So this is bang on target and to be honest the biggest thing that the Cloud Providers
can do to ensure *useful* openness is to ensure they use existing standards wherever
possible. But do we need this sort of industry bickering to state the bleeding obvious?
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;“Any community effort around the open cloud should be driven by customer needs,
not merely the technical needs of cloud providers, and should be tested or verified
against real customer requirements.&amp;nbsp; “&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Would be interesting to know what level of customer involvement there was in the Manifesto
document? Were folks like SmugMug (who are my favourite example of a great Cloud operated
business) or enterprise customers (I know there is at least one airline using EC2
for some of their stuff) involved? It all feels like a bit much of a simplistic puff
piece at the moment- though according to the CCIP group post ‘major players’ have
been involved.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;“Cloud computing standards organizations, advocacy groups, and communities should
work together and stay coordinated, making sure that efforts do not conflict or overlap.
“&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Haven’t really gotten off to the best start in this regard to be honest.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;This document is meant to begin the conversation, not define it. &lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I’m afraid I agree with a number of the commentators (both vested interests and ‘independent’
voices) at the top of this post. It was a pretty shitty way to ‘begin the conversation’.
&lt;/p&gt;
&lt;h3&gt;Who’s Actually Behind It All
&lt;/h3&gt;
&lt;p&gt;
So a big question in my mind is who is actually driving this thing?
&lt;/p&gt;
&lt;p&gt;
To be honest if it were just a group of bit players stroking and stoking their egos
then I don’t actually think it would have generated the level of interest and posturing
(from MS and Amazon to date) that we’ve seen.
&lt;/p&gt;
&lt;p&gt;
Gillmor looks at the obvious candidates, IBM and Google (Amazon having declared they’re
outside the tent). It seems inconceivable that Microsoft and Amazon would not be invited
to be involved in this at the earliest opportunity. Even if it were the ‘Anything
But Microsoft Brigade’ you’d still expect Amazon to be seated at the table- hell their
model of a high scale application operator selling their dog food to others embodies
for me much of what the cloud is about.
&lt;/p&gt;
&lt;p&gt;
I have no idea how Cohen can, with a straight face, &lt;a href="http://groups.google.com/group/opencloud/browse_thread/thread/43d2e3346a2d2ac2"&gt;say&lt;/a&gt;:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;“Given the nature of this document we have attempted to be&lt;br&gt;
as inclusive as possible inviting most of the major names in technology to&lt;br&gt;
participate in the initial draft.”&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Given that this Manifesto appears to be largely driven by East Coast companies I can’t
help but think that IBM have got their finger in this somehow. It’ll be somewhat ironic
if this the case, as a key proponent of the standardization of Office Open XML (now
ISO29500) I’ve had first hand knowledge of IBM’s ‘do as we say’; might this be their
‘not as we do’ moment?
&lt;/p&gt;
&lt;p&gt;
I guess all will be revealed come Monday.
&lt;/p&gt;
&lt;h3&gt;On The Substantive Matter- Or Why I Only Kind Of Give a Crap About Interop in
the Cloud
&lt;/h3&gt;
&lt;p&gt;
Standards stifle innovation. There, I said it. &lt;a href="http://www.osrin.net"&gt;Friends&lt;/a&gt; of
mine will probably bitch at me for being so blunt, but, I genuinely believe that standardizing
technologies is, in most cases, best left until they have reached a reasonable level
of maturity.
&lt;/p&gt;
&lt;p&gt;
Once something is standardized pace becomes glacially slow and the ability for innovators
to recover a return on intellectual property becomes nigh on impossible. There are,
of course, some business whom this model is &lt;em&gt;de rigueur&lt;/em&gt;- I guess we’ve got
to wait until Moday to find out more.
&lt;/p&gt;
&lt;p&gt;
For the most part we’ll be building our applications using the same protocols and
technologies that we’ve always done. At least for the stuff that spins my wheels,
high scale applications, there’s not a lot that’s new in the cloud; it’s really just
an interesting new way to deploy and dynamically scale the same architectures I’ve
been working on since I was building SaaS apps in the Dot Bomb days.
&lt;/p&gt;
&lt;p&gt;
The new stuff really comes down to the cloud fabric^ and the management thereof and
frankly I think it’s too early to think about standards. Amazon scales at the unit
of a virtual machine, Microsoft does the same but with sugar on the top to hide the
fact that it’s really Windows at all. Let’s see what sort of models shake out best
for customers before we try and anoint one king. 
&lt;/p&gt;
&lt;h3&gt;I Guess We Wait Until Monday
&lt;/h3&gt;
&lt;p&gt;
As someone looking to ship a pretty significant Cloud delivered app later this year
what I really want is;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
For my Cloud provider of choice to ship their bits! 
&lt;li&gt;
For my travel schedule to slow down a bit- my Tripit stats are truly horrendous and
I’m flying to Bangalore Monday morning. 
&lt;li&gt;
For the Manifesto authors, whoever and wherever they might be to read a little Hayek.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Let’s see was happens Monday.
&lt;/p&gt;
&lt;p&gt;
*So worth nothing this wasn’t my turn of phrase. &lt;a href="http://groups.google.com/group/cloudforum/msg/8b36cbcf5627353f"&gt;Used
here first&lt;/a&gt; but I liked it so much I pinched it!&lt;br&gt;
^Call it what you will, this is the term I use when talking about Windows Azure at
least.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=f86df890-d895-45d7-80f7-873b3b90af9c" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,f86df890-d895-45d7-80f7-873b3b90af9c.aspx</comments>
      <category>PoliTechLaw</category>
      <category>Rants</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=0805ce49-322c-45bd-acba-06440e351639</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,0805ce49-322c-45bd-acba-06440e351639.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,0805ce49-322c-45bd-acba-06440e351639.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=0805ce49-322c-45bd-acba-06440e351639</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So I’ve been doing a bunch of presenting around the Cloud Recently and also starting
to discuss it as a platform with a number of our customers.
</p>
        <p>
I thought I’d put together a blog post on some of the key reading I’m getting people
to do to come up to speed.
</p>
        <p>
          <a title="http://berkeleyclouds.blogspot.com/2009/02/above-clouds-released.html" href="http://berkeleyclouds.blogspot.com/2009/02/above-clouds-released.html">http://berkeleyclouds.blogspot.com/2009/02/above-clouds-released.html</a>
          <br />
Is an academic white paper out of Berkeley. <strong>Well worth a read and I’d probably
start your journey here.</strong></p>
        <p>
It’s also important, no matter which platform you choose, that you have a good understanding
of how to build horizontally scalable systems and that you understand why and how
to partition your stateful data tier.<br />
I quite like the recent O’Reilly book Beautiful Architecture  for an overview
of this with worked examples
</p>
        <p>
          <a href="http://www.amazon.com/gp/product/059651798X?ie=UTF8&amp;tag=nova-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=059651798X">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="311e-9x8UQL__SL160_[2]" border="0" alt="311e-9x8UQL__SL160_[2]" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/RequiredReadingifyoureWorkingintheCloudS_BBA1/311e-9x8UQL__SL160_%5B2%5D_0dc8e5af-73f0-4e06-82f5-eba7632a0d28.jpg" width="126" height="164" />
          </a>
          <img style="border-bottom-style: none !important; border-right-style: none !important; margin: 0px; border-top-style: none !important; border-left-style: none !important" border="0" alt="" src="http://www.assoc-amazon.com/e/ir?t=nova-20&amp;l=as2&amp;o=1&amp;a=059651798X" width="1" height="1" />
        </p>
        <p>
Other stuff that’s worth reading include:
</p>
        <p>
The Primer on Scale from Wikipedia is useful<br /><a title="http://en.wikipedia.org/wiki/Scale_out#Scale_vertically_vs._horizontally" href="http://en.wikipedia.org/wiki/Scale_out#Scale_vertically_vs._horizontally">http://en.wikipedia.org/wiki/Scale_out#Scale_vertically_vs._horizontally</a></p>
        <p>
Choosing Partition Keys<br /><a title="Some Thoughts on Choosing Partition Keys in Windows Azure's Table Storage" href="http://www.25hoursaday.com/weblog/2009/01/07/SomeThoughtsOnChoosingPartitionKeysInWindowsAzuresTableStorage.aspx">Some
Thoughts on Choosing Partition Keys in Windows Azure's Table Storage</a></p>
        <p>
And Also from Dare: On ‘Trusting’ The Cloud<br /><a title="Asking should we trust the cloud is like asking should we trust horseless carriages" href="http://www.25hoursaday.com/weblog/2009/01/27/AskingShouldWeTrustTheCloudIsLikeAskingShouldWeTrustHorselessCarriages.aspx">Asking
should we trust the cloud is like asking should we trust horseless carriages</a></p>
        <p>
If STS’s, IP’s RP’s and other identity acronyms are Dutch to you then <a href="http://blogs.msdn.com/vbertocci/">Vittorio’s</a> article
on Claims is well worth a read<br /><a title="Claims and Identity, On-Premise and Cloud Solutions" href="http://msdn.microsoft.com/en-us/cc836390.aspx">Claims
and Identity, On-Premise and Cloud Solutions</a></p>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=0805ce49-322c-45bd-acba-06440e351639" />
      </body>
      <title>Required Reading if you&amp;rsquo;re Working in the Cloud Space</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,0805ce49-322c-45bd-acba-06440e351639.aspx</guid>
      <link>http://www.syringe.net.nz/2009/02/19/RequiredReadingIfYoursquoreWorkingInTheCloudSpace.aspx</link>
      <pubDate>Thu, 19 Feb 2009 00:36:12 GMT</pubDate>
      <description>&lt;p&gt;
So I’ve been doing a bunch of presenting around the Cloud Recently and also starting
to discuss it as a platform with a number of our customers.
&lt;/p&gt;
&lt;p&gt;
I thought I’d put together a blog post on some of the key reading I’m getting people
to do to come up to speed.
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://berkeleyclouds.blogspot.com/2009/02/above-clouds-released.html" href="http://berkeleyclouds.blogspot.com/2009/02/above-clouds-released.html"&gt;http://berkeleyclouds.blogspot.com/2009/02/above-clouds-released.html&lt;/a&gt;
&lt;br&gt;
Is an academic white paper out of Berkeley. &lt;strong&gt;Well worth a read and I’d probably
start your journey here.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
It’s also important, no matter which platform you choose, that you have a good understanding
of how to build horizontally scalable systems and that you understand why and how
to partition your stateful data tier.&lt;br&gt;
I quite like the recent O’Reilly book Beautiful Architecture&amp;nbsp; for an overview
of this with worked examples
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/gp/product/059651798X?ie=UTF8&amp;amp;tag=nova-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=059651798X"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="311e-9x8UQL__SL160_[2]" border="0" alt="311e-9x8UQL__SL160_[2]" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/RequiredReadingifyoureWorkingintheCloudS_BBA1/311e-9x8UQL__SL160_%5B2%5D_0dc8e5af-73f0-4e06-82f5-eba7632a0d28.jpg" width="126" height="164"&gt;&lt;/a&gt;&lt;img style="border-bottom-style: none !important; border-right-style: none !important; margin: 0px; border-top-style: none !important; border-left-style: none !important" border="0" alt="" src="http://www.assoc-amazon.com/e/ir?t=nova-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=059651798X" width="1" height="1"&gt;
&lt;/p&gt;
&lt;p&gt;
Other stuff that’s worth reading include:
&lt;/p&gt;
&lt;p&gt;
The Primer on Scale from Wikipedia is useful&lt;br&gt;
&lt;a title="http://en.wikipedia.org/wiki/Scale_out#Scale_vertically_vs._horizontally" href="http://en.wikipedia.org/wiki/Scale_out#Scale_vertically_vs._horizontally"&gt;http://en.wikipedia.org/wiki/Scale_out#Scale_vertically_vs._horizontally&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Choosing Partition Keys&lt;br&gt;
&lt;a title="Some Thoughts on Choosing Partition Keys in Windows Azure's Table Storage" href="http://www.25hoursaday.com/weblog/2009/01/07/SomeThoughtsOnChoosingPartitionKeysInWindowsAzuresTableStorage.aspx"&gt;Some
Thoughts on Choosing Partition Keys in Windows Azure's Table Storage&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
And Also from Dare: On ‘Trusting’ The Cloud&lt;br&gt;
&lt;a title="Asking should we trust the cloud is like asking should we trust horseless carriages" href="http://www.25hoursaday.com/weblog/2009/01/27/AskingShouldWeTrustTheCloudIsLikeAskingShouldWeTrustHorselessCarriages.aspx"&gt;Asking
should we trust the cloud is like asking should we trust horseless carriages&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
If STS’s, IP’s RP’s and other identity acronyms are Dutch to you then &lt;a href="http://blogs.msdn.com/vbertocci/"&gt;Vittorio’s&lt;/a&gt; article
on Claims is well worth a read&lt;br&gt;
&lt;a title="Claims and Identity, On-Premise and Cloud Solutions" href="http://msdn.microsoft.com/en-us/cc836390.aspx"&gt;Claims
and Identity, On-Premise and Cloud Solutions&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=0805ce49-322c-45bd-acba-06440e351639" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,0805ce49-322c-45bd-acba-06440e351639.aspx</comments>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=d11bb473-42d0-4644-9900-aedb32d6d044</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,d11bb473-42d0-4644-9900-aedb32d6d044.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,d11bb473-42d0-4644-9900-aedb32d6d044.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=d11bb473-42d0-4644-9900-aedb32d6d044</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So you may find yourself having issues calling into the development fabric web roles.
The error message will be something like ‘te server actively refused the connection’.
There are some issues with IPv6. The development fabric will only listen on open host
and I think what was happening is that the requests appear to be coming from the IPv6
address rather than the IPv4 one3.
</p>
        <p>
Anyway, I disabled IPv6 and commented the IPv6 localhost entry from the *.hosts file.
All worked after this.
</p>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=d11bb473-42d0-4644-9900-aedb32d6d044" />
      </body>
      <title>Windows Azure Development Fabric and IP v6 Issues</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,d11bb473-42d0-4644-9900-aedb32d6d044.aspx</guid>
      <link>http://www.syringe.net.nz/2009/01/25/WindowsAzureDevelopmentFabricAndIPV6Issues.aspx</link>
      <pubDate>Sun, 25 Jan 2009 01:01:35 GMT</pubDate>
      <description>&lt;p&gt;
So you may find yourself having issues calling into the development fabric web roles.
The error message will be something like ‘te server actively refused the connection’.
There are some issues with IPv6. The development fabric will only listen on open host
and I think what was happening is that the requests appear to be coming from the IPv6
address rather than the IPv4 one3.
&lt;/p&gt;
&lt;p&gt;
Anyway, I disabled IPv6 and commented the IPv6 localhost entry from the *.hosts file.
All worked after this.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=d11bb473-42d0-4644-9900-aedb32d6d044" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,d11bb473-42d0-4644-9900-aedb32d6d044.aspx</comments>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=adbcc15f-1dbe-4757-9748-db7b6177534a</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,adbcc15f-1dbe-4757-9748-db7b6177534a.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,adbcc15f-1dbe-4757-9748-db7b6177534a.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=adbcc15f-1dbe-4757-9748-db7b6177534a</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So one of the cool things you can do in Windows Azure storage is just enter the URL
of a public Blob in your browser and retrieve it via an HTTP GET. This makes sense
as in REST, a GET and a URI will return the data at the URI. In the case of an Azure
Blob this means the bytes stored returned with the appropriate content type in the
header. 
</p>
        <p>
          <a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WhyYouCanJustBrowseToTablesinAzureStorag_DA0B/image_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WhyYouCanJustBrowseToTablesinAzureStorag_DA0B/image_thumb.png" width="644" height="206" />
          </a>
        </p>
        <p>
You can also do thinks like retrieve a list of the Blobs in a given container like
this:
</p>
        <p>
          <a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WhyYouCanJustBrowseToTablesinAzureStorag_DA0B/image_4.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WhyYouCanJustBrowseToTablesinAzureStorag_DA0B/image_thumb_1.png" width="605" height="484" />
          </a>
        </p>
        <p>
It would be nice to be able to do the same with Azure Table storage. A quick <a href="http://msdn.microsoft.com/en-us/library/dd179360.aspx">glance
at the SDK</a> leads one to think it’s as simple as
</p>
        <pre>http://myaccount.table.core.windows.net/Tables</pre>
        <p>
        </p>
        <p>
But this will fail on both the Cloud Storage and Local Storage. This is because
</p>
        <blockquote>
          <p>
            <em>“The request must include the Authorization header and the Date header, as specified
in </em>
            <a href="http://msdn.microsoft.com/en-us/library/dd179428.aspx">
              <em>Authentication
Schemes</em>
            </a>
            <em>.”</em>
          </p>
        </blockquote>
        <p>
So that sounds simple enough- I just cracked open <a href="http://www.fiddlertool.com/">Fiddler</a> thinking
I’d just punch in the headers. But, these headers are actually fairly complex. Well,
ms-x-Date is simple enough, but, the Authentication headers involve both canonicalization
and signing of the request.
</p>
        <p>
I’d love to give you a simple solution so you can just browse tables, but, I haven’t
got one. I hope that at least this saves you from spending too much time trying.
</p>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=adbcc15f-1dbe-4757-9748-db7b6177534a" />
      </body>
      <title>Why You Can Just &amp;lsquo;Browse&amp;rsquo; To Tables in Azure Storage</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,adbcc15f-1dbe-4757-9748-db7b6177534a.aspx</guid>
      <link>http://www.syringe.net.nz/2009/01/20/WhyYouCanJustLsquoBrowsersquoToTablesInAzureStorage.aspx</link>
      <pubDate>Tue, 20 Jan 2009 07:39:40 GMT</pubDate>
      <description>&lt;p&gt;
So one of the cool things you can do in Windows Azure storage is just enter the URL
of a public Blob in your browser and retrieve it via an HTTP GET. This makes sense
as in REST, a GET and a URI will return the data at the URI. In the case of an Azure
Blob this means the bytes stored returned with the appropriate content type in the
header. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WhyYouCanJustBrowseToTablesinAzureStorag_DA0B/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WhyYouCanJustBrowseToTablesinAzureStorag_DA0B/image_thumb.png" width="644" height="206"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
You can also do thinks like retrieve a list of the Blobs in a given container like
this:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WhyYouCanJustBrowseToTablesinAzureStorag_DA0B/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/WhyYouCanJustBrowseToTablesinAzureStorag_DA0B/image_thumb_1.png" width="605" height="484"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
It would be nice to be able to do the same with Azure Table storage. A quick &lt;a href="http://msdn.microsoft.com/en-us/library/dd179360.aspx"&gt;glance
at the SDK&lt;/a&gt; leads one to think it’s as simple as
&lt;/p&gt;
&lt;pre&gt;http://myaccount.table.core.windows.net/Tables&lt;/pre&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
But this will fail on both the Cloud Storage and Local Storage. This is because
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;“The request must include the Authorization header and the Date header, as specified
in &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd179428.aspx"&gt;&lt;em&gt;Authentication
Schemes&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.”&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
So that sounds simple enough- I just cracked open &lt;a href="http://www.fiddlertool.com/"&gt;Fiddler&lt;/a&gt; thinking
I’d just punch in the headers. But, these headers are actually fairly complex. Well,
ms-x-Date is simple enough, but, the Authentication headers involve both canonicalization
and signing of the request.
&lt;/p&gt;
&lt;p&gt;
I’d love to give you a simple solution so you can just browse tables, but, I haven’t
got one. I hope that at least this saves you from spending too much time trying.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=adbcc15f-1dbe-4757-9748-db7b6177534a" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,adbcc15f-1dbe-4757-9748-db7b6177534a.aspx</comments>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=58f07c22-1dfa-4729-a49e-09f8be31af4a</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,58f07c22-1dfa-4729-a49e-09f8be31af4a.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,58f07c22-1dfa-4729-a49e-09f8be31af4a.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=58f07c22-1dfa-4729-a49e-09f8be31af4a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So a question came up in the Azure training session today about what the timeout was
before a ‘Dequeued’ message was returned to the quen unless it was ‘Removed’. Windows
Azure is designed to ensure your messages will always be completed so it returns a
dequeud message to a queu if it has not be permanently removed after a period of time.
</p>
        <p>
I knew it had to be configurable… but had no idea exactly how.
</p>
        <p>
The answer is here in the SDK
</p>
        <p>
          <a title="http://msdn.microsoft.com/en-us/library/dd179396.aspx" href="http://msdn.microsoft.com/en-us/library/dd179396.aspx">http://msdn.microsoft.com/en-us/library/dd179396.aspx</a>
        </p>
        <p>
or, if you are using the StorageClient sample code from .NET (and if you are using
.NET then you really should be!) then this post from Neill Kidd should help
</p>
        <p>
          <a title="http://blogs.msdn.com/neilkidd/archive/2008/12/07/poison-in-windows-azure.aspx" href="http://blogs.msdn.com/neilkidd/archive/2008/12/07/poison-in-windows-azure.aspx">http://blogs.msdn.com/neilkidd/archive/2008/12/07/poison-in-windows-azure.aspx</a>
        </p>
        <p>
// Get message with 60 sec visibility 
<br />
Message msg = queue.GetMessage(60);
</p>
        <p>
This means to ‘Dequeue’ a message only place that message back on the queue if RemoveMessage
has not been called within 60 seconds.
</p>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=58f07c22-1dfa-4729-a49e-09f8be31af4a" />
      </body>
      <title>Windows Azure Queue Timeout</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,58f07c22-1dfa-4729-a49e-09f8be31af4a.aspx</guid>
      <link>http://www.syringe.net.nz/2009/01/20/WindowsAzureQueueTimeout.aspx</link>
      <pubDate>Tue, 20 Jan 2009 07:21:02 GMT</pubDate>
      <description>&lt;p&gt;
So a question came up in the Azure training session today about what the timeout was
before a ‘Dequeued’ message was returned to the quen unless it was ‘Removed’. Windows
Azure is designed to ensure your messages will always be completed so it returns a
dequeud message to a queu if it has not be permanently removed after a period of time.
&lt;/p&gt;
&lt;p&gt;
I knew it had to be configurable… but had no idea exactly how.
&lt;/p&gt;
&lt;p&gt;
The answer is here in the SDK
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://msdn.microsoft.com/en-us/library/dd179396.aspx" href="http://msdn.microsoft.com/en-us/library/dd179396.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd179396.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
or, if you are using the StorageClient sample code from .NET (and if you are using
.NET then you really should be!) then this post from Neill Kidd should help
&lt;/p&gt;
&lt;p&gt;
&lt;a title="http://blogs.msdn.com/neilkidd/archive/2008/12/07/poison-in-windows-azure.aspx" href="http://blogs.msdn.com/neilkidd/archive/2008/12/07/poison-in-windows-azure.aspx"&gt;http://blogs.msdn.com/neilkidd/archive/2008/12/07/poison-in-windows-azure.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
// Get message with 60 sec visibility 
&lt;br&gt;
Message msg = queue.GetMessage(60);
&lt;/p&gt;
&lt;p&gt;
This means to ‘Dequeue’ a message only place that message back on the queue if RemoveMessage
has not been called within 60 seconds.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=58f07c22-1dfa-4729-a49e-09f8be31af4a" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,58f07c22-1dfa-4729-a49e-09f8be31af4a.aspx</comments>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=108b4136-050c-47b6-9340-964e44ec357a</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,108b4136-050c-47b6-9340-964e44ec357a.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,108b4136-050c-47b6-9340-964e44ec357a.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=108b4136-050c-47b6-9340-964e44ec357a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So based on the questions I have been receiving at the various Azure Services Platform
events around the world I am starting to put together a list of blog posts to do as
I get time. Please feel free to suggest other posts.
</p>
        <ul>
          <li>
            <strong>What Fits Where<br /></strong>I probably need to do a post that talks a bit about which bits of the Azure
Services Platform fit into what sort of businesses and business models. Windows Azure
won’t cure world hunger, but, it will be a great platform to use if you’re going to
build the next Facebook. There’s not been a lot out of Microsoft with these sort of
details yet, so, hopefully this post will go someway to answering these questions. 
</li>
          <li>
            <strong>Forward Caching in Windows Azure</strong>
            <br />
This post will talk about how to use the Local Storage in Windows Azure to cache data.
Why you would do it. What data you should store in there. What data you should not
store in there. 
</li>
          <li>
            <strong>What Being Stateless Means</strong>
            <br />
What does building a stateless Web Role or Worker Role mean? What are some common
traps where people might slip into ‘statefulness’? 
</li>
          <li>
            <strong>Multithreading and Parallelization in Windows Azure Worker Roles<br /></strong>When should you spawn multiple threads vs When you should create new instances.
Will discuss things like performance bounds. CPU Bound vs IO Bound vs Network Bound. 
</li>
          <li>
            <strong>How To Implement A Plug-in Model In Windows Azure</strong>
            <br />
Because the Windows Azure deployment model is on a Package basis it’s not possible
to add new DLLs once an application has initially being deployed into a Compute project.
The solution is, of course, to load the DLLs remotely into Cloud Blob storage and
then dynamically load the types using a plugin pattern.</li>
        </ul>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=108b4136-050c-47b6-9340-964e44ec357a" />
      </body>
      <title>My Windows Azure Blog Post Todo List:</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,108b4136-050c-47b6-9340-964e44ec357a.aspx</guid>
      <link>http://www.syringe.net.nz/2009/01/20/MyWindowsAzureBlogPostTodoList.aspx</link>
      <pubDate>Tue, 20 Jan 2009 02:46:36 GMT</pubDate>
      <description>&lt;p&gt;
So based on the questions I have been receiving at the various Azure Services Platform
events around the world I am starting to put together a list of blog posts to do as
I get time. Please feel free to suggest other posts.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What Fits Where&lt;br&gt;
&lt;/strong&gt;I probably need to do a post that talks a bit about which bits of the Azure
Services Platform fit into what sort of businesses and business models. Windows Azure
won’t cure world hunger, but, it will be a great platform to use if you’re going to
build the next Facebook. There’s not been a lot out of Microsoft with these sort of
details yet, so, hopefully this post will go someway to answering these questions. 
&lt;li&gt;
&lt;strong&gt;Forward Caching in Windows Azure&lt;/strong&gt;
&lt;br&gt;
This post will talk about how to use the Local Storage in Windows Azure to cache data.
Why you would do it. What data you should store in there. What data you should not
store in there. 
&lt;li&gt;
&lt;strong&gt;What Being Stateless Means&lt;/strong&gt;
&lt;br&gt;
What does building a stateless Web Role or Worker Role mean? What are some common
traps where people might slip into ‘statefulness’? 
&lt;li&gt;
&lt;strong&gt;Multithreading and Parallelization in Windows Azure Worker Roles&lt;br&gt;
&lt;/strong&gt;When should you spawn multiple threads vs When you should create new instances.
Will discuss things like performance bounds. CPU Bound vs IO Bound vs Network Bound. 
&lt;li&gt;
&lt;strong&gt;How To Implement A Plug-in Model In Windows Azure&lt;/strong&gt;
&lt;br&gt;
Because the Windows Azure deployment model is on a Package basis it’s not possible
to add new DLLs once an application has initially being deployed into a Compute project.
The solution is, of course, to load the DLLs remotely into Cloud Blob storage and
then dynamically load the types using a plugin pattern.&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=108b4136-050c-47b6-9340-964e44ec357a" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,108b4136-050c-47b6-9340-964e44ec357a.aspx</comments>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=f1ba481e-a40d-4246-9b84-0c4363ea6085</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,f1ba481e-a40d-4246-9b84-0c4363ea6085.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,f1ba481e-a40d-4246-9b84-0c4363ea6085.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=f1ba481e-a40d-4246-9b84-0c4363ea6085</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
 
</p>
        <blockquote>
          <p>
Had plenty of conversations over the past few days in Mumbai with people about scale
out strategies. About the difference between stateless and stateful portions of your
application and about some ideas around choosing horizontal partitioning strategies. 
</p>
          <p>
Waddayaknow… I boot up RSS Bandit this morning and Dare has a great post on this. 
</p>
          <p>
Covers many of the things we discuss this week. 
</p>
          <p>
One of the things I focussed on a bunch this week is having some knowledge of the
distribution of your data when choosing a good partition key.<br />
You want a horizontal partitioning key (partition key in Azure Table Storage) that
ideally DOESN’T fit a normal distribution.<br />
Think of it like this. If you partition your data using say the first letter of the
user name then you’re gonna end up with a whole bunch in your ‘S’ partition and not
a lot in your ‘Z’ partition. 
</p>
          <p>
Anyway. A great post and well worth reading.
</p>
        </blockquote>
        <p>
          <a href="http://www.25hoursaday.com/weblog/2009/01/16/BuildingScalableDatabasesProsAndConsOfVariousDatabaseShardingSchemes.aspx">Building
Scalable Databases: Pros and Cons of Various Database Sharding Schemes</a>
        </p>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=f1ba481e-a40d-4246-9b84-0c4363ea6085" />
      </body>
      <title>Strategies for Scaling out your Data Tier</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,f1ba481e-a40d-4246-9b84-0c4363ea6085.aspx</guid>
      <link>http://www.syringe.net.nz/2009/01/17/StrategiesForScalingOutYourDataTier.aspx</link>
      <pubDate>Sat, 17 Jan 2009 12:32:19 GMT</pubDate>
      <description>&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Had plenty of conversations over the past few days in Mumbai with people about scale
out strategies. About the difference between stateless and stateful portions of your
application and about some ideas around choosing horizontal partitioning strategies. 
&lt;p&gt;
Waddayaknow… I boot up RSS Bandit this morning and Dare has a great post on this. 
&lt;p&gt;
Covers many of the things we discuss this week. 
&lt;p&gt;
One of the things I focussed on a bunch this week is having some knowledge of the
distribution of your data when choosing a good partition key.&lt;br&gt;
You want a horizontal partitioning key (partition key in Azure Table Storage) that
ideally DOESN’T fit a normal distribution.&lt;br&gt;
Think of it like this. If you partition your data using say the first letter of the
user name then you’re gonna end up with a whole bunch in your ‘S’ partition and not
a lot in your ‘Z’ partition. 
&lt;p&gt;
Anyway. A great post and well worth reading.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
&lt;a href="http://www.25hoursaday.com/weblog/2009/01/16/BuildingScalableDatabasesProsAndConsOfVariousDatabaseShardingSchemes.aspx"&gt;Building
Scalable Databases: Pros and Cons of Various Database Sharding Schemes&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=f1ba481e-a40d-4246-9b84-0c4363ea6085" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,f1ba481e-a40d-4246-9b84-0c4363ea6085.aspx</comments>
      <category>.NET</category>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=e26aab74-3c7c-4858-a0e0-f183e61cb05e</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,e26aab74-3c7c-4858-a0e0-f183e61cb05e.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,e26aab74-3c7c-4858-a0e0-f183e61cb05e.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=e26aab74-3c7c-4858-a0e0-f183e61cb05e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So I am running an Azure Training course here in Mumbai today and people are asking
about good blogs to read WRT the Azure Services Platform.
</p>
        <p>
Here is the OPML export for my Azure folder from RSS Bandit.
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:8eb9d37f-1541-4f29-b6f4-1eea890d4876:a5996523-1c42-41e5-9a43-6a1e07318ba6" class="wlWriterEditableSmartContent">
          <p>
          </p>
          <div>
            <a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/AzureBlogsOPML_14728/Azure%20Blogs.opml" target="_self">Azure
Blogs.opml</a>
          </div>
        </div>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=e26aab74-3c7c-4858-a0e0-f183e61cb05e" />
      </body>
      <title>Azure Blogs &amp;ndash; OPML</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,e26aab74-3c7c-4858-a0e0-f183e61cb05e.aspx</guid>
      <link>http://www.syringe.net.nz/2009/01/16/AzureBlogsNdashOPML.aspx</link>
      <pubDate>Fri, 16 Jan 2009 10:19:32 GMT</pubDate>
      <description>&lt;p&gt;
So I am running an Azure Training course here in Mumbai today and people are asking
about good blogs to read WRT the Azure Services Platform.
&lt;/p&gt;
&lt;p&gt;
Here is the OPML export for my Azure folder from RSS Bandit.
&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:8eb9d37f-1541-4f29-b6f4-1eea890d4876:a5996523-1c42-41e5-9a43-6a1e07318ba6" class="wlWriterEditableSmartContent"&gt;
&lt;p&gt;
&lt;div&gt;&lt;a href="http://www.syringe.net.nz/content/binary/WindowsLiveWriter/AzureBlogsOPML_14728/Azure%20Blogs.opml" target="_self"&gt;Azure
Blogs.opml&lt;/a&gt;
&lt;/div&gt;
&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=e26aab74-3c7c-4858-a0e0-f183e61cb05e" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,e26aab74-3c7c-4858-a0e0-f183e61cb05e.aspx</comments>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=3391e754-190a-45a4-909a-a1811e30ff1a</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,3391e754-190a-45a4-909a-a1811e30ff1a.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,3391e754-190a-45a4-909a-a1811e30ff1a.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=3391e754-190a-45a4-909a-a1811e30ff1a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you are building applications with Windows Azure you will know that your Web Role
and Worker Role instances need to be stateless. If you’ve been architecting high scale
(read horizontally scaling server farms) then you’ll be used to this concept- you’ll
know about the Sql Session state provider and so forth.
</p>
        <p>
If you are using Azure you obviously will not be using the Sql provider. Instead you
should look at the AspProvider example in the SDK. This uses Azure Blob and Table
storage to store your session state.
</p>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=3391e754-190a-45a4-909a-a1811e30ff1a" />
      </body>
      <title>Using ASP.NET Sessions with Windows Azure</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,3391e754-190a-45a4-909a-a1811e30ff1a.aspx</guid>
      <link>http://www.syringe.net.nz/2009/01/16/UsingASPNETSessionsWithWindowsAzure.aspx</link>
      <pubDate>Fri, 16 Jan 2009 10:09:49 GMT</pubDate>
      <description>&lt;p&gt;
If you are building applications with Windows Azure you will know that your Web Role
and Worker Role instances need to be stateless. If you’ve been architecting high scale
(read horizontally scaling server farms) then you’ll be used to this concept- you’ll
know about the Sql Session state provider and so forth.
&lt;/p&gt;
&lt;p&gt;
If you are using Azure you obviously will not be using the Sql provider. Instead you
should look at the AspProvider example in the SDK. This uses Azure Blob and Table
storage to store your session state.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=3391e754-190a-45a4-909a-a1811e30ff1a" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,3391e754-190a-45a4-909a-a1811e30ff1a.aspx</comments>
      <category>Windows Azure</category>
    </item>
    <item>
      <trackback:ping>http://www.syringe.net.nz/Trackback.aspx?guid=7564318a-7695-460d-aa66-36bab7c00d81</trackback:ping>
      <pingback:server>http://www.syringe.net.nz/pingback.aspx</pingback:server>
      <pingback:target>http://www.syringe.net.nz/PermaLink,guid,7564318a-7695-460d-aa66-36bab7c00d81.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.syringe.net.nz/CommentView,guid,7564318a-7695-460d-aa66-36bab7c00d81.aspx</wfw:comment>
      <wfw:commentRss>http://www.syringe.net.nz/SyndicationService.asmx/GetEntryCommentsRss?guid=7564318a-7695-460d-aa66-36bab7c00d81</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
So one of the funky things about the .NET Services (was Biztalk serivces) part of
Windows Azure is the Connectivity Service.
</p>
        <p>
This makes it easier for WCF to communicate bidirectionally through NATs.
</p>
        <p>
It works by initially working through the cloud hosted relay and then attempting to
establish a direct connection. The direct connection approach is pretty cool.
</p>
        <p>
Obviously if it’s inside the same subnet they just talk direct, but, if it’s punching
through NAT devices it requires some differnet approaches.
</p>
        <p>
The approach that <a href="http://blogs.msdn.com/clemensv/">Clemens et al</a> have
taken here is the idea of NAT Port Prediction. Basically it involes ‘guessing which
ports will be opened outbound, firing a packet at roughly the same time between both
ends of the connection and ‘hopefully’ snapping a socket open.
</p>
        <p>
High level details are here:<br /><a title="http://nutss.gforge.cis.cornell.edu/pub/imc05-tcpnat/" href="http://nutss.gforge.cis.cornell.edu/pub/imc05-tcpnat/">http://nutss.gforge.cis.cornell.edu/pub/imc05-tcpnat/</a></p>
        <p>
Quite a cool approach, Clemens assures us that it’s used a bunch already by the likes
of Live Messenger and others.
</p>
        <img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=7564318a-7695-460d-aa66-36bab7c00d81" />
      </body>
      <title>Direct Connection with .NET Services (Azure Services Platform)</title>
      <guid isPermaLink="false">http://www.syringe.net.nz/PermaLink,guid,7564318a-7695-460d-aa66-36bab7c00d81.aspx</guid>
      <link>http://www.syringe.net.nz/2008/11/19/DirectConnectionWithNETServicesAzureServicesPlatform.aspx</link>
      <pubDate>Wed, 19 Nov 2008 23:20:35 GMT</pubDate>
      <description>&lt;p&gt;
So one of the funky things about the .NET Services (was Biztalk serivces) part of
Windows Azure is the Connectivity Service.
&lt;/p&gt;
&lt;p&gt;
This makes it easier for WCF to communicate bidirectionally through NATs.
&lt;/p&gt;
&lt;p&gt;
It works by initially working through the cloud hosted relay and then attempting to
establish a direct connection. The direct connection approach is pretty cool.
&lt;/p&gt;
&lt;p&gt;
Obviously if it’s inside the same subnet they just talk direct, but, if it’s punching
through NAT devices it requires some differnet approaches.
&lt;/p&gt;
&lt;p&gt;
The approach that &lt;a href="http://blogs.msdn.com/clemensv/"&gt;Clemens et al&lt;/a&gt; have
taken here is the idea of NAT Port Prediction. Basically it involes ‘guessing which
ports will be opened outbound, firing a packet at roughly the same time between both
ends of the connection and ‘hopefully’ snapping a socket open.
&lt;/p&gt;
&lt;p&gt;
High level details are here:&lt;br&gt;
&lt;a title="http://nutss.gforge.cis.cornell.edu/pub/imc05-tcpnat/" href="http://nutss.gforge.cis.cornell.edu/pub/imc05-tcpnat/"&gt;http://nutss.gforge.cis.cornell.edu/pub/imc05-tcpnat/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Quite a cool approach, Clemens assures us that it’s used a bunch already by the likes
of Live Messenger and others.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.syringe.net.nz/aggbug.ashx?id=7564318a-7695-460d-aa66-36bab7c00d81" /&gt;</description>
      <comments>http://www.syringe.net.nz/CommentView,guid,7564318a-7695-460d-aa66-36bab7c00d81.aspx</comments>
      <category>.NET</category>
      <category>Windows Azure</category>
    </item>
  </channel>
</rss>