Posts
133
Comments
328
Trackbacks
0
October 2010 Entries
Visual Studio Async CTP for the rest of us…

Today at PDC 2010, they announced Asynchronous functions in C# and VB.NET. So what exactly does that mean? I’ll give you the definition first:

Asynchronous operations are methods and other function members that may have most of their execution take place after they return. In .NET the recommended pattern for asynchronous operations is for them to return a task which represents the ongoing operation and allows waiting for its eventual outcome.

You completely understand right? Me neither! I have been reading about it and I wanted to share my understanding of it.

Imagine an application (like the Netflix example) with a lot of data. You would experience the following behavior using a synchronous application.

  • The program becomes non-responsive.
  • You cannot move, resize the window while data is loading.
  • You cannot hit the Close button to end the program while data is loading.

We can definitely do better with asynchronous application with the new tools Microsoft provided for us.

Let’s get started by installing the Visual Studio Async CTP. I will show you how to install it, walking you through the example application and then Tips/Tricks that will save you some time when getting started.

 

You can download the Visual Studio Async CTP here. The C# Language Specification for Asynchronous Functions is included in the CTP or you can download it individually as well. After you have it downloaded then double click the setup file and finish installing it. After you have installed it, it will ask for a reboot. Go ahead and reboot after its finished.

SNAGHTMLae51a5c

SNAGHTMLae6b237

SNAGHTMLaf4418b

After it is finished installing you will see the following screen below which contains all kind of goodies.

SNAGHTMLaf5220a

What we are going to do is play with the example project and convert it from a synchronous application to an asynchronous silverlight application. So click the “Find Movies” button to load the VS2010 project that we are going to work with. After VS2010 is loaded then click the “Walkthrough” link for a document Microsoft prepared to walk you through it. I am going to use the document as my guide for this tutorial.

image

After you have loaded the project and hit Build, then it will generate an error on the line below. 

 

 

 

image

Let’s fix the reference now. We want to add AsyncCtpLibrary_Silverlight.dll to this project. This file should be located in your “My Documents\Microsoft Visual Studio Async CTP\Samples” as shown below.

SNAGHTMLb05badf

After it’s added you should see it in your references:

image

Now we are going to play with two new keywords, await and async (defined by Microsoft below).

Await expressions are used to suspend the execution of an asynchronous functions until the awaited task completes.

Inside asynchronous functions await expressions can await ongoing tasks, which causes the rest of the execution of the asynchronous function to be transparently signed up as a continuation of the awaited task.

In the sample project, you are only going to change two methods, LoadMovies() and QueryMovies(). You are going to refactor these methods to LoadMoviesAsync() and QueryMoviesAsync() and prefix them with the async contextual keyword. We will use await when calling our data as shown below:

async void LoadMoviesAsync(int year)
{
    resultsPanel.Children.Clear();
    statusText.Content = "";
    var pageSize = 10;
    var imageCount = 0;
    while (true)
    {
        statusText.Content = string.Format("Searching...  {0} Titles", imageCount);
        var movies = await QueryMoviesAsync(year, imageCount, pageSize);
        if (movies.Length == 0) break;
        DisplayMovies(movies);
        imageCount += movies.Length;
    }
    statusText.Content = string.Format("{0} Titles", imageCount);
}

async Task<Movie[]> QueryMoviesAsync(int year, int first, int count)
{
    var client = new WebClient();
    var url = String.Format(query, year, first, count);

    // The following line doesn't compile. To learn how to fix it,
    // follow the walkthrough: http://go.microsoft.com/fwlink/?LinkId=203988
    string data = await client.DownloadStringTaskAsync(new Uri(url));
    
    var movies =
        from entry in XDocument.Parse(data).Descendants(xa + "entry")
        let properties = entry.Element(xm + "properties")
        select new Movie
        {
            Title = (string)entry.Element(xa + "title"),
            Url = (string)properties.Element(xd + "Url"),
            BoxArtUrl = (string)properties.Element(xd + "BoxArt").Element(xd + "LargeUrl")
        };
    return movies.ToArray();
}

If you have problems following my example then check out Page 4 of the AsyncGettingStartedWalkthrough.docx that I provided a link to earlier.

At this point, if you run the application again give it a current year (like 2007), you will notice that the program is still responsive. This is exactly why we would want to use this.

SNAGHTML1a4afe6

Some Tips/Tricks that I discovered while working with the Async CTP.

1) Notice the red font on async and await below? They have not been added to Visual Studio Intellisense but the program will still compile. 

 image

2) If you lose the start page for the CTP, its can be found at : “C:\Users\User ID\Documents\Microsoft Visual Studio Async CTP\Documentation”. You can also find all of the other documentation instead of downloading each piece separately.

SNAGHTML53b2bc

3) If building for Silverlight, then make sure you have the Silverlight 4 SDK and Silverlight 4 Tools for VS2010.

4) The .dll’s required to use this is located in your C:\Users\User ID\Documents\Microsoft Visual Studio Async CTP\Samples

SNAGHTML579b46

That is everything that I wanted to show everyone. Hopefully this clears up some of the confusion and you will understand it a little better. Thanks for reading.

----------------------------------------------------------------------------------------------------------------------------------

Note: I have included a demo of the project as well as the source code for those that need it.

----------------------------------------------------------------------------------------------------------------------------------

alt Subscribe to my feed

Posted On Thursday, October 28, 2010 9:15 PM | Feedback (3)
How to Host your Silverlight application on Amazon S3 for Free

In the past people could use services like the Microsoft Silverlight Streaming to host their Silverlight applications for free. This worked well in the past but it is now closed. What are the other alternatives? You can host your .XAP on Google App Engine but the process takes time and can be confusing. You could also find one of those free HTML host, but they could die tomorrow . This is where DropBox comes into play.

Let me go ahead and stop and say, you probably don’t want to do this for a production app. (duh) But this is a great FREE way to demo Silverlight Applications to other people. The main reason to use DropBox is because the files are hosted using Amazon S3 and its completely free and just a matter of drag-and-drop. So, let’s get started with a sample app:

Once your Silverlight application is ready to be hosted then complete the following steps:

Click on the ASP.NET Project Solution that VS/Blend generated for you. In my case this was a project that I created in Blend and opened in VS2010 Ultimate.

image

Select Build then Publish Web Site as shown below:

image

Copy to the Clipboard the Target Location and hit OK.

SNAGHTML57eba65

Paste that into explorer:

SNAGHTML57f6341

At this point, you will need an account to DropBox to continue. If you don’t have one that go to www.dropbox.com and get one.

image

After you create an account, it should have created the following folder on your desktop (WIN 7) C:\Users\User Name\Documents\My Dropbox. Navigate to that folder and look for Public as shown below:

SNAGHTML584af8c

This is where you can create any file structure that you want. I set mine up like the following and dragged/dropped the files from my VS Published folder into it.

image

Now you can log into Dropbox and get the URL where your Silverlight Application is hosted:

image

image

image

At this point, I can give out the URL Dropbox provided and people can view my Silverlight Application for free! Click here to test the application that I created for this blog post. One quick thing to note: The .ASPX file generated by VS2010 cannot be used with DropBox. That file would need to be hosted on a web server like IIS. Thanks for reading and hopefully this helped some college student or blogger get their Silverlight Application hosted for free.

alt Subscribe to my feed

 

Posted On Thursday, October 28, 2010 7:51 AM | Feedback (3)
WP7 Developer Launch Event: Question & Answer.

image

Microsoft is having a Windows Phone 7 Developer Launch right now across the USA. I attended the event in Atlanta and tweeted about it. Since the tweets, I’ve had several people ask me about it. So here goes: The unofficial Q&A to the Windows Phone 7 Developer Launch.

---------------------------------------------------------------------------------------------------------------------------------------------------

    1. What are the topics?
    2. Do you have the PowerPoint slides from the sessions?
    3. Where did you sign up?
    4. Is it worth going?
    5. What about vendors?
    6. Did they give away any free swag? Any pictures?

---------------------------------------------------------------------------------------------------------------------------------------------------

1.) Topics list is included below. That list came from here:

8:30 AM – Kick Off - Welcome

8:45 AM – Introduction to Windows Phone Development and the WP7 Platform
Meet Windows Phone 7! We’re proud to introduce the innovative Windows Phone 7 platform and explain the philosophy behind its all-new user experience design.

9:45 AM - Monetizing Your Apps with Marketplace
Windows Phone 7 will launch with a fully loaded Marketplace and the opportunity for developers to sell or distribute their applications. You’ll get all the details on how to navigate the certification process and publish your application including updates.

10:45 AM– Break

11:00 AM – Design Guidelines for Windows Phone 7
Windows Phone 7 has a brand new interface paradigm called Metro that will delight end users. We’ll cover all of the new Windows Phone 7 controls, guidelines for usage, and what you need to think about in the new multi-touch interface.

12:30 PM– Break

1:15 PM – Supercharge Your Windows Phone 7 Apps with Microsoft Silverlight
Now that you’ve learned the fundamentals, it’s time to dig a little deeper. This session will focus on building Windows Phone 7 applications with Microsoft Silverlight.

2:15 PM – Step Up Your Game with Windows Phone 7 and XNA
Microsoft XNA has been a favorite with game developers for many years. We’ll charge full-speed into XNA to outline the basic Windows Phone model, explore its core device characteristics, and review the highlights of the XNA phone framework.

3:15 PM– Break

3:30 PM – The Power of the Cloud, Exploring Windows Phone 7 Services
Get ready to build more engaging user experiences with Windows Phone 7 and several powerful cloud-based and phone-based components. Topics will include launchers and choosers; Microsoft Location Service; cameras, maps and pictures; tombstoning; Microsoft Push Notification Service; accelerometer and more.

2.) The Slides are located below. They are also on the Microsoft site here:

Session 1: Get Started! The Basics of Building Apps on the Windows Phone 7 Platform

Session 2: From Idea to Interactivity: Design Guidelines for Windows Phone 7

Session 3: Supercharge Your Windows Phone 7 Apps with Microsoft Silverlight

Session 4: Step Up Your Game with Windows Phone 7 and XNA

Session 5: Monetizing Your Apps with Marketplace

Session 6: The Power of the Cloud: Exploring Windows Phone 7 Services

3.) I signed up for the event here. Plenty of sessions are still available.

4.) For the first day: It is worth going if you have beginner to intermediate knowledge of the WP7 platform. The second day is more hands-on and would benefit everyone developing in WP7.

5.) I did not see ANY vendors. The entire event was Microsoft products. They had an Xbox 360 with Halo Reach, Zune Pass, Hands-on WP7 booth and a WP7 Photo booth.

6.) Yes, the free swag is located below. I am now a SuperNerd for posting pictures of this.

(sorry for the copyright, but I’ve had people stealing images/screenshots from my site.All images will have this from now on.)

IMG_0150 IMG_0151 IMG_0152

IMG_0155 IMG_0156 IMG_0157 IMG_0158 IMG_0159   IMG_0162

IMG_0160 IMG_0161

alt Subscribe to my feed

Posted On Sunday, October 24, 2010 7:20 AM | Feedback (0)
15 Things I’ve discovered about Silverlight.

I love Silverlight and have written / talked about it a lot. I can’t help but notice that a lot of people are new to Silverlight or may have played with it a few times. Well this post is for you. It is a list of 15 things that I’ve discovered since I started developing for Silverlight. If you are a full-time Silverlight developer than I would hope you know most of these. I promise not to scare off anyone with talks of MVVM, Prism or MEF.

1) The line highlighted below represents the MIME type and it is not the runtime version of Silverlight. Many developers are at first confused about this because they think it is referring to the Silverlight version (example: Silverlight 4).  

 HTML/ASPX markup of a Silverlight Hosted Application

image

 

2) You can’t use .GIF images with Silverlight. Use .PNG files if you need images in a Silverlight application. If you must use .gif’s then you should consider using the .NET Image Tools Library for Silverlight. Many people are also building web services that will convert the .gif files to .PNG. I would recommend converting the images to .PNG with a tool like Paint.NET

image61

 

3) If a user does not have the Silverlight 4 plug-in installed, users are prompted to download it by the following line of code (found inside the .ASPX or HTML file):

image_thumb51

If you change the link to :

<a href="http://go.microsoft.com/fwlink/?LinkID=149156" style="text-decoration: none;">
    <img src="http://go.microsoft.com/fwlink/?LinkID=161376" alt="Get Microsoft Silverlight" style="border-style: none"/>
</a>

Then it will always download the latest version of the Silverlight runtime. New versions are backwards compatible with old versions of the runtime. 

4) All data access in Silverlight is asynchronous. The example below will not work:

MyOldWebService srv = new MyOldWebService();
string strReturn = srv.GetSomeValue();
txtValue.Text = strReturn;

This is how we would call a WCF service in Silverlight (for example after the InitializeComponent Method):

public MainPage()
{
    InitializeComponent();
    Service1Client client = new Service1Client();
    client.DoWorkCompleted += new EventHandler<DoWorkCompletedEventArgs>(client_DoWorkCompleted);
    client.DoWorkAsync();
}

void client_DoWorkCompleted(object sender, DoWorkCompletedEventArgs e)
{
    MessageBox.Show(e.Result);
}

5) Use templates / themes whenever necessary. Microsoft has provided 4 themes that will give your application a custom look. You can also use the built-in Navigation template included in VS2010 or the ones included in Blend 4 (which includes MVVM template). In other words, don’t start a project completely from scratch unless you need too.

image8

image9

6) Spend the time to learn Blend 4. Sure you can write all of your XAML (markup) from hand but why? Blend 4 was created to assist with creating applications for Silverlight, WPF and Windows Phone 7. I cannot imagine creating Storyboards and animations by hand. It has a learning curve but it is worth it in the end. 

image13

7) Make use of the Silverlight Toolkit available on CodePlex.

The Silverlight Toolkit is a collection of Silverlight controls, components and utilities made available outside the normal Silverlight release cycle. A product of the Microsoft Silverlight product team, the Silverlight Toolkit adds new functionality quickly for designers and developers, and provides the community an efficient way to help shape product development by contributing ideas and bug reports. It includes full open source code, unit tests, samples and documentation for over 26 new controls covering charting, styling, layout, and user input. – Taken from the codeplex site.

image_thumb24

 

8) Be aware that your Silverlight code can be viewed by anyone using tools like Silverlight Spy/.NET Reflector. If your application is on the internet and not a internal application then you better obfuscate it. Its better to have some security than none. This also works the other way around and you can see how someone built a Silverlight application.

image17

 

9) The .XAP file that your Silverlight project creates is simply a .zip file with a different extension. You can use an external program like 7zip to squeeze a smaller file size than the one included with VS2010. It also pays to open up a .XAP file and examine whets included with your project.

image25

10) If a file is not necessary for every user then do not include it in the .XAP file. I’ve heard every argument against this saying,” bandwidth is cheap.”  However, this method really gets expensive when its more than 50-100 images or other binaries. I only include the files absolutely necessary for every user of my application.

11) You can host a Silverlight application in other servers. You do not have to use IIS. Simply setup the MIME type on your WebServer and the Silverlight application will work on the client as long as the Silverlight run-time is installed.

image26

12) The community rocks for Silverlight. There is a lot of ways to learn more about it. I’d start with the official Silverlight site, then check out the official forums. I’d also visit Silverlight Cream and Alvin’s Ashcraft’s Morning Dew daily. To finish up, I’d watch every episode of John Papa’s Silverlight TV.

image30

13) Once you learn XAML (the markup for Silverlight) you can use those skills to produce applications for the following platforms: Silverlight (duh), WPF, Windows Phone 7, Lightswitch and Surface.

image 

14) Silverlight works with all the major browsers (Google Chrome 6, IE, Firefox and Safari) and Operating Systems (such as Wiindows and Mac OS).  It even includes support for Linux through the Moonlight project.

image56

15) Users get the same experience no matter what browser they are running. Remember when one webpage worked fine in Firefox but not in IE6. Since Silverlight is a plug-in everyone gets the same experience.

“SAME EXPERIENCE EVERYWHERE”

Thank you for reading my blog post, as always feel free to subscribe to my feed or add me to twitter.

alt Subscribe to my feed

Posted On Saturday, October 23, 2010 9:10 AM | Feedback (8)
Book Review: Foundation Expression Blend 4 by Victor Gaudioso

image

Purchase at Amazon

I wanted to talk for a minute about the author, Victor Gaudioso. I met Victor on Twitter earlier this year and ever since meeting him, I’ve seen how involved he is in the Silverlight/Blend community. He has always been willing to help or share knowledge of Blend with anyone – including me. I recently read a blog post about someone that went to one of his book signings and did not win anything. Victor found out that this person was disappointed and sent him a free year subscription to MSDN Ultimate. That story blew me away as I started to see how benevolent Victor is. With that said, hopefully you will realize that this book was written by someone passionate about the technology – not someone who wanted to make a buck.

The first few chapters walks you through setting your development environment to begin developing Silverlight applications with Blend/VS2010. He walks you through downloading the tools manually instead of relying on the Web Platform Installer. This definitely helps the user understand each component. By the end of the first chapter you have been inside of Blend 4, VS2010 and C# code. The next few chapters he digs deeper into Blend 4 with a complete description of the Blend 4 toolbar, objects and timeline panel to the properties and resource panel. One of the most important things to grasp is the Blend 4 Toolbar and Victor lays it out nicely. He also spends a fair amount of time going over the Layout controls such as the Grid, Canvas and StackPanel.

The book goes into the most important fundamental concepts of OOP programming (encapsulation, polymorphism and inheritance). He also devotes time to classes and interfaces. I am glad he spends time going over this as the book targets a wide audience and even if your a designer it helps to know the basics.

This book is a hands on book, so you will actually spend a lot of time inside Blend/VS while reading the book. You will build many applications from scratch like a newton cradle, media player and webcam applications.  Victor also walks you though creating a custom behavior that shows just how easy it is to add custom functionality into your Silverlight Applications.

He also has a chapter dedicated to the widely talked about MVVM pattern. The book finishes up with the new features of Silverlight 4. He walks you though creating an Out-of Browser application with elevated trust to making Silverlight talk to an Office Application. He also goes over the new printing features, the clipboard and Network authentication.

Overall, it is a great book that covers a lot of material. I am happy that he dedicated a chapter to MVVM and SketchFlow as new developers need to obtain an understanding of both of those. I thought it was a nice touch that after each chapter he gives you several links to free videos that will help strengthen your knowledge of the topic material. He also provides his personal email address for readers to contact him directly. That’s a lot of extra support to help you though any parts that may confuse you. I definitely recommend you read this book and give Victor a shout on Twitter.

alt Subscribe to my feed

Posted On Saturday, October 16, 2010 11:01 AM | Feedback (1)
Profile your Windows Phone 7 Application for Free

In the past I’ve used things like ANTS performance profiler to identify performance bottlenecks and to optimize my applications performance. It was always a great way to give an application that final boost that makes it run faster/slicker than my competitor. Now that I’m developing for the WP7 series, I wanted a way to profile those applications as well. I noticed that EQATEC was offering WP7 developers a way to profile their WP7 applications for free and I jumped on the chance. The best thing about this profiler is that you can profile on the actual hardware as well as the emulator. The other advantage is the valuable information it provides and of course the price (free).

Please note that with the FREE version you can only profile 1 WP7 DLL. If you have multiple DLL’s you can buy the full version.

To get started, head over to www.eqatec.com/Profiler and click on the Download EQATEC Profiler Link.

image

You will be asked to provide just a few pieces of information (name, email, company name). After that check your inbox and you will find the link to download it.

Click Next through the setup screens and then launch the profiler.

SNAGHTML423631b

SNAGHTML423ee1b

SNAGHTML424980f

SNAGHTML42544b2

The first screen that appears is actually asking for a folder to the browser of your assembly. I navigated to my {Application Name}\Bin\Debug. This folder contains the .dll of my WP7 application. After you have loaded your application, you will want to click Build. This will provide some information about your project as well as attach the profiler to the assembly.

 

 

 

SNAGHTML43abfdb

The next step is “Run App”, this will give you the option to profile in the emulator or the actual hardware.

 

SNAGHTML43b47a0

Notice that we are now on the second tab called “Run”. In this view you can take snapshots of your application at any time. These snapshots will be used for analysis later on. You will be able to view the details of the snapshot as well as compare different snapshots.

SNAGHTML43fad16

I have been lucky enough to receive the actual WP7 hardware to test on. Here is an example of sending it to the actual Windows Phone 7 Hardware. Nothing is different from the previous screens. At this point, the application will appear on your phone and you can still take snapshots.

SNAGHTML44f7600

The next screen is the “View” Screen. This is where the snapshots you took earlier (from the emulator or hardware) are used. This provides a “Summary of method call times”. I really like how simple the detail view is. “Was called by this method…Time spent inside the method itself….Time spent calling this method.

See the screenshot below:

SNAGHTML44212cb

Here is another example of the time spent inside one of my RssClient.LoadItems method. (This app simply consumes a Feedburner feed).

image

The last and final tab is the “Compare” tab. This tab allows you to compare 2 snapshots and show performance gains.

SNAGHTML4481e5f

 

The EQATEC profile for the Windows Phone 7 is a great utility that every developer should be using. It is simple to use and supports both emulator/hardware profiling. Even if you are developing free applications, its still worth 15 minutes to see if you can improve performance in your app.

A few other Windows Phone 7 Articles that I have written:

From start to finish with the final version of Visual Studio Tools for Windows Phone 7
Hands-on : Windows Phone 7 Review
Deploying your Windows Phone 7 Application to the actual hardware.

Free Windows Phone 7 Training (I will be at the one in Atlanta, Georgia.)

2 Day Event – Click here to Register.

alt Subscribe to my feed

Posted On Saturday, October 09, 2010 8:16 AM | Feedback (1)
Deploying your Windows Phone 7 Application to the actual hardware.

I’ve blogged about the tools and have played with the hardware, now its time to put an application on the actual Windows Phone 7 hardware. I will guide you through the entire process step-by-step. Please note that I have an early version of the phone and had to get a Connect Login to download Zune 4.7. If you are reading this after the phone has launched then you can probably just go to the Zune web page and download it directly. You will also want to skip down until the next section that starts the Zune install.

For those using Microsoft Connect, the first thing that you will need to do is get your Microsoft representative to grant you a Connect login  Note: You have to be nominated by someone at Microsoft in order to join the program/get a phone.

You should read over the documentation, but I’m sure you will head straight for the downloads sections.

You will want to download the latest WP7 Technical Preview Zune Software. In my case it was the 9/30/10 release.

After downloading the software (usually around 500mb), extract it and you will find the following file structure:

image

 

Double click on the StartZune.exe and you will notice Zune v4.7 is going to be installed. *Please note that in order for your Windows Phone 7 to be recognized, you will have to use this software*. If you don’t it will say, “USB unrecognized” in the device manager. I foolishly tried to get this to work with Zune v4.2 for about 2 hours.

image

SNAGHTMLd9e106b

image

After you click Launch, it searches for drivers for the Phone. Be patient and if it doesn’t find the device then unplug the usb cord and try again.

 

SNAGHTMLaf121

SNAGHTMLb756d

This is the main screen that you will see after the Zune software is installed and your phone has loaded the proper device drivers.

image

image

image

 

 

 

 

At this point, you are ready to start publishing your custom app to the phone. You will need to click Start->All Programs and look for Windows Phone Developer Registration.

image

Make sure you have the USB plugged into the phone and you are at the home screen.

 

SNAGHTML7a30e1

As you can tell the program requires your Windows Live ID. Use the same one that your developer.windowsphone.com is linked too.

SNAGHTML7b1e2c

Notice that you can Unregister the device. I believe that Microsoft only allows 3 devices per live account. If you have a demo unit, make sure that you unregister it before giving it back.

Open Visual Studio 2010 and load your existing Windows Phone 7 project. Normally the box highlighted in Red below would be set to Windows Phone 7 Emulator. You can now switch it to Windows Phone 7 Device.

image

Before you attempt to deploy your application, you will need to be on the home screen. You can change the time that the phone locks by going to Settings->Lock & Wallpaper. I would recommend setting it to “never”. After you are finished developing switch it back to whatever you want. If your phone is locked Visual Studio you will get the error message below:

image

To deploy your application to the phone, click Build and then Deploy <ApplicationName>. Make sure that you have the Zune software installed and running.

image

 

You will need to slide over to Applications and look for whatever you named your application. Touch it and it should run.

image

I really can’t explain how awesome it feels to see your application running on the Windows Phone 7 hardware. The emulator is great for testing but to see how your app performs you will really need the hardware. The process of deploying your app is very simple and if you love Silverlight then you are already ready to start developing for the phone. That is the entire process, I hope you enjoyed it. I’ve included some links below and you should really register for the free 2 day event by Microsoft.

My other Windows Phone 7 Articles:

From start to finish with the final version of Visual Studio Tools for Windows Phone 7
Hands-on : Windows Phone 7 Review

Free Windows Phone 7 Training (I will be at the one in Atlanta)

2 Day Event – Click here to Register.

Feel free to subscribe to my feed for more articles like this one. You may also want to follow me on Twitter.

Posted On Saturday, October 02, 2010 8:43 AM | Feedback (3)
Tag Cloud