First Impressions: Rackspace Cloud Servers for Windows Beta

I have been spending up to $120 a month or so on hosting for the past 6-8 years and I finally decided to get off my ass and make a change.

I have been with the same provider for the past 10 years and have always been happy with the service and performance but it was time for change. As you can tell by the frequency of my blog posts, I am not a high traffic site, so why am I paying as much as I am for hosting when I am a part time player? I am old school, so old school that I convinced a long time friend to build a server room, complete with a HFC-125 fire suppression system, large enough for 20x the space of the space in the old building they were moving from.For what? For control of the environment. To this day I don't feel that it was a bad investment, based on the business model. I am really just digressing on why I am so old school when it comes to hosting.

During my time at Gnoso, my eyes were opened to “the cloud”. The problem has always been that when it came to “the cloud”, Microsoft technologies were never represented in a fashion that it was worth my time to convert. I say this because I have a hard time spending 20, 40 or even more hours of my time to learn how I can move all of my stuff to save 500 bucks. In essence, I would be working for 10 bucks an hour.

I have always been impressed by the Rackspace “cloudsites” and have talked to friends about how they could implement solutions using the technology but I could never justify moving from a “real machine” to this “thing”. Then came Rackspace “Cloud Servers” for Windows.

Sometimes when I read, I implement the “Speed reader, crappy detail” parser and in the case of Cloud Servers, this was my original issue. I landed on the Windows beta page a few months back and for some reason thought I could sign up, so I did (sort of).

I got to the point in the signup process where you had to choose the o/s and I was confused why Windows was not an option. The next thing I did is what impressed me the most with Rackspace; I said screw it, and closed the browser and moved on with my day, so I thought. I started to receive these emails asking why I bailed, wondering if it was something they did wrong, and asking if I had any questions or needed help in completing my order. So what did I do? I replied to the email, never expecting a response. I told them that “Cloud Servers” are great, but Linux doesn’t pay my bills, contact me when I can make some money. Within a few hours, I was told that it would be coming soon (February 9th), and it came.

One of the other things I did a month or so ago was to “Add my contact information so we can inform you when the service is available.” We all know from experience that means that you can either expect a ton of spam, or someone is using you in a formula in their Excel spreadsheet in their “potential market” formulas that are given to investors. I had little to no hope of hearing anything about this “February 9th release date”. Well I was wrong. I received an email today and sent a tweet stating I was going to check it out tonight. Again, totally surprised, I receive a mention tweet saying “@joefeser awesome. would love to hear your feedback!”. And here is my feedback (do I digress or what?)

The first thing I did was click on the link provided in the “Cloud Sites Windows Beta” email from this morning. They added details from the original “beta” link, and added what is included today along with some things that not “ready” for prime time. Ok cool so on day one, you don’t have backup. It is beta, do we really expect your test to be backed up so your children can look it up on 10 years? For me no big deal, large scale operations may worry but it is beta for a reason, to verify it performs to expectations. They will not call it anything other than beta until the SLA is in place and they feel it is production ready. Thank you Rackspace for not calling something ready before it is ready.

So I click on a link or two or more to sign up, and I am confused because I don’t see a window link, I see a generic sales “funnel”, I continue anyway. I go though every page, and the required credit card with the required my home phone attached to it, and submitted the order. What was confusing is that it was not obvious that at this time, we need to collect data and nothing will be changed until you are approved and actually add a service. This is the only place that I found that needs work right off the bat. I can guess that the abandoned funnels show the same pattern.

Being that I am a .Net developer, I had faith that a beta has a ton of manual resources thrown at the problems that were not able to be resolved in html and they were. During the sign up process, it required a call back to my home phone number. Ross called me within 10 minutes to verify that I am who I say I am. I also asked a few questions and he was able answer them or email me a follow up with the answers - very impressive considering that up to this point, I have not committed a dime to them.

I was already in the control panel during the phone call and I decided to be the pain in the ass customer and set up the worst case scenario. Windows 2008 with 512 megs of ram running .net 3.5 sp1, IIS and Sql 2008 Express. Seriously, the setup should really just tell you, dude get a new job, Windows 2008 Server does not work with 512 megs of ram, but it does.

While relaxing with three Fat Tire beers, I was able to configure the server, open a few other ports on the fire wall, copy files from my old provider using remote desktop (from the cloud server), configure sql, IIS, set up permissions and send tweets updating my progress. During this time, the server experience was flawless. There were no pauses or trashing that you normally get from an underpowered machine. If a non sys admin like myself can enjoy a few beers while setting up a cloud server, somebody who knows how this all works should be able to nap during the install.

I have to say that I am totally impressed. I had very low expectations for a zero day, low resource install. The first swig of the beer cost more money than what was paid for the hosting of my Cloud Server during the install and config (8-12 cents).

My main wish is for a 768mb (6 cent per hour) option for Windows. My image wishes include having .net 3.5 sp1 installed along with the ASP.net MVC framework.

Check out the Cloud Servers for Windows information here along with the signup page here.

Great Job Rackspace.

 


Posted by: joe.feser
Posted on: 2/10/2010 at 9:44 AM
Tags: , ,
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (427) | Post RSSRSS comment feed

I suck at blog posts

For the past two years, I have shared my thoughts on twitter thanks to @alanstevens (http://netcave.org/).

I do not consider myself a good writer but I love to share my thoughts. Twitter has allowed me to be ignore the correct direction and now I aim to fix that.

I met Alan at the 2008. The dude was on fire. He had this crazy application running on his mac (running windows) that used this thing called "Twitter".

I "copped out" of blog postings by sharing my thoughts in 140 characters or less. I have to say, in general, that it is an amazing technology.

That being said, there are too many opportunities to tweet something that may become a "misunderstanding".

My goal in 2010 is to express myself on twitter but also on blog postings to ensure that I am not misunderstood.

If I do not keep active with blog posting, I give you permission to bust my chops. If I see you in person and bust my chops, I will even buy you a beer.

Q.E.D.

Joe Feser


Posted by: joe.feser
Posted on: 2/10/2010 at 9:33 AM
Tags: ,
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (104) | Post RSSRSS comment feed

TechEd 2008 in Orlando

It has been a long time since I have made a blog entry. We just closed on our home last week in Greenville SC. I can't tell you how happy I am to not have any more 600 mile trips to Cleveland on the weekend. :) I will have more time to blog about Linq and C# by mid June.

I will be working at the NCover booth at TechEd this week. Stop by and say hi.

The booth number is 1327.


Posted by: joe.feser
Posted on: 6/2/2008 at 7:00 PM
Tags: ,
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (132) | Post RSSRSS comment feed

Linq To NCover Part 2

I can’t begin to explain how excited I get when working with Linq. Until now, there were times that you needed to write a large amount of code to do the same basic operations like determining a child object had certain properties set, or determine the count of how many times a property is set to true.

 

You would have to declare a bunch of variables like “bool found;” and then you would perform a foreach loop on your objects, checking for certain conditions. Since you did the same thing over and over, you would go and find a code block that was close and modify it to fit your needs. Now there is a much more precise, easy to read syntax to perform the basic crud tasks, and they call it Linq.

 

With the power of Linq, you no longer have to write long winded code to walk all the items in a collection only to realize two or three of the twenty items are valid. You can now filter or select the objects that you would like to work with, with straight forward query syntax.

 

NCover stores the coverage file in an xml document. In that document is all the information needed to determine what classes are in a namespace, what methods are contained in a class and so forth. You can think of these as relationships or “joins”. Once this information is loaded into memory, you could perform a foreach loop against every single class in every single namespace until you found a match or you could query the data for exactly what you are looking for.

 

A typical query against an NCover coverage file could look like this:

CodeCoverage
c = CodeCoverage.Load(file);

var
retVal =from mod in c.Modules
            from cls in mod.Classes
            from method in cls.Methods

            where method.Name == ".ctor"
            select method;

In the above example each collection is aliased with a name, which can be used in the where clause with full Intellisense. You could easily add an additional where statements to only find .ctors (constructors) in a class that start with “GCheckout”. This syntax would look like this:

CodeCoverage
c = CodeCoverage.Load(file);

var
retVal =from mod in c.Modules
            from cls in mod.Classes
            from method in cls.Methods
            //only list classes in the GCheckout Namespace
            where cls.NameSpace == "GCheckout"
            where cls.Name.StartsWith("Request")
            where method.Name == ".ctor"
            select method;

You may notice that there are multiple instances where clauses in the Linq query. You could have just as easily replaced the second where keyword with && (in c#). I personally feel it is easier to read the intention of the statement by spelling out where on every “filter”.

 

My thought was the majority of people were going to want to perform queries against the classes and methods. I rolled up all the classes and methods on the CodeCoverage class in order to remove the need to reference the relationships between the modules and the classes and the methods.


CodeCoverage c = CodeCoverage.Load(file);

var retVal =from method in c.Methods
            from param in method.Parameters
            where param.FullType == typeof(decimal).ToString()
            orderby method.Name
            select method;

Download the sample code and tell me what you think.

LinqToNCover.zip (94.82 kb)

The next article will talk about how a Linq query was used to calculate the return value of a property.

kick it on DotNetKicks.com


Posted by: joe.feser
Posted on: 2/27/2008 at 2:51 PM
Tags: , ,
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (440) | Post RSSRSS comment feed

Linq To NCover Part 1

Back in August of 2007, I was assigned an enhancement request for the .Net sample code to integrate with Google Checkout. The enhancement stated that we only had 31% code coverage and we needed to improve our code coverage to 50%. The tool used to determine this code coverage was NCover.

 

I started playing around with it and was quickly able to realize what sections of the code had never been tested. We wanted to put more faith into our customers that our implementation was production quality so I spent the next week, after work, refining the unit tests until I obtained almost 70% code coverage.

 

After using the tool for a few days I realized that there were a few patterns throughout my code: The first one was I was writing code for conditions that never had test cases;

The other one was my overloaded constructors were rarely tested - Why would I test them, they should just work right?

 

Using the NCoverExplorer tool, I quickly began to notice that my branch coverage was on the weak side. I was able to visually see the exact reason why my code was not fully tested, my unit tests were only accounting for a few of the conditions that the code segment was meant to process.

 

Once you run NCover against your code, a coverage file is generated containing a large amount of very useful information, including the assemblies, namespaces, class names, the methods of those classes and the sequence points (enterprise version only). All of this information is stored in an xml document that can be reloaded for additional analysis.

 

One day I was sitting around trying to think of a sample project to build using some of the really cool new C# 3.0 language features and I thought to myself, ‘why not create a way to query the NCover coverage file using Linq’. You have to admit, it would be really cool to be able to find all methods in your application that take in a decimal data type or find all the methods that take a parameter with the name of description.

 

So I sat down one evening and looked at how I could make the information in the coverage file friendlier to search. I did not want to take the Linq to Xml approach at this time.  I enhanced the output of xsd.exe to support generic lists instead of arrays. Then I visited the coverage data and link up all the parent child data to allow people to file all methods that are contained in a class called “foo” that take in a string as a type.

 

Imagine being able to search all your code for all methods that are not constructors, and that have at least one parameter of type decimal. This is an example of how that statement would look using Linq To NCover:


CodeCoverage
c = CodeCoverage.Load(file);

var retVal = from method in c.Methods
from param in method.Parameters
where method.Name != ".ctor"
&& param.FullType == typeof(decimal).ToString()
orderby method.Name
select method;
 


Over the next few days, I will continue to expand this article to include releasing the source code.

 

As a side note, NCover is such a great tool; I am moving to Greenville, SC next week to begin working for this amazing company.

 

More to come

kick it on DotNetKicks.com


Posted by: joe.feser
Posted on: 2/27/2008 at 5:30 AM
Tags: , , ,
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (97) | Post RSSRSS comment feed