Windows Azure Command Line Tools

Josh Holmes - Erubycon 2009 - Day 2There are times that you just need to leverage the raw power that you can get from the command line. For example, if you are trying to script something or if you are on a machine that is not all tooled up with Visual Studio, Eclipse and the like and, believe it or not, there are times that it’s just a lot easier to get stuff done without an IDE in the way. Great news is that we’ve got a couple in the Windows Azure SDK called CSPack and CSRun that work wonders.

To that end, please enjoy this little tutorial on using the command line tools to create a very simple Azure package and deploying it up to the development fabric.

Before you even start you will need one of the Windows Azure SDKs installed. I’m testing this with the November 1.0 release.

First, create a directory where you will place your project. In that directory, create a directory called WebRole. At this point you will have

>Project
      >WebRole

In the WebRole directory, place the files that you want to be deployed with your Windows Azure package. For mine, I just created a very simple HTML file that looks as follows:

<html>
<head><title>Quick Sample</title></head>
<body>
This a quick sample. <br />
<img alt="Sample Photo" src="photo.jpg" />
</body>
</html>

In the root folder for your project, there are two files that you need to create. The first file is is the definition file. I called mine simple.csdef:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="Simple" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="WebRole" enableNativeCodeExecution="true">
    <ConfigurationSettings>
    </ConfigurationSettings>
    <InputEndpoints>
      <!-- Must use port 80 for http and port 443 for https when running in the cloud -->
      <InputEndpoint name="HttpIn" protocol="http" port="80" />
    </InputEndpoints>
  </WebRole>
</ServiceDefinition>

The second file is the configuration file. Mine is called simple.cscfg:

<?xml version="1.0"?>
<ServiceConfiguration serviceName="Simple" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
  <Role name="WebRole">
    <Instances count="1"/>
    <ConfigurationSettings>
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>

Now we are ready to start using the command line tools. The first one is called CSPack. What this tool does is create a deployment package for you.

c:\Project>cspack simple.csdef /copyonly
Windows(R) Azure(TM) Packaging Tool version 1.0.0.0
for Microsoft(R) .NET Framework 3.5
Copyright (c) Microsoft Corporation. All rights reserved.

If you look in your directory structure now, you’ll see a new folder called simple.csx. Check it out and you’ll see that what it’s done is create a very specific folder structure ready to deploy out to the dev fabric. This is done with the /copyonly option.

The next tool is the CSRun tool. This does the actual deployment out to the dev fabric and can even, if you so choose, launch the browser for you. You need to pass it the name of the ready to deploy directory that the CSPack tool created and the name of the service configuration file.

c:\Project>csrun simple.csx simple.cscfg
Windows(R) Azure(TM) Desktop Execution Tool version 1.0.0.0
for Microsoft(R) .NET Framework 3.5
Copyright (c) Microsoft Corporation. All rights reserved.

Using session id 1
Created deployment(31)
Started deployment(31)
Deployment input endpoint HttpIn of role WebRole at http://127.0.0.1:82/

Now you are ready to run and test

image

To find out more about these tools read Windows Azure SDK Tools Reference

Windows Azure Storage Services REST API

Hard DriveIn playing Windows Azure, I’ve started getting into the Windows Azure Storage Services REST API. The REST API gives developers from any languages and/or platforms access to all of the Storage from either inside of Windows Azure or outside. It supports both HTTP and HTTPS. With it you can do just about anything that you need to with Blobs, Queues and Tables.

For example, if you want to create a new table in the Windows Azure Table Storage you can just send it a little bit of XML that looks like this:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entry xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
	xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
	xmlns="http://www.w3.org/2005/Atom">
  <title />
  <updated>2010-02-04T10:48:34.9840639-05:00</updated>
  <author>
    <name />
  </author>
  <content type="application/xml">
    <m:properties>
      <d:TableName>MyTableName</d:TableName>
    </m:properties>
  </content>
</entry>

There are a couple of small things that are a little wonky.

First, the URL is RESTish to be honest. Check out the last bit of this sample URL that does a search on a set of entities in a table:

http://myaccount.table.core.windows.net/Customers()?$filter=(Rating%20ge%203)%20and%20(Rating%20le%206)

That last part of the filter is something that’s the “ish” part. It’s the query that’s used to search the entities.

The second things that’s a wonky is that there are a handful of things that you can do from the native .NET libraries that you can’t do from the REST interfaces. For example, you can’t do LINQ from the REST interfaces. There are little things like that across all of the storage options but what it really says is that you should use the native libraries where possible.

Third thing that I found a little wonky but it kinda makes sense is that every request against the REST service has to have an authorization code. It is passed in as an HTTP header.

Authorization=”[SharedKey|SharedKeyLite] <AccountName>:<Signature>”

Anyways, I thought it was an interesting set of services and they are really useful especially if you’re doing something other than .NET.

Read more about them at Windows Azure Storage Services REST API

When to use what Microsoft Client Technology

I was asked earlier when to use what Microsoft client Technology. I thought about just sending a link to Michael Schroeder’s post but decided I should put in my own thoughts on the matter first.

At the heart of Michael’s post is this table.

WPF WPF XBAP Silverlight ASP.Net + AJAX
Client Windows XP SP2 (With .Net 3.0), Vista and obviously Windows 7 Internet Explorer + Windows XP SP2 (with .Net 3.0) & Vista FireFox, Mac Safari, Internet Explorer Any Web Browser
Deployment Downloadable Installer or ClickOnce Runs in Internet Explorer secure sandbox One-time install of Silverlight plug-in Web Page
When to use Programs that need access to Windows desktop files. Intranet applications for Windows-oriented companies. Rich Internet Applications for public-facing web sites General-purpose public-facing web sites

Here’s my 2 cents on the subject.

WPF

WPF is a fantastic choice for applications that need full access to the desktop for any number of reasons. That could be full 3D support, access to desktop files and the like. You can install these applications through XCopy, a full downloadable Installer or a ClickOnce installer. Where possible, I like to leverage the ClickOnce installer as it gives some amazing benefits around auto-update and keeps my application in a secure sandbox so deployment becomes really easy.

WPF XBAP

Just don’t use XBAPs anymore. This was an attractive option for Intranet applications back before Silverlight 2 and to a lesser degree Silverlight 3. However, now that Silverlight has the power that it does with .NET and OOB options and the like, opt for Silverlight anytime you would have considered XBAPs.

Silverlight

Silverlight is the right choice for any external facing Applications. But that’s the key. I really look at Silverlight not as an HTML replacement but a true application layer. That’s one of the central points in the talk that James Ward and I did at Web 2.0 Expo last year – http://www.slideshare.net/joshholmes/best-and-worst-practices-building-ria-with-adobe-and-microsoft.

ASP.NET + AJAX

ASP.NET + AJAX is the right choice for external facing, or even internal facing, web sites where the primary focus is information dispersal. That said, there are some amazing applications built with JavaScript in the browser.

Overall

The reality is that there are a lot of grey lines. WPF is getting a lot easier to deploy breaking down the traditional decision points between desktop and web applications. Rich Web Applications blur those lines as well and the reality is that they could be used to build a lot of applications that have historically been either written as full desktop applications or as web applications. Then on the web application side, JavaScript and the browser are getting faster, strong and easier to develop all the time so it’s becoming more of a viable application building set of technologies.

Windows Azure SDK 1.1

There’s an update to the Windows Azure SDK, version 1.1. The SDK extends Visual Studio 2008 and the upcoming Visual Studio 2010 RC making it easy to develop, debug, package and deploy Windows Azure Applications.

There’s a number of new things and a handful of bug fixes from the 1.0.

From the download page:

  • Windows Azure Drive: Enable a Windows Azure application to use existing NTFS APIs to access a durable drive. This allows the Windows Azure application to mount a page blob as a drive letter, such as X:, and enables easy migration of existing NTFS applications to the cloud.
  • OS Version Support: Allows a Windows Azure application to choose the appropriate Guest OS to run on in the cloud.
  • Bug Fixes
    • StorageClient: Expose account key from storage credentials, expose continuation tokens for pagination, and reduce maximum buffer size for parallel uploads.
    • Windows Azure Diagnostics: Fix path corruption for crash dumps, OnDemandTransfer now respects LogLevelFilter.
    • VS 2010: Improved packaging performance.
    • VS 2010: Support for linked files in Web projects.
    • VS 2010: Support for ASP.NET web project web.config transformations.
    • Certificate selection lists certificates from LocalMachine\My instead of CurrentUser\My.
    • Right click on Role under Roles folder to select whether to launch the browser against HTTP, HTTPS or not at all.

Windows Azure Tools for Microsoft Visual Studio includes:

  • C# and VB Project creation support for creating a Windows Azure Cloud Service solution with multiple roles.
  • Tools to add and remove roles from the Cloud Service.
  • Tools to configure each Role.
  • Integrated local development via the Development Fabric and Development Storage services.
  • Running and Debugging a Cloud Service in the Development Fabric.
  • Building and packaging of Cloud Service Packages.
  • Browsing to the Windows Azure Developer Portal.

Download details: Windows Azure Tools for Microsoft Visual Studio 1.1 (February 2010)

Taking The Polar Plunge Again

Josh Holmes doing the Polar PlungeLast year I did a Polar Plunge to raise money for the Special Olympics – Read about it at Taking The Polar Plunge.

I’m doing it again this year and have much loftier goals this year. Last year I raised $725.00 and this year I want to raise $1000.00 and inspire others to do the same. At the time of this writing, I’ve raised $500 personally and have inspired 2 others to do the dive with me.

clip_image002First, why in the world would I do this in the first place?

You may or may not know that I have a daughter with special needs. Her name is Maura. She’s 6 years old and while we don’t have a name for what she has the symptoms are that she has global delays and a seizure disorder. Despite this, she is one of the most passionate people that I know and approaches everything with wonder and excitement. She loves sports, playing with other kids and all kinds of activities. She’s amazing and an inspiration to me all the time.

She is not currently in Special Olympics but she will be soon so I’m supporting them now. I know that she will approach it like she does everything else with wonder and excitement.

Now, how can you help?

There are two easy ways to help with this year’s fundraising efforts, donate and/or plunge. The plunge that I’m doing is on Feb. 13th in Belleville, MI but you can plunge in any of their 19 locations and dates:

January 24
Lansing – Eagle Eye Golf Course
February 6, 2010

Stanton– Clifford Lake Inn
Muskegon – Fricano’s Muskegon Lake

February 13, 2010
Traverse City – Grand Traverse Resort & Spa
Cheboygan – Hoppies Bar & Grill
Belleville – Moose Lodge
Fenton – Fenton Moose Lodge

February 20, 2010
Jackson – Eagles Nest Restaurant
Mount Pleasant– CMU
Gaylord – Otsego Lake State Park
Ann Arbor – U of M
Grand Rapids – East Grand Rapids Middle School

February 27, 2010
Detroit – Roostertail
Saginaw/Bay City – Saginaw
Mecosta/Osceola – Chippewa Lake
Alpena – Burton’s Last Resort

February 28, 2010
Pinckney – Zukey Lake Tavern

March 20, 2010
Kalamazoo – Lawson Ice Arena
Marquette – Marquette Mountain

 

If you would rather just donate to my plunge, you can do so at Josh Holmes’ Polar Plunge Fundraising Page.

Either way, I thank you for your support!

If you are not able to support the Special Olympics of Michigan right now, please consider doing so in the future. You can see a lot great ways to get involved at http://somi.org/page.php?contentID=1233.

Review of Ext JS 3.0 Cookbook

Ext JS 3.0 Cookbook Cover

For full disclosure, Packt Publishing sent me a review copy of this book. They did not ask for a positive review, just a review.

<update>The book’s official page is at Packt Pub’s Official Ext JS 3.0 Cookbook site</update>

This is the first book by Jorge Ramon that I’ve read. This book is exactly what the title says that it is, a Cookbook. It’s got 109 solutions to problems solved by Ext JS 3.0. I was expecting, like a lot of other books to get a fill of all of the philosophy behind what they are trying to promote but that wasn’t the case. This book just in with no nonsense and gets right to the code.

Every chapter is laid out exactly the same. It starts off with a list of problems solved in this chapter and a very short paragraph that gives an explanation to why these are related problems. The rest of the chapter is broken in to “recipes” all of which are laid out exactly the same as each other as well with sections “Introduction”, “How to do it”, “How it works”, an optional “There’s more” and a “See also” section. The intro is typically a short paragraph that describes when this recipe is going to be useful and optionally contains a screenshot or two of the solution. The How to do it section is almost all code with just enough text to explain where to put the code that you are looking at. The How it works section explains a little more about the events and the libraries that are at play and how they effect the code snippets that you just wrote. The There’s more section points out potential pitfalls or other benefits that this recipe brings to the table. The See also section points out related recipes that you should look at in addition to the recipe that you’re looking at.

So what’s my opinion on the book?

if you are trying to understand JavaScript and/or Ext JS 3.0, this book is not the book for you. There are plenty of other books out there that will step you in at a little more manageable pace.

However, if you are somewhat familiar with JavaScript and Ext JS 3.0, this is a great recipe book. The code is clean and readable. The problems are problems that I see on a semi-regular basis. I like it for what it is. It’s a handy reference and a set of problem/answers that solve discrete problems. It’s a good formula and I’m probably going to write a few blog posts in that format to feel it out.

The price, $49.00 or 30.99 Pounds is a little steep but if it cuts an hour or two out of your research and development time, it’s paid for itself. Also, you can download the code from Packt Publishing in a zip file and copy paste from that so it’s definitely going to save you time if you are using Ext JS 3.0. This was something that I missed at first to be honest and only caught when I went back to reread the preface and saw the link to where the source is zipped up.

Packt PublishingAnother interesting note about Packt Publishing is that on their “About Packt Publishing” page in the back of the book, they mention that when they publish a book based on an open source project that they pay royalties back to that project. I don’t know how much they pay in royalties to the project but that’s a really class thing to do. If one is making money on an open source project, they should contribute to it somehow either through code or financially or both.

Updating the Simple Silverlight Countdown Blog badge

image When I was preparing for RIAPalooza, I created and blogged about Creating a Simple Silverlight Countdown Blog badge.

It was great but I wanted to updated it for the next event and realized that recompiling it was not really a user friendly option. The answer is that I updated the widget to have a level of parameterization so that I could easily update it without having to recode everything.

*Update – Source Code

The good news is that there’s a mechanism called InitParams that allows you to pass in initialization parameters on startup. I’m not wild about the mechanism itself as it’s just a key-value pair string and not individual parameters but it works. The alternative is to do something where you write some javascript that will call into the Silverlight object and set parameters. While that works, it wasn’t my first choice because you have to worry about the order of events, exposing objects as scriptable and so on.

<object data="data:application/x-silverlight-2," 
type="application/x-silverlight-2" width="100%" height="100%"> . . . <param name="initParams"
value="eventDate=01/13/2010,registrationUrl=www.codemash.com,
registerText=Check it out!,startImageUrl=logo_codemash_2010.jpg,
endImageUrl=logo_codemash_2009.jpg" /> . . .
</object>

Notice that there are multiple parameters here separated by commas. The first one is a date and the second one is a URL and so on.

To access that init parameter in the startup you need to open the App class found in App.xaml.cs and in any method use the Host object’s InitParams list.

string fieldValue = this.Host.InitParams[key];

For a lot of reasons, I wrap that up in a method as follows:

private string GetInitParam(string key)
{
    string fieldValue = "";
    if (this.Host.InitParams.ContainsKey(key))
    {
        fieldValue = this.Host.InitParams[key];
    }
    return fieldValue;
}

This allows me to quickly add a lot of new parameters and write the OnStartup method as follows:

private void OnStartup(object sender, StartupEventArgs e)
{
    string DateTimeString = GetInitParam("eventDate");
    DateTime eventDate = DateTime.MinValue;
    if (DateTimeString.Length > 0)
    {
        try
        {
            eventDate = DateTime.Parse(DateTimeString);
        }
        catch { }
    }

    string backGroundUrl = GetInitParam("background");
    string startImageUrl = GetInitParam("startImageUrl");
    string endImageUrl = GetInitParam("endImageUrl");
    string registrationUrl = GetInitParam("registrationUrl");
    string registerText = GetInitParam("registerText");

    // Load the main control here
    this.RootVisual = new Page(
        eventDate,
        backGroundUrl,
        startImageUrl,
        endImageUrl,
        registrationUrl,
        registerText);
}

Notice that I’m calling a custom constructor on the Page class. That looks as follows:

Timer _timer = null;
public Page()
    : this(DateTime.Now, "", "", "", "", "")
{}
public Page(DateTime eventDate, string backGroundImageUrl, 
string imageStartUrl, string imageEndUrl,
string registrationUrl, string registrationText) { EventDateTime = eventDate; // Required to initialize variables InitializeComponent(); if (backGroundImageUrl.Length > 0) { backGroundImage.Source = new BitmapImage(new Uri(backGroundImageUrl, UriKind.Relative)); } if (imageStartUrl.Length > 0) { image.Source = new BitmapImage(new Uri(imageStartUrl, UriKind.Relative)); } if (imageEndUrl.Length > 0) { image1.Source = new BitmapImage(new Uri(imageEndUrl, UriKind.Relative)); } if (registrationUrl.Length > 0) { linkRegistrationButton.NavigateUri = new Uri("http://" + registrationUrl); } if (registrationText.Length > 0) { linkRegistrationButton.Content = registrationText; } _timer = new Timer(new TimerCallback(Timer_Tick), null, 0, 1000); AnimateLogos.AutoReverse = true; AnimateLogos.RepeatBehavior = new RepeatBehavior(1000); AnimateLogos.Begin(); }

That’s all that was required for making it parameterized so that I can update it quickly.

Above the Fold and how It Really Should be Used

Chicago 080I’ve come to realize that many web designers don’t understand what “Above the Fold” and how it really should be used. Above the Fold is an old print newspaper layout term for what’s on the top part of the page, the part that is displayed in the window at the newspaper stand. In web design, the term is used for the bits that the user can see without having to scroll. I’ve talked and ranted about this before as It’s point number 23 in 32 ways to keep your blog from sucking

<update>It was brought to my attention that it’s often not a web designer but rather an Information Architect or a Developer who is updating the layout on the page. Completely agreed and this is yet another reason that you should look for competent web designers for the layout and design of your page.</update>

What’s bringing it up now is that CX Partners recently blogged about The myth of the page fold: evidence from user testing | cxpartners and it concerned me a little. CX Partners does a lot of user testing and one of the things that they have tested for is whether or not the “Fold” mattered to users and out of 800 users, only 3 were unable to find content because they would have to scroll to find it. They are right, users are used to scrolling and are willing to do so if they know that there’s more content below. We just need to give them visual hints that there is more content that they will have to scroll to see. What they are trying to fight is the urge to put all of the content or at least all of the *important* content Above the Fold and design pages so that users do have to scroll. I’m on board with that fight. Cramming all of the content into cramped margins and smashing things together just so that it can be seen without scrolling is horrible design.

Here’s the part that concerns me as an old school print layout guy. There’s a fundamental miss on what the “Above the Fold” content is supposed to be used for in your layout whether it’s print or web design.

How does print layout treat above the fold?

The above the fold content is not meant to be the meat of the content or really even the most important content. It’s meant to be eye catching. It’s the lure for people to pick up the paper or magazine.

100th Anniversary of the Seattle P-I NewspaperWhen thinking about the fold in a newspaper, think about the old school newspaper dispenser with the top half of the top page displayed in the little window. There is a deliberate attempt to put a catchy photo and headline in that window so people buy the paper. Is that the best thing in the paper, not even close. That’s the picture that’s going to look good on someone’s coffee table when they toss down the newspaper.

New York 1st day. magazine standsOr better, think about the magazine stand and how there are potentially hundreds of magazines there and you need for yours to stand out enough that people will buy it. Think this through – what can they see in the magazine stand? Typically they can see the top edge of the magazine and part of the picture. I was amazed once when I was talking to a freelance sports photographer who told me that he’d net $40k-$60k for one photo if he could land the cover picture on Sports Illustrated. But it makes a ton of sense. This concept of trying to stand out on just a headline and a photo is not lost on the smart people at Sports Illustrated. The right picture could make far more than $40k worth of a difference on the stand.

How does this apply to web design?

Honestly, it’s the same exact concept. The fold or scroll line is the area of the page that people can see without having to scroll down the page. This area needs to catch people’s attention correctly because they may only be on your page for a few seconds. If you look at the statistics on any site that gets a decent amount of traffic and the average page view length is measured in seconds, not minutes.

When people are browsing through and they get a link from another site or from a search engine, what’s the first thing that they see? Imagine that as if they are glancing past your page among the potentially hundreds of others that they are looking past which is really not that much of a stretch because they are looking to see which pages are more likely to fit their needs than others. They may not be paying for your content but they are investing their time.

The problems come in two sizes. First, there are designs that try to shove as much content as they can into that above the fold area because there’s an assumption that if it’s not there, their users won’t see it. Second, there are other designs that completely shun the idea of scrolling and end up with these horrid wizard style pages where the user has to click through to see the next page and the next page and so on. Either of these are poor choices.

Back to the article for a moment – I really liked CX Partners’s “Design tips to encourage scrolling”. What was missing is the “How to hook them and keep them” bit.

Let’s look at Jeff Blankenburg’s blog for a good reference here.

image

You know exactly what you are going to get on his page. The disk in the middle, which is what most people see first cycles through all of the social networks that he frequents. The tweets across the top express his last several publically blasted thoughts while the little bird that flies around them draws eyeballs to them. The menu shows you that he’s delivering Code and Slides through this blog in addition to other posts. The RSS tag that hangs down and swings a little definitely captures the attention and draws people to subscribe. Finally, the title of the blog and the first blog post start drawing eyes down the page to see the meat of the content. But what real content is above the fold on Jeff’s blog? Honestly, there’s none. All of the real content is below the fold so the user has to scroll for it. Going back to the CX Partners post, that’s fine. Users know how to and are willing to scroll for content if they find the page interesting. The *only* thing that I dislike about his header is that it’s a fairly large chunk that takes 3-5 seconds to load the first time. This is a killer if the use
r is only on the page for 3 seconds.

Another great example is any Amazon product page. They have the picture of the product, average user rating and price right at the top. The product detail, related products, the actual reviews and all of the rest of the content is below the scroll line. Obviously, it’s successful for them.

Wrapping up…

Above the Fold is widely miss-understood. You need to realize that this critical section of the page is not about shoving as much content as you can the user. It’s about effectively giving the “Elevator” pitch on your site and getting that longer look that will likely involve scrolling down to see the real content.

Guard the above the fold content and keep it to the essential bits that will tell the user what your site is about rather than trying to give them everything in one big drink from the fire hose. Whenever anyone talks to you about moving a certain section of content above the fold, turn the question on them by asking them how that keeps people on the site over all.

Announcing the WebsiteSpark Program

image Building on the success of the DreamSpark and BizSpark program that we launched about 11 months ago Microsoft is now launching the WebsiteSpark program.

WebsiteSpark is designed for small web consultancies ranging in size from 1 to 10 people. With WebsiteSpark, you get a package of software specifically selected for a web consultancy to serve their customers better.

What does the program provide?

WebSiteSpark provides software licenses that you can use for three years at no cost.  Once enrolled, you can download and immediately use the following software from Microsoft:

  • 3 licenses of Visual Studio 2008 Professional Edition
  • 1 license of Expression Studio 3 (which includes Expression Blend, Sketchflow, and Web)
  • 2 licenses of Expression Web 3
  • 4 processor licenses of Windows Web Server 2008 R2
  • 4 processor licenses of SQL Server 2008 Web Edition
  • DotNetPanel control panel (enabling easy remote/hosted management of your servers)

The Windows Server and SQL Server licenses are for you to do both development and production work. Also, the production licenses can be leveraged in a couple of different ways. You can do 1 production server with 4 processors or 4 servers with 1 processor each. These servers can also be either dedicated hardware or virtualized offerings. If you want, you can throw the licenses on your own server with the “self-hosted” model or you can enroll with one of the hosters that have signed up as a Network Partner. As a Network Partner, they will pass the savings of the licenses on to you and only charge you for the infrastructure work. You can find all of the hosting network partners on the WebsiteSpark page.

But this program is not just about software. As part of the WebsiteSpark, the people that enroll are entered into the Microsoft Partner Program and into Microsoft Pinpoint. This will help result in customer referrals and more. There’s also 2 Microsoft professional support incidents per year and some free online training that will be provided. 

Who’s eligible for BizSpark?

WebSiteSpark is available to independent web developers and small web development companies.  The only two requirements to join the program are:

  1. Your company builds web sites and web application on behalf of others.
  2. Your company currently has less than 10 employees.

If you qualify and want to get signed up today, there are a couple of different paths.

You can always visit WebsiteSpark and sign up directly. During the enrollment, you can pick a network partner or you can pick one of your friends at Microsoft such as me as your contact to enroll and sign you up.

Or you can send mail to webspark@microsoft.com you can get a referral code quickly.  You can then use that code to enroll in the program on the WebsiteSpark website.  Once enrolled you can immediately download and use the software, as well as begin to participate in the network/partner opportunities.

If you run into any issues at all, email me at josh.holmes@microsoft.com and I’ll help you out.

Some quick Q&A
  • What happens after the 3 years?

There is a $100 exit fee when you leave the program whether you leave at the end of 1 year or you leverage all three years. However, there’s no obligation to continue using any/all of the software once you exit the program. If you so wish, you can pay the $100 exit fee and wash your hands of the whole deal. Obviously, the play here is that at the end of the three years you will find our platform and tools valuable enough to purchase.

That said, there are some interesting incentives that are being put in place right now to help you with that decision. WebsiteSpark participants can optionally choose to purchase all of the software in the WebsiteSpark program via a $999/year package. And yes, that includes all of the software involved from the tools to the production licenses.  

Or you can just leverage the production licenses through a stellar $199 a year offer that includes both 1 Windows Web Server processor license and 1 SQL Server Web edition processor license.  You can buy the quantity you need of this package at $199/year each. 

  • What’s the role of the Network Partner?

Similar to the BizSpark program, the Network Partners are selected because they are active in supporting the ecosystem that the program is intended for. In the case of hosters it’s obvious. They host the websites that WebsiteSpark participants are building. There are others who work with the community in advisory roles and want to help out as mentors and coaches.

Couple of examples:

Cal Evans is another example of a great network partner as he’s working with PHP shops all over the world and helping them to be successful again as a mentor and as a coach. As a network partner, he is adding one more offering into the portfolio to help his mentees be successful.

Steve Smith from Nimble Pros who wanted to be involved as a network partner because he’s active in working with other consults to help them be successful through support, advice, mentoring and sometimes sub-contracting. He’s proven this by being a Microsoft Regional Director and an MVP for many years. His role as a network partner in the program only furthers that goal of helping the ecosystem.

Ben Henderson from Firefly Logic, Harper Reed from Threadless and John Alexander and Jeff Julian from Geeks With Blogs hold similar positions in the community as influential bloggers, coaches, mentors and advisors to many companies.

Summary

I’m really excited about WebsiteSpark because I remember when I was an independent consultant and then a partner at SRT Solutions getting our first dedicated server. It was a great feeling to have the freedom to do whatever we needed to do with the server from installing different types of software to configuring the redirects the way we wanted.

For more details – read Scott Guthrie’s blog post at Announcing the WebsiteSpark
Program – ScottGu’s Blog

Again, if you want to get involved, feel free to contact me at josh.holmes@microsoft.com. Either I can sign you up directly or get you in touch with the right network partner to help you in your situation.

Vote for the SxSW Panels!

panelpicker-formula.gifOne of the many things that I love about SxSW is that they let the attendees vote for the sessions that they want to see. They are also very realistic that the attendees are not picking the sessions, but they do count for 30% of the vote. Their whole process is laid out on the main page at http://panelpicker.sxsw.com/. It’s 30% attendee votes, 30% staff and 40% advisory board.

The reason that I’m bringing this is that I’ve submitted some sessions this year for SxSW and I need your votes. Typically I don’t do this blatant of a self promotion and/or plea for help but I’m up against some of the best social marketers in the business. 🙂

Specifically, I’ve got two that are up for votes right now.

clip_image002The first one is a joint session with James Ward who is one of the technical evangelists from Adobe. He and I are talking about the best and worst practices that we see at our clients every single day.

Title: Best and Worst Practices Building Rich Internet App

Description:
Seen a good RIA lately? A bad one? Because RIAs provide a similar user experience to desktop applications (with the ease of a web/browser-based deployment), confusion results from potentially conflicting practices depending on whether one approaches the RIA as a desktop or a web application. Let’s stop the madness.

Questions:

  1. What is RIA?
  2. What technologies are considered RIA technologies?
  3. When should you use RIA?
  4. When should you not use RIA?
  5. What’s the learning curve for desktop developers to jump into RIA?
  6. What’s the learning curve for web developers to jump into RIA?
  7. What are the best practices for RIAs?
  8. What are the worst practices for RIA?
  9. How does one deal with multiple form factors?
  10. What’s the best architectural guidance for a RIA?

clip_image002The second session that I submitted is a joint session with Jason Gilmore, resident PHP Guru and consultant. He and I are talking about intelligently scaling your applications through cloud computing and our lessons learned actually doing just that.

Title: You Build It, They Come, Your App Scales

Description:
A startup’s biggest hopes – and fears – are hitting it big, and having to scale to 100,000 users overnight. See how PHP combined with Cloud computing provides the best of both worlds – low entry barriers, low startup costs and the ability to scale rapidly to meet demands.

 

Questions:
  1. What is Scale?
  2. What’s the difference between Scale and Performance?
  3. What are the ways to scale an application?
  4. How do you determine what scale you need?
  5. What is cloud computing?
  6. What is Azure?
  7. How well does PHP work on Azure?
  8. What considerations are needed to run on Azure?
  9. How do you geo-locate an application?
  10. How hard is it to get started with cloud computing?

I need your help getting the word out and the votes flowing. Please tweet about the sessions and/or this post and drive some awareness of my sessions! 🙂