So you want to be a .net developer? Web, Backend, Middle Tier? You’re asking yourself where do I start?

So occasionally I get asked from friends and friends of friends and friends of friends of friends, I want to be a <insert, programmer, web developer, build websites, etc>.  How do I get started?

This is a loaded question. There so many directions to go and languages to choose from and then there is the college route, certification route or both. Then you have the Unix side of the house, the Microsoft side, now the all popular apple and android sides. Web platform, OS platform or mobile platform. Then you have to figure out where you like to work the most; on the front-end UI, back-end logic or maybe the database layer.

So for this article I’m going to with a bunch of assumptions.

  • You want to build web applications (You can apply this to OS applications, website and mobile later)
  • I’m assuming college doesn’t matter and is not needed (though a Computer Science degree would be awesome)
  • You aren’t doing it for the money (more on this later)
  • You’re following the Microsoft track using .NET (though the same techniques can be applied to other languages and application types, got to start somewhere)


You are not in it for the money:

This is my biggest pet peeve. If you are trying to be a programmer because you think they get paid a lot. Stop right now and go find something else to do.  Do what you like not because it pays a lot. Those type of programmers are the worst I ever meet. You go to work and do your job and try to get all your learning from on the job training. You go home and don’t give a crap about your job or try and don’t try to learn and enhance your skill sets at home.  You drain the life out of all the other programmers at work. I’ve seen this time and time again.

If you want to be a good programmer, or awesome, programming needs to be your hobby. You need to go home after work and continue learning.  You have to have a desire to be on the computer; programming your own projects for fun to learn new techniques after work. At home at night on the weekends. In life you should do what makes you happy and what you enjoy. Not because you think you can make a lot of money. If you don’t enjoy programming, don’t do it. I can go on about this so I’ll stop here.


What to Learn:

  • The Presentation Layer (or what we can the “Front-End” work): This is the visual aspects of your application and interactions. What it looks like how it functions.
    • HTML – Must Learn
    • CSS – You can get away with it if you don’t like front-end work but you should learn the basics
    • Javascript – You can get away with it if you don’t like front-end but you should learn the basics
    • jQuery – This heavenly needed for good interactions on your web application but you could get away with this if you don’t like the front-end. However, you should have a basic understanding.

Training Suggestions: On the web. Start with W3Schools. Great site, simple and straight forward. Soak in all the information you need. Always a good resource.

  1. W3Schools – For each section complete the “Basic” section. HTML, HTML5, CSS, CSS3, HTML DOM, JavasScript, jQuery,
  • The Business or Middle Tier Layer (or what we call the “Back-End”): This is the logic and heart of your application. Taking the information provided in the Presentation Layer and doing something with it. Calculations, data manipulation, saving it to the database etc..
    • .NET C# (or VB.NET but C# is more popular now a days and usually pays more (being that you are doing this even as a hobby, then yes pay is important and a side-benefit.))
    • ASP.NET MVC3 (this is newer then ASP.NET WebForms which is just as popular, but MVC is the future)

Training Suggestions: On the web and study books for certifications. Some people knock certifications, usually the ones that don’t have one. Certifications won’t make you great, only experience will do that. However, Certifications will teach you everything you should know and aspects that others don’t know because they don’t study for the certs. Small things here and there that add up. As well as showing to an employer that you might not have experience but you definitely can program and know the basics if you have your certs. More about certs in an updated post. Old post here.

  1. ASP.NET is a great place to get started. Specifically ASP.NET / MV3 site. Go through Chapters 1 through 12.
  2. C# Station – I’d stay maybe go to chapter 8 or 10.
  • The Database Tier (Also, part of the “Back-End”): This is storing data. Manipulating data. How to retrieve the data and run reports or searches.
    • First learn some SQL basics from W3Schools. Go through all the SQL Basic chapters.
    • Optional: Then you can learn say T-SQL which is Microsoft language of SQL built off of basic SQL. However, you don’t need this yet and learn as you go after W3Schools.

This is enough to get you started. Learn all the basics then figure out where you like to play the most.

  • Advanced Items: Other things you should know.

I have Returned

It has been while since my last post.  A long while.  A lot has changed over the past two years. Not just in my career but also in my personal life.  I apologize for the delay in the time span since my previous submission.  I’ve never talked about my personal life much before so I probably won’t start now either.

I used to post code snippets or solutions to problems I’ve had; sample apps of something I was experimenting with.  However, I haven’t developed full-time for over a year now. My career shifted when I was given the sole task to open a new development shop by my superiors. As well as build a new team and implement my dream child project that I had presented to the power above in the past.  Tasked with finding real estate, opening an office, hiring a team of 14 and managing a new product re-write, I’ve had little room for all else.  With deadlines to meet, finding ways to encourage team members, striving for perfection, new innovations and all the while learning as I go, I had no time to handle the small things I used to do like post on my personal site.

Now that we’ve settled into a routine of two week sprints and things are slowly starting to work together like a well oiled machine, I believe I will have time to post again.  Though my direction may shift slightly to things more related to project management, scum or agile comments and just about software development as a whole.  When the time permits I will dive back into development but only at a part-time rate.  There’s a lot of new technology out there, lots of ways to manage a team and I hope to continue forward with my thoughts and ideas for any who care to listen.

I have returned.

Delete All Files & Folders from Parent that are older then X Days


Simple method here that checks the Creation Time and deletes all files and folders from the parent, recursively that are older then the given number of days.

''' <summary>
''' Given the Root Folder, deletes all files and folders older then X days, recursively.
''' </summary>
''' <param name="RootFolder">DirectoryInfo Object of Root Folder to Delete Files and Subfolders From</param>
''' <param name="DeleteOlderThenXDays">Delete files/folders that are older then this many number of days</param>
''' <remarks></remarks>
Public Sub DeleteAllFilesAndFoldersFromRootFolder(ByVal RootFolder As DirectoryInfo, ByVal DeleteOlderThenXDays As Integer)
DeleteFilesInThisFolder(RootFolder, DeleteOlderThenXDays)
For Each SubFolder As DirectoryInfo In RootFolder.GetDirectories()
DeleteAllFilesAndFoldersFromRootFolder(SubFolder, DeleteOlderThenXDays)
If SubFolder.GetFiles.Count = 0 AndAlso SubFolder.GetDirectories.Count = 0 Then
If SubFolder.CreationTime < (DateAdd(DateInterval.Day, -DeleteOlderThenXDays, Today())) Then SubFolder.Delete()
End If
Catch ex As Exception
Throw ex
End Try
End Sub

''' <summary>
''' Deletes all Files in a Folder
''' </summary>
''' <param name="Folder">DirectoryInfo Object of Folder to delete files from.</param>
''' <param name="DeleteOlderThenXDays">Delete files that are older then this many number of days</param>
''' <remarks></remarks>
Private Sub DeleteFilesInThisFolder(ByVal Folder As DirectoryInfo, ByVal DeleteOlderThenXDays As Integer)
For Each ExistingFile As FileInfo In Folder.GetFiles()
If ExistingFile.CreationTime < (DateAdd(DateInterval.Day, -DeleteOlderThenXDays, Today())) Then
End If
Catch ex As Exception
Throw ex
End Try
End Sub

Need the C# Version? Use this.

On Authentication Timeout - Save Web Form Contents

I was working on a project recently where I had to figure out how to persist user data in a web form after their Forms Authentication session as expired.

So I was thinking of ways to do this as I searched the know all Google. Walla!  Someone's already had to do this, why invent the wheel.  Found a post by Peter Ravnholt, on the MSDN site. 

He Implements the HttpModule and handles saving the form state on FormAuthentication events. Really neat idea.  I tried is code, now keep in mind I'm doing this for Visual Basic, so I manually converted it all, but I couldn't get it work. Maybe I was converting something wrong.  I was getting "The state information is invalid for this page and might be corrupted."

Well RichardDeeming in the discussions for this post had an updated version that worked a little better then the original.  Thanks to his code, I converted it to VB.Net and walla!  My pages now handle web content.

I'll post the converted VB version below. 

Thanks Richard and Peter if you ever find your names on here via Google :p

This is my VB version o the FormSaverHttpModule with Richard's changes.  I've modified it a bit since but this works.

Imports Microsoft.VisualBasic
Imports System.Security.Principal
Imports System.IO
Imports System.Web.Configuration
Imports System.Security.Permissions
''' <summary>
''' FormSaverModule Version 1.0
''' -Mastro:  Not my orignal idea, found this in use out on MSDN site. I manually converted it to VB
''' as the orignaly is in C#. No comments, so I'll add my own.
''' This class will handle every new request coming in and PostMapRequest. 
''' If user has Forms Authentication has timed out, class will save the state of the form into cache
''' with a Unique ID of that state to the user's cookie. 
''' When user logs back in, this class will check if they have the cookie set, if so it will then 
''' load that state back to their page and load the webcontent by generating a runtime transit page that
''' post submits the data back to the destination page and pre-fills in the values.
''' </summary>
''' <remarks></remarks>
<AspNetHostingPermission(SecurityAction.LinkDemand, Level:=System.Web.AspNetHostingPermissionLevel.Minimal)> _
<AspNetHostingPermission(SecurityAction.InheritanceDemand, Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class FormSaverHTTPModule
    Implements IHttpModule
#Region "Private Variables"
    Private Const CookieName As String = "#FormStateSaverModule/FormRestoreId"
    Private Shared ReadOnly StateCacheDuration As TimeSpan = TimeSpan.FromMinutes(40)
    Private Shared ReadOnly _AnonymousUser As IPrincipal = New GenericPrincipal(New GenericIdentity(String.Empty), Nothing)
    Private _FormsCookieName As String
    Private _LoginUrl As String
#End Region
    ''' <summary>
    ''' This class is required from the IHttpModule contract
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Dispose() Implements System.Web.IHttpModule.Dispose
    End Sub
    ''' <summary>
    ''' This is the first method to run on application start
    ''' </summary>
    ''' <param name="Context"></param>
    ''' <remarks></remarks>
    Public Sub IHttpModuleInit(ByVal Context As HttpApplication) Implements System.Web.IHttpModule.Init
        Me.Init(Context) 'Lets call our Init and send the Application state along with it
    End Sub
    ''' <summary>
    ''' We call this Init Method from the IHttpModuleInit and send it the Application State
    ''' and then turn on Events to capture
    ''' </summary>
    ''' <param name="Context">Hold's the Application State</param>
    ''' <remarks></remarks>
    Protected Overridable Sub Init(ByVal Context As HttpApplication)
        If Context Is Nothing Then
            Throw New ArgumentNullException("context")
        End If
        _LoginUrl = FormsAuthentication.LoginUrl 'Store the Login page name
        _FormsCookieName = FormsAuthentication.FormsCookieName 'Store the Forms Authentication Cookie Name
        If Not String.IsNullOrEmpty(_LoginUrl) Then 'If LoginUrl Exists....
            Dim index As Integer = _LoginUrl.IndexOf("?"c) 'Search for a ? for query string
            If -1 <> index Then 'If ? was found....
                _LoginUrl = _LoginUrl.Substring(0, index) 'Grab the first part of the URL before the ? and set LoginUrl
            End If
        End If
        'Add Handlers that now raise events on every Application BeginRequest... and Application PostMapRequest
        AddHandler Context.BeginRequest, New EventHandler(AddressOf Application_BeginRequest)
        AddHandler Context.PostMapRequestHandler, New EventHandler(AddressOf Application_PostMapRequestHandler)
    End Sub
    ''' <summary>
    ''' A Delegate receiver method for the Application.BeginRequest Event
    ''' </summary>
    ''' <param name="sender">Object</param>
    ''' <param name="e">EventArgs</param>
    ''' <remarks></remarks>
    Protected Overridable Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
        Dim application As HttpApplication = DirectCast(sender, HttpApplication)
        Dim context As HttpContext = application.Context
        Dim cookie As HttpCookie = context.Request.Cookies(CookieName)
        If cookie IsNot Nothing AndAlso Not String.IsNullOrEmpty(cookie.Value) Then 'If Cookie exist and has value....
            Dim state As FormState = FormState.Load(cookie.Value) 'Lets try and load the state via the CookieID
            'Lets see if the State is valid now that it's loaded and it's originaly location matches where the user is trying to go
            If state IsNot Nothing AndAlso String.Equals(state.Path, context.Request.Path, StringComparison.OrdinalIgnoreCase) Then
                FormState.SetCurrent(context, state) 'State is valid and it's for this request so lets create the object of the state to be used later by Application_PostMapRequestHandler
            End If
        End If
        If IsPost(context) AndAlso Not IsAccessingLoginPage(context, _LoginUrl) Then 'If user is doing a Post back and it's not to the login page...
            cookie = context.Request.Cookies(_FormsCookieName) 'Load Authenication cookie
            If cookie IsNot Nothing Then
                    Dim ticket As FormsAuthenticationTicket = FormsAuthentication.Decrypt(cookie.Value)
                    If ticket IsNot Nothing AndAlso ticket.Expired AndAlso Not HasAnonymousAccess(context) Then 'If the user has expired.....
                        Dim state As FormState = FormState.Create(context) 'Store current state into cache
                        If state IsNot Nothing Then
                            cookie = New HttpCookie(CookieName, state.StateId) 'save cache ID into user's cookie
                            cookie.HttpOnly = True
                        End If
                    End If
                Catch generatedExceptionName As ArgumentException
                End Try
            End If
        End If
    End Sub
    Protected Overridable Sub Application_PostMapRequestHandler(ByVal sender As Object, ByVal e As EventArgs)
        Dim application As HttpApplication = DirectCast(sender, HttpApplication)
        Dim context As HttpContext = application.Context
        Dim state As FormState = FormState.GetCurrent(context) 'Get the context from the cache if it's there
        If state IsNot Nothing AndAlso state.Form IsNot Nothing AndAlso 0 <> state.Form.Count Then 'if the context was there....
            context.Handler = New FormStateSaverHandler(state) 'Then load the runtime transit page and post it back to destination page
        End If
    End Sub
    ''' <summary>
    ''' Returns Boolean if request is a Post request to page.
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Shared Function IsPost(ByVal context As HttpContext) As Boolean
        Return String.Equals("POST", context.Request.HttpMethod, StringComparison.OrdinalIgnoreCase)
    End Function
    ''' <summary>
    ''' Return Boolean after it checks to see if content matches the LoginURL. Basically is the user 
    ''' going to the login page.
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Shared Function IsAccessingLoginPage(ByVal context As HttpContext, ByVal loginUrl As String) As Boolean
        Dim result As Boolean = False
        If Not String.IsNullOrEmpty(loginUrl) Then
            If String.Equals(context.Request.Path, loginUrl, StringComparison.OrdinalIgnoreCase) Then
                result = True
            ElseIf -1 <> loginUrl.IndexOf("%"c) Then
                Dim temp As String = HttpUtility.UrlDecode(loginUrl)
                If String.Equals(context.Request.Path, temp, StringComparison.OrdinalIgnoreCase) Then
                    result = True
                    temp = HttpUtility.UrlDecode(loginUrl, context.Request.ContentEncoding)
                    If String.Equals(context.Request.Path, temp, StringComparison.OrdinalIgnoreCase) Then
                        result = True
                    End If
                End If
            End If
        End If
        Return result
    End Function
    ''' <summary>
    ''' Returns Boolean if the destination URL in question has anonymouse access.
    ''' </summary>
    ''' <param name="context"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Protected Shared Function HasAnonymousAccess(ByVal context As HttpContext) As Boolean
        Return UrlAuthorizationModule.CheckUrlAccessForPrincipal(context.Request.Path, _AnonymousUser, context.Request.HttpMethod)
    End Function
    ''' <summary>
    ''' This class becomes the actual FormState the user was on and is Serialzied and then saved 
    ''' </summary>
    ''' <remarks></remarks>
    <Serializable()> _
    Protected NotInheritable Class FormState
        Private Shared ReadOnly FormRestoreKey As New Object()
        Private ReadOnly _id As String
        Private ReadOnly _path As String
        Private ReadOnly _form As NameValueCollection
        Private Sub New(ByVal id As String, ByVal path As String, ByVal form As NameValueCollection)
            _id = id
            _path = path
            _form = form
        End Sub
        Public ReadOnly Property StateId() As String
                Return _id
            End Get
        End Property
        Public ReadOnly Property Path() As String
                Return _path
            End Get
        End Property
        Public ReadOnly Property Form() As NameValueCollection
                Return _form
            End Get
        End Property
        ''' <summary>
        ''' Loads the state that was set by Setcurrent and tries to return it as a FormState object.
        ''' Returns nothing if it's invalid.
        ''' </summary>
        ''' <param name="context"></param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Shared Function GetCurrent(ByVal context As HttpContext) As FormState
            If context Is Nothing Then
                Return Nothing
            End If
            Return TryCast(context.Items(FormRestoreKey), FormState)
        End Function
        ''' <summary>
        ''' Takes the state sent and creates a valid formstate object
        ''' </summary>
        ''' <param name="context"></param>
        ''' <param name="state"></param>
        ''' <remarks></remarks>
        Public Shared Sub SetCurrent(ByVal context As HttpContext, ByVal state As FormState)
            If context IsNot Nothing Then
                context.Items(FormRestoreKey) = state
            End If
        End Sub
        ''' <summary>
        ''' Takes the Context of the current Request Form and stores it into Cache with a Unique ID
        ''' </summary>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Shared Function Create(ByVal context As HttpContext) As FormState
            Dim result As FormState = Nothing
            If context IsNot Nothing AndAlso context.Request.Form IsNot Nothing AndAlso 0 <> context.Request.Form.Count Then
                Dim id As String = Guid.NewGuid().ToString()
                result = New FormState(id, context.Request.Path, context.Request.Form)
                HttpRuntime.Cache.Add("FormStateSaver_" + id, result, Nothing, Cache.NoAbsoluteExpiration, StateCacheDuration, CacheItemPriority.Normal, _
            End If
            Return result
        End Function
        ''' <summary>
        ''' Loads the Context stored in Cache using the Unique ID
        ''' </summary>
        ''' <param name="id">Unique GUID</param>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Shared Function Load(ByVal id As String) As FormState
            Dim result As FormState = Nothing
            If Not String.IsNullOrEmpty(id) Then
                result = TryCast(HttpRuntime.Cache("FormStateSaver_" + id), FormState)
            End If
            Return result
        End Function
        ''' <summary>
        ''' Deletes the stored Context from Cache
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub Delete()
            HttpRuntime.Cache.Remove("FormStateSaver_" + _id)
        End Sub
    End Class
    ''' <summary>
    ''' This class is responsible for generating the Transit page on the fly. 
    ''' Basically a page that loads all the values then submits them back to the destination
    ''' page with the previous viewstate settings so that the form reloads the controls to where
    ''' they were prior.
    ''' This page quickly shows when the user is logging back in and loading a previous web form.
    ''' </summary>
    ''' <remarks></remarks>
    Protected Class FormStateSaverHandler
        Implements IHttpHandler
        Private ReadOnly _state As FormState
        Public Sub New(ByVal state As FormState)
            _state = state
        End Sub
        Protected ReadOnly Property FormState() As FormState
                Return _state
            End Get
        End Property
        Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
                Return False
            End Get
        End Property
        Public Overridable Sub ProcessRequest(ByVal context As HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
                Using writer As HtmlTextWriter = CreateHtmlTextWriter(context.Response.Output, context.Request.Browser)
                End Using
            End Try
        End Sub
        Protected Overridable Sub Render(ByVal writer As HtmlTextWriter)
            writer.Write("Restoring form")
            ' TITLE 
            ' HEAD 
            writer.AddAttribute("onload", "document.forms[0].submit();")
            writer.AddAttribute("method", "post")
            Dim form As NameValueCollection = Me.FormState.Form
            For Each name As String In form.Keys
                RenderHiddenField(writer, name, form(name))
            'writer.AddAttribute(HtmlTextWriterAttribute.Align, "center")
            'writer.Write("You should be redirected in a moment.")
            'writer.Write("If nothing happens, please click ")
            'RenderSubmitButton(writer, "Submit")
            ' P 
            ' FORM 
            ' BODY 
            ' HTML 
        End Sub
        Protected Shared Sub RenderHiddenField(ByVal writer As HtmlTextWriter, ByVal name As String, ByVal value As String)
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "hidden")
            writer.AddAttribute(HtmlTextWriterAttribute.Name, name)
            writer.AddAttribute(HtmlTextWriterAttribute.Value, value)
            ' INPUT 
        End Sub
        Protected Shared Sub RenderSubmitButton(ByVal writer As HtmlTextWriter, ByVal text As String)
            writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit")
            writer.AddAttribute(HtmlTextWriterAttribute.Value, text)
            ' INPUT 
        End Sub
        Protected Shared Function CreateHtmlTextWriter(ByVal writer As TextWriter, ByVal browser As HttpCapabilitiesBase) As HtmlTextWriter
            If browser Is Nothing Then
                Return New HtmlTextWriter(writer)
            End If
            Return browser.CreateHtmlTextWriter(writer)
        End Function
    End Class
End Class


Update: 6/10/10

Here is the original post, and it was moved to codeplex here.  Thanks Peter Revnholt!


I haven’t had the privilege yet of going to a MIX conference.  My eyes weep.  However, I applaud them for recording the sessions and putting them online.  Just seeing some of these, makes me want to go to a Mix Conference even more.

So for those of you like me, or for those of you that did go… I want to just bring to attention that the recordings are online at

There’s a lot here. Something for everyone. Mainly geared towards all .NET and Microsoft but there still .NET development with Ruby and Python and business development related videos. You have Silverlight, Web Services, Windows 7 Phone development, RIA, Sketchflow, Design for Developers, User Experience, Software Entrepreneurs, Social Networking Development, Windows Messenger Live Services and more..

Check out the list of these videos.

MIX 10 Conference Videos


Changing our Game – an Introduction to Windows Phone 7 Series
Joe Belfiore

Authoring for Windows Phone, Silverlight 4 and WPF 4 with Expression Blend
Christian Schormann, Peter Blois

Prototyping Rich Microsoft Silverlight Applications with Expression SketchFlow
Chris Bernard

Designing Bing: Heart and Science
Paul Ray

Microsoft Silverlight 4 Overview: What's in Store for Silverlight 4?
Keith Smith

Microsoft Silverlight 4 Business Applications
Scott Morrison

Developing with WCF RIA Services Quickly and Effectively
Nikhil Kothari

Stepping Outside the Browser with Microsoft Silverlight 4
Ashish Shetty

Overview of the Windows Phone 7 Series Application Platform
Charlie Kindel

Windows Phone UI and Design Language
Chad Roberts, Michael Smuga, Albert Shum

An Introduction to Developing Applications for Microsoft Silverlight
Shawn Oster

Building Windows Phone Applications with Silverlight, Part 1
Mike Harsh

Building Windows Phone Applications with Silverlight, Part 2
Peter Torr

Windows Phone Application Platform Architecture
Istvan Cseri

Development and Debugging Tools for Building XNA Games for Windows Phone
Cullen Waters

Distributing and Monetizing Windows Phone Applications and Games
John Bruno, Todd Biggs

Building Windows Phone Games
Michael Klucher

Building a High Performance 3D Game for Windows Phone
Shawn Hargreaves, Tomas Vykruta

Designing and Developing for the Rich Mobile Web
Joe Marini

The Microsoft Silverlight Analytics Framework
Michael Scherotter, Alfonso Corretti

Microsoft Silverlight "Media" : Moving at 60fps
Eric Schmidt

Introducing the Silverlight Rough Cut Editor
Jason Suess

HTML5: Cross-Browser Best Practices
Tony Ross

In-Depth Look at Internet Explorer 9
Ted Johnson, John Hrvatin

HTML5: High-Performance Best Practices for Web Sites
Jason Weber

Building Innovative Windows Client Software
Tim Huckaby, Scott Hanselman, Scott Stanfield, Tim Sneath, Dave Wolf

Search Engine Optimization for Microsoft Silverlight
Brad Abrams

Building an Accessible Microsoft Silverlight Experience
Mark Rideout

Microsoft Silverlight Optimization and Extensibility with MEF
Glenn Block

Flash Skills Applied to Microsoft Silverlight Design and Development
Adam Kinney

Software and Web Entrepreneurs: Go Big with BizSpark and WebsiteSpark
Alex Souza, Julien Codorniou

Dynamic Layout and Transitions for Microsoft Silverlight 4 with Microsoft Expression Blend
Kenny Young

A Case Study: Rapid WordPress Design and Prototyping with Expression Web 3
Morten Rand-Hendriksen

Practical Strategies for Debugging Cross-Browser Display Issues
Lori Dirks

Accessing Web Services in Microsoft Silverlight
Yavor Georgiev

Unit Testing Silverlight and Windows Phone Applications
Jeff Wilcox

Silverlight Performance on Windows Phone
Seema Ramchandani

The Laws of User Experience
Anthony Franco

Treat Your Content Right
Tiffani Jones Brown

Running with Wireframes: Taking Information Architecture (IA) into Design
Matt Brown

Lifecycle of a Wireframe
Nick Finck

Total Experience Design
Paul Dawson

Touch in Public: Multi-touch Interaction Design for Kiosks and Architectural Experiences
Jason Brush

The Art, Technology and Science of Reading
Kevin Larson

Creating Great Experiences through Collaboration
Noah Gedrich, Eric Perez, Sean Scott

Peanut Butter and Jelly: Putting 'Content Management' Back into Context
Nick Katsivelos

Service Design Goes Social
Shelley Evenson

Great User Experiences: Seamlessly Blending Technology and Design
Ben Jones, Andy Hood

Total Experience: A Design Methodology for Agencies
Conor Brady

The Elephant in the Room
Nishant Kothary

The Democratization of the Design Industry
Mike Samson, Ross Kimbarovsky

The Type We Want
Jonathan Snook

An Hour With Bill Buxton
Bill Buxton

Cloud Computing Economies of Scale
James Hamilton

The Mono Project
Miguel de Icaza

Modern Web Form Design
Luke Wroblewski

Robots at MySpace: Massive Scaling a .NET Website with the Microsoft Robotic Studio
Erik Nelson, Tony Chow, Akash Patel

10 Ways to Attack a Design Problem and Come Out Winning
Robby Ingebretsen

Principles of Microsoft Silverlight Graphics and Animation
Jeff Paries

Building a Next-Generation Web Application with Microsoft ASP.NET MVC 2 and jQuery
Nate Kohari

Using Storage in the Windows Azure Platform
Chris Auld

Creating Effective Info Viz in Microsoft Silverlight
Matthias Shapiro

Microsoft Surface Goes Social: Research Project at the University of Linz
Mario Meir-Huber

Understanding the Model-View-ViewModel Pattern
Laurent Bugnion

Build Your Own MVVM Framework
Rob Eisenberg

Securing Microsoft Silverlight Applications
Shawn Wildermuth

IronRuby for the .NET Developer
Cory Foy

Developing Natural User Interfaces with Microsoft Silverlight and WPF 4 Touch
Joshua Blake

The OpenRasta Framework for Building RESTful Applications
Kyle Baley

Building Great Standards-Based Websites for the Big Wide World with Microsoft ASP.NET 4
Tatham Oddie, Damian Edwards

Syncing Audio, Video and Animations in Microsoft Silverlight Applications
Dan Wahlin

Six Things Every jQuery Developer Must Know
Elijah Manor

Building Facebook Apps with Microsoft .NET and Deploying to Windows Azure
Jim Zimmerman

Design the Ordinary, Like the Fixie
DL Byron, Kevin Tamura

From Comp to Code: A Design Communion
Evan Sharp

Do You Speak My Language? Microsoft Translator and the Power of Collaboration
Neil Roodyn, Vikram Dendi

Building Rich and Interactive User Experiences in SharePoint
Andre Engberts

Building Platforms and Applications for the Real-Time Web
Chris Saad, Brett Slatkin, Ari Steinberg, Ryan Sarver, Lili Cheng, Dare Obasanjo

SVG: The Past, Present and Future of Vector Graphics for the Web
Patrick Dengler, Doug Schepers

Developing Multiplayer Games with Microsoft Silverlight 4
Mike Downey, Grant Skinner

Smooth Streaming Live in HD: From Camera to Screen
Michael Hanley, Scott Stanfield

Smooth Streaming Live in HD: 2010 Olympic Winter Games
Bob Cowherd, Scott Stanfield

Participating in the Web of Data with Open Standards
Christian Heilmann

Opening Up Opportunity with Twitter
Ryan Sarver

How jQuery Makes Hard Things Simple
John Resig

Adding the "Where" to the "When" of Social Applications
Raffi Krikorian

Building Large-Scale, Data-Centric Applications with Silverlight
Roman Rubin, Ramya Parthasarathy

The Tale of JavaScript. I Mean ECMAScript.
Douglas Crockford

Debugging Microsoft Silverlight Applications
Shawn Wildermuth

Building Finance Applications with Microsoft Silverlight 4
Cai Junyi

Copyright: A Cloudy Subject
Jonathan Zuck

Storm Clouds: What to Consider About Privacy Before Writing a Line of Code
Jonathan Zuck

Building the eBay Simple Lister with Silverlight
Michael Wolf

Designing Rich Experiences for Data-Centric Applications
Yoshihiro Saito, Ken Azuma

Tips and Tricks for Making Web Forms Shine with Microsoft ASP.NET 4
Jon Galloway

What's New in Microsoft ASP.NET MVC 2
Phil Haack

The HaaHa Show: Microsoft ASP.NET MVC Security with Haack and Hanselman
Scott Hanselman, Phil Haack

Deep Dive into Orchard Extensibility for CMS Developers
Renaud Paquay

Beyond File | New Company: From Cheesy Sample to Social Platform
Scott Hanselman

Improving Software Quality for the Modern Web
Euan Garden

Pumping "Iron" on the Web: IronRuby and IronPython
Jimmy Schementi

Driving Experiences via Services Using the Microsoft .NET Framework
Ron Jacobs

Designing and Delivering Scalable and Resilient Web Services
Ron Jacobs

OData: There's a Feed for That
Pablo Castro

Implementing OData: How to Create a Feed for That
Mike Flasko

Web Deployment Made Awesome: If You're Using XCopy, You're Doing It Wrong
Scott Hanselman

Accessing Data in a Microsoft .NET-Connected Web Application
Shyam Pather

Advanced Web Debugging with Fiddler
Eric Lawrence

Internet Explorer Developer Tools
Jon Seitel

Reactive Extensions for JavaScript
Erik Meijer

Building Pivot Collections
Troy Schauls, Jeff Weir

Unlocking Audio/Video Content with Speech Recognition
Behrooz Chitsaz

Incarnate: Behind the Scenes
Karsten Januszewski

Quickly Implementing New Cross-Browser Features with Ruby and Python
Hans Hugli

Keynote Day 1

Keynote Day 2

Designing Corporate Web Sites using SharePoint 2010
Paul Stubbs

Designing an Internet-Facing Web Site Using SharePoint 2010
Elisabeth Olson

Using Windows Identity Foundation for Creating Identity-Driven Experiences in Microsoft Silverlight
Caleb Baker

Microsoft Project Code Name "Dallas": Data For Your Apps
Moe Khosravy

Using Ruby on Rails to Build Windows Azure Applications
Sriram Krishnan

Lap around the Windows Azure Platform
Steve Marx

Building Web Applications with Windows Azure Storage
Brad Calder

Microsoft Silverlight and Windows Azure: A Match Made for the Web
Matt Kerner

Building Web Applications with Microsoft SQL Azure
David Robinson

Connecting Your Applications in the Cloud with Windows Azure AppFabric
Clemens Vasters

Building and Deploying Windows Azure-Based Applications with Microsoft Visual Studio 2010
Jim Nakashima

Building Offline Web Apps Using Microsoft Sync Framework
Mike Clark

Building PHP Applications using the Windows Azure Platform
Craig Kitterman, Sumit Chawla

Improving the Usability and Security of OpenID
Mike Jones



MX09 Conference


Semantic HTML and Unobtrusive JavaScript
Nate Koechley

Design Fundamentals for Developers
Robby Ingebretsen

Hiking Mt. Avalon
Robby Ingebretsen, Mike Hillberg, Jaime Rodriguez

Ask The Gu

Scaling a Rich Client to Half a Billion Users
Steve Zheng

Software Entrepreneurs: Go Big with BizSpark
Julien Codorniou

Copyright Laws for Web Designers and Developers
Jonathan Zuck

Enhancing Large Windows Media Platforms with Microsoft Silverlight
Matt Smith, Robert Ames

Exposing Web Content to a Global Audience Using Machine Translation
Dr. Neil Roodyn

Sketch Flow: From Concept to Production
Celso Gomes, Christian Schormann

Improving UX through Application Lifecycle Management
Christian Thilmany, Chris Bernard

Microsoft Expression Web: No Platform Left Behind
Tyler Simpson, Steve Guttman

The Future of Microsoft Expression Blend
Douglas Olson, Christian Schormann

C# for Designers
Jennifer Smith, Fred Gerantabee

Ten Ways to Ensure RIA Failure
Anthony Franco

Deep Zoom++ : Build Dynamic Deep Zoom Applications with Open Source
Allan Li, Ken Azuma

Using Total Experience Design to Transform the Digital Building
Daren May, Paul Dawson

A Website Named Desire
Nishant Kothary

Design Prototyping: Bringing Wireframes to Life
Dan Harrelson

Escaping Flatland in Application Design: Rich User Experiences
Peter Eckert, Jeff McLean

Go Beyond Best Practices: Evolving Next Practices to Prosper in the 21st Century
Lou Carbone

Interaction Techniques Using the Wii Remote (and Other HCI Projects)
Johnny Lee

Interactive Prototyping with DHTML
Bill Scott

Touch and Gesture Computing, What You Haven't Heard
Joseph Fletcher

The Way of the Whiteboard: Persuading with Pictures
Dan Roam

Web Form Design
Luke Wrobleski

Wireframes That Work: Designing (Rich Internet) Applications
Aaron Adams

How Razorfish Lights Up Brand with Microsoft SharePoint
Tony Jones

State of the Art in Web Site Design on Microsoft SharePoint
Chris Auld

User Experience Design Patterns for Business Applications with Microsoft Silverlight …
Corrina Black

Creating a Great Experience on Digg with Windows Internet Explorer 8
Joel K. Neubeck

Windows Internet Explorer 8 in the Real World: How Is Internet Explorer 8 Used
Paul Cutsinger

Measuring Social Media Marketing
Jason Burby, Ryan Turner

Designing the Windows 7 Desktop Experience
Stephan Hoefnagels

Creating Interactivity with Microsoft Expression Blend
Peter Blois

Integrating Microsoft Expression Blend with Adobe Creative Suite
Joanna Mason

Effective Infographics with Interactivity
Joshua Allen

User Experience Design for Non-Designers
Shawn Konopinsky

Day One Keynote
Bill Buxton, Scott Guthrie

Day Two Keynote
Deborah Adler, Dean Hachamovitch

A Lap around Microsoft .NET Services
Todd Holmquist-Sutherland , John Shewchuk

Simplifying Distributed Access Control with Microsoft .NET Services
Justin Smith

Connecting Applications across Networks with Microsoft .NET Services
Clemens Vasters

Mesh-Enabled Web Applications
Arash Ghanaie-Sichanie

Live Framework and Mesh Services: Live Services for Developers
Ori Amiga

What's New in Microsoft SQL Data Services
Nigel Ellis

Overview of Windows Azure
Manuvir Das

Windows Azure Storage
Brad Calder

Building Web Applications with Windows Azure
Steve Marx

RESTful Services for the Programmable Web with Windows Communication Foundation
Ron Jacobs

Developing RESTful Services and Clients with "M"
Chris Sells, Douglas Purdy

Principles of Microsoft Silverlight Animation
Jeff Paries

Working across the Client Continuum
Laurent Bugnion

What's New in Microsoft Silverlight 3
Joe Stegman

High-Speed RIA Development with the Microsoft Silverlight Toolkit
Shawn Oster

Building Microsoft Silverlight Controls
Karen Corby

Deep Dive into Microsoft Silverlight Graphics
Seema Ramchandani

Delivering Ads to a Silverlight Media Player Application
Nicholas Brookins

Creating Media Content for Microsoft Silverlight Using Microsoft Expression Encoder
James Clarke

Using Microsoft ASP.NET MVC to Easily Extend a Web Site into the Mobile Space
Jared Eischen, John Stockton

Running PHP on Microsoft Servers and Services
Michael Joffe, Shaun Hirschman

Using Dynamic Languages to Develop Microsoft Silverlight Applications
John Lam

Choosing between ASP.NET Web Forms and MVC
Rachel Appel

The Microsoft Web Sandbox: An Open Source Framework for Developing Secure …
Scott Isaacs

Web Development Using Microsoft Visual Studio: Now and in the Future
Jeff King

<3 the New Windows Live Messenger Web Toolkit for Social Websites
Steve Gordon, Keiji Kanazawa

Protecting Online Identities
Jorgen Thelin

Standards for Aggregating Activity Feeds and Social Aggregation Services
Luke Shepard, John McCrea, Marc Canter, Kevin Marks, Monica Keller, Dare Obasanjo

Adding Microsoft Silverlight to Your Company's Skill Set
Noah Gedrich, Ken Martin

Advance Your Design with UX Design Patterns
Ambrose Little

Microsoft Xbox "Lips" and "Fable II": Multi Channel Experiences
Charles Duncan

Cloud Computing: What's in It for Me?
John Keagy

Customized Live Search for Web and Client Applications
Alessandro Catorcini

Introducing the Microsoft Virtual Earth Silverlight Map Control CTP
Chris Pendleton

Building a Rich Social Network Application
Gilbok Lee, Miho Heo

Modeling RESTful Data Services: Present and Future
Pablo Castro

Extending Your Brand to the Desktop with Windows 7
Yochay Kiriaty

See through the Clouds: Introduction to the Azure Services Platform
James Conard

What's New in Windows Presentation Foundation (WPF) 4
Mark Wilson-Thomas, Kevin Gjerstad

Building Amazing Business Centric Applications with Microsoft Silverlight 3
Brad Abrams

.NET RIA Services - Building Data-Driven Applications with Microsoft Silverlight and …
Nikhil Kothari

Consuming Web Services in Microsoft Silverlight 3
Eugene Osovetsky

Microsoft Silverlight Media End-to-End
Alex Zambelli

Microsoft ASP.NET Model View Controller (MVC): Ninja on Fire Black Belt Tips
Phil Haack

Building Out of Browser Experiences with Microsoft Silverlight 3
Mike Harsh

Microsoft ASP.NET 4.0 : What's Next?
Stephen Walther

Microsoft ASP.NET 4.0 Data Access: Patterns for Success with Web Forms
David Ebbo

Microsoft ASP.NET: Taking AJAX to the Next Level
Stephen Walther

File|New -> Company: Creating with Microsoft ASP.NET Model …
Scott Hanselman

ASP.NET MVC: America's Next Top Model View Controller Framework
Phil Haack

The Microsoft Web Platform: Starring Internet Information Services (IIS) and Your …
Crystal Hoyer, Mai-lan Tomsen Bukovec

A Lap around Windows Internet Explorer 8
Giorgio Sardo

Building High Performance Web Applications and Sites
John Hrvatin

Securing Web Applications
Eric Lawrence

Creating a "Next Generation" E-Commerce Experience
Scott Cairney, Jean-Yves Martineau

Delivering Media with Internet Information Services 7 (IIS) Media Services and …
John Bishop, John Bocharov

Developing and Deploying Applications on Internet Information Services (IIS)
Thomas Deml

Build Applications on the Microsoft Platform Using Eclipse, Java, Ruby and PHP!
Vijay Rajagopalan

Building Scalable and Available Web Applications with Microsoft Project Code Name …
Murali Krishnaprasad

Miss March and Other Distractions
Scott Stanfield

Windows Mobile 6.5 Overview
Loke Uei Tan

There's a Little Scripter in All of Us: Building a Web App for the Masses
Rob Conery

Building Data-Driven Scalable AJAX Web Pages
Jon Flanders

Caching REST with Windows Communication Foundation
Jon Flanders

Building Accessible RIAs in Microsoft Silverlight
Reed Shaffner, Chris Auld

Building Microsoft Silverlight Applications with Eclipse
Shawn Wildermuth

Building an Optimized, Graphics-Intensive Application for Microsoft Silverlight
Seema Ramchandani

When Errors Happen: Debugging Microsoft Silverlight
John Papa

Microsoft Silverlight Is Ready for Business
Ward Bell

Optimizing Performance for Microsoft Expression Encoder
James Clarke

Going Inside Microsoft Silverlight: Exploring the Core CLR
Brandon Bray

Making XML Really, Really Easy with Microsoft Visual Basic 9
Alex Turner

What's New for Microsoft Silverlight and Microsoft Windows Presentation …
Mark Wilson-Thomas

Protecting Against Internet Service Abuse
John Scarrow

Five Killer Scenarios for the Windows Live Messenger Web Toolkit
Chris Parker

Lighting Up Web and Client Applications with Microsoft Live Services
Gregory Renard

Oomph: A Microformat Toolkit
Tim Aidlin

Offline Network Detection in Microsoft Silverlight 3
Peter Smith

How'd they do it? Real App. Real Code. Two Weeks. Nothing but .NET
Scott Hanselman

How I Learned to Stop Worrying and Love the Microsoft ADO.NET Entity Framework
Pablo Castro

Using the Windows Azure Tools for Microsoft Visual Studio to Build Cloud Services
Jim Nakashima

Introducing the Microsoft Web Platform
Lauren Cooney

Automated User Interface (UI) Testing with Microsoft Visual Studio Team System 2010
Brian Keller

A Shot of Windows Live Messenger and a Pint of Microsoft Silverlight
Jordan Snyder

Improving Mobile Experiences with the Microsoft Mobile Device Browser File
Chris Woods

Search Engine Optimization (SEO) for Web Developers
Thomas Deml

Microsoft Silverlight and Windows Presentation Foundation (WPF): Sharing Skills and …
Jeff Wilcox

“Hey honey, you want to watch a movie tonight?”

“No thanks, I’m already watching Design Fundamentals for Developers, it’s a 3 hours kick ass video”

VB.NET to C# Differences

Found this great link today by Dr. Frank McCown over at Harding University Computer Science Dept from 2009.



Program Structure


Imports System
Namespace Hello
   Class HelloWorld
      Overloads Shared Sub Main(ByVal args() As String)
         Dim name As String = "VB.NET"
'See if an argument was passed from the command line
          If args.Length = 1 Then name = args(0)
          Console.WriteLine("Hello, " & name & "!")
      End Sub
   End Class
End Namespace

using System;
namespace Hello {
   public class HelloWorld {
      public static void Main(string[] args) {
         string name = "C#";
// See if an argument was passed from the command line
         if (args.Length == 1)
            name = args[0];
         Console.WriteLine("Hello, " + name + "!");




' Single line only
REM Single line only
''' <summary>XML comments</summary>

// Single line
/* Multiple
    line  */
/// <summary>XML comments on single line</summary>
/** <summary>XML comments on multiple lines</summary> */


Data Types


Value Types
Byte, SByte
Short, UShort, Integer, UInteger, Long, ULong
Single, Double

Reference Types

Dim correct As Boolean = True
Dim b As Byte = &H2A   'hex
Dim o As Byte = &O52   'octal
Dim person As Object = Nothing
Dim name As String = "Dwight"
Dim grade As Char = "B"c
Dim today As Date = #12/31/2007 12:15:00 PM#
Dim amount As Decimal = 35.99@
Dim gpa As Single = 2.9!
Dim pi As Double = 3.14159265
Dim lTotal As Long = 123456L
Dim sTotal As Short = 123S
Dim usTotal As UShort = 123US
Dim uiTotal As UInteger = 123UI
Dim ulTotal As ULong = 123UL

Type Information
Dim x As Integer
Console.WriteLine(x.GetType())          ' Prints System.Int32
Console.WriteLine(GetType(Integer))   ' Prints System.Int32
Console.WriteLine(TypeName(x))        ' Prints Integer

Type Conversion
Dim d As Single = 3.5
Dim i As Integer = CType(d, Integer)   ' set to 4 (Banker's rounding)
i = CInt(d)  ' same result as CType
i = Int(d)    ' set to 3 (Int function truncates the decimal)

Value Types
byte, sbyte
short, ushort, int, uint, long, ulong
float, double
DateTime   (not a built-in C# type)

Reference Types

bool correct = true;
byte b = 0x2A;   // hex
object person = null;
string name = "Dwight";
char grade = 'B';
DateTime today = DateTime.Parse("12/31/2007 12:15:00");
decimal amount = 35.99m;
float gpa = 2.9f;
double pi = 3.14159265;
long lTotal = 123456L;
short sTotal = 123;
ushort usTotal = 123;
uint uiTotal = 123;
ulong ulTotal = 123;

Type Information
int x;
Console.WriteLine(x.GetType());              // Prints System.Int32
Console.WriteLine(typeof(int));               // Prints System.Int32
Console.WriteLine(x.GetType().Name);   // prints Int32

Type Conversion
float d = 3.5f;
int i = (int)d;   // set to 3  (truncates decimal)




Const MAX_STUDENTS As Integer = 25

' Can set to a const or var; may be initialized in a constructor
ReadOnly MIN_DIAMETER As Single = 4.93

const int MAX_STUDENTS = 25;

// Can set to a const or var; may be initialized in a constructor
readonly float MIN_DIAMETER = 4.93f;




Enum Action
  [Stop]   ' Stop is a reserved word
End Enum
Enum Status
  Flunk = 50
  Pass = 70
  Excel = 90
End Enum

Dim a As Action = Action.Stop
If a <> Action.Start Then _
   Console.WriteLine(a.ToString & " is " & a)     ' Prints "Stop is 1"
Console.WriteLine(Status.Pass)     ' Prints 70
Console.WriteLine(Status.Pass.ToString())     ' Prints Pass

enum Action {Start, Stop, Rewind, Forward};
enum Status {Flunk = 50, Pass = 70, Excel = 90};
Action a = Action.Stop;
if (a != Action.Start)
  Console.WriteLine(a + " is " + (int) a);    // Prints "Stop is 1"
Console.WriteLine((int) Status.Pass);    // Prints 70
Console.WriteLine(Status.Pass);      // Prints Pass




=  <  >  <=  >=  <>

+  -  *  /
(integer division)
(raise to a power)

=  +=  -=  *=  /=  \=  ^=  <<=  >>=  &=

And   Or   Xor   Not   <<   >>

AndAlso   OrElse   And   Or   Xor   Not

Note: AndAlso and OrElse perform short-circuit logical evaluations

String Concatenation

==  <  >  <=  >=  !=

+  -  *  /
(integer division if both operands are ints)
Math.Pow(x, y)

=  +=  -=  *=  /=   %=  &=  |=  ^=  <<=  >>=  ++  --

&   |   ^   ~   <<   >>

&&   ||   &   |   ^   !

Note: && and || perform short-circuit logical evaluations

String Concatenation




' Ternary/Conditional operator (Iff evaluates 2nd and 3rd expressions)
greeting = If(age < 20, "What's up?", "Hello")

' One line doesn't require "End If"
If age < 20 Then greeting = "What's up?"
If age < 20 Then greeting = "What's up?" Else greeting = "Hello"

' Use : to put two commands on same line
If x <> 100 AndAlso y < 5 Then x *= 5 : y *= 2 

' Preferred
If x <> 100 AndAlso y < 5 Then
  x *= 5
  y *= 2
End If

' To break up any long single line use _
If whenYouHaveAReally < longLine And _
  itNeedsToBeBrokenInto2 > Lines Then _

'If x > 5 Then
  x *= y
ElseIf x = 5 OrElse y Mod 2 = 0 Then
  x += y
ElseIf x < 10 Then
  x -= y
  x /= y
End If

Select Case color   ' Must be a primitive data type
Case "pink", "red"
    r += 1
Case "blue"
    b += 1
Case "green"
    g += 1
Case Else
    other += 1
End Select

// Ternary/Conditional operator
greeting = age < 20 ? "What's up?" : "Hello";

if (age < 20)
  greeting = "What's up?";
  greeting = "Hello";

// Multiple statements must be enclosed in {}
if (x != 100 && y < 5) {   
  x *= 5;
  y *= 2;

No need for _ or : since ; is used to terminate each statement.

(x > 5)
  x *= y;
else if (x == 5 || y % 2 == 0)
  x += y;
else if (x < 10)
  x -= y;
  x /= y;

// Every case must end with break or goto case
switch (color) {                          // Must be integer or string
case "pink":
case "red":    r++;    break;
case "blue":   b++;   break;
case "green": g++;   break;
default:    other++;  break; // break necessary on default




Pre-test Loops:

While c < 10
  c += 1
End While

Do Until c = 10 
  c += 1

Do While c < 10
  c += 1

For c = 2 To 10 Step 2

Post-test Loops:

  c += 1
Loop While c < 10

  c += 1
Loop Until c = 10

'  Array or collection looping
Dim names As String() = {"Fred", "Sue", "Barney"}
For Each s As String In names

' Breaking out of loops
Dim i As Integer = 0
While (True)
  If (i = 5) Then Exit While
  i += 1
End While

' Continue to next iteration
For i = 0 To 4
  If i < 4 Then Continue For
  Console.WriteLine(i)   ' Only prints 4

Pre-test Loops:

// no "until" keyword
while (c < 10)
for (c = 2; c <= 10; c += 2)

Post-test Loop:
while (c < 10);

// Array or collection looping
string[] names = {"Fred", "Sue", "Barney"};
foreach (string s in names)

// Breaking out of loops
int i = 0;
while (true) {
  if (i == 5)

// Continue to next iteration
for (i = 0; i < 5; i++) {
  if (i < 4)
  Console.WriteLine(i);   // Only prints 4




Dim nums() As Integer = {1, 2, 3} 
For i As Integer = 0 To nums.Length - 1
' 4 is the index of the last element, so it holds 5 elements
Dim names(4) As String
names(0) = "David"
names(5) = "Bobby"  ' Throws System.IndexOutOfRangeException
' Resize the array, keeping the existing values (Preserve is optional)
ReDim Preserve names(6)

Dim twoD(rows-1, cols-1) As Single
twoD(2, 0) = 4.5
Dim jagged()() As Integer = { _
  New Integer(4) {}, New Integer(1) {}, New Integer(2) {} }
jagged(0)(4) = 5

int[] nums = {1, 2, 3};
for (int i = 0; i < nums.Length; i++)
// 5 is the size of the array
string[] names = new string[5];
names[0] = "David";
names[5] = "Bobby";   // Throws System.IndexOutOfRangeException
// C# can't dynamically resize an array.  Just copy into new array.
string[] names2 = new string[7];
Array.Copy(names, names2, names.Length);   // or names.CopyTo(names2, 0);

float[,] twoD = new float[rows, cols];
twoD[2,0] = 4.5f;

int[][] jagged = new int[3][] {
  new int[5], new int[2], new int[3] };
jagged[0][4] = 5;




' Pass by value (in, default), reference (in/out), and reference (out)
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRefz As Integer)
  x += 1
  y += 1
  z = 5
End Sub

Dim a = 1, b = 1, c As Integer   ' c set to zero by default
TestFunc(a, b, c)
Console.WriteLine("{0} {1} {2}", a, b, c)   ' 1 2 5

' Accept variable number of arguments
Function Sum(ByVal ParamArray nums As Integer()) As Integer
  Sum = 0 
  For Each i As Integer In nums
    Sum += i
End Function ' Or use Return statement like C#
Dim total As Integer = Sum(4, 3, 2, 1)   ' returns 10

' Optional parameters must be listed last and must have a default value
Sub SayHello(ByVal name As String, Optional ByVal prefix As String = "")
  Console.WriteLine("Greetings, " & prefix & " " & name)
End Sub
SayHello("Strangelove", "Dr.")

// Pass by value (in, default), reference (in/out), and reference (out)
void TestFunc(int x, ref int y, out int z) {
  z = 5;

int a = 1, b = 1, c;  // c doesn't need initializing
TestFunc(a, ref b, out c);
Console.WriteLine("{0} {1} {2}", a, b, c);  // 1 2 5

// Accept variable number of arguments
int Sum(params int[] nums) {
  int sum = 0;
  foreach (int i in nums)
    sum += i;
  return sum;

int total = Sum(4, 3, 2, 1);   // returns 10

/* C# doesn't support optional arguments/parameters.  Just create two different versions of the same function. */
void SayHello(string name, string prefix) {
  Console.WriteLine("Greetings, " + prefix + " " + name);

void SayHello(string name) {
  SayHello(name, "");




Special character constants (all also accessible from ControlChars class)
vbCrLf, vbCr, vbLf, vbNewLine

' String concatenation (use & or +)
Dim school As String = "Harding" & vbTab
school = school & "University" ' school is "Harding (tab) University"

' Chars
Dim letter As Char = school.Chars(0)   ' letter is H
letter = Convert.ToChar(65)                ' letter is A
letter = Chr(65)                                 ' same thing
Dim word() As Char = school.ToCharArray() ' word holds Harding

' No string literal operator
Dim msg As String = "File is c:\temp\x.dat"

' String comparison
Dim mascot As String = "Bisons"
If (mascot = "Bisons") Then   ' true
If (mascot.Equals("Bisons")) Then   ' true
If (mascot.ToUpper().Equals("BISONS")) Then  ' true
If (mascot.CompareTo("Bisons") = 0) Then   ' true

' String matching with Like - Regex is more powerful
If ("John 3:16" Like "Jo[Hh]? #:*") Then   'true

' Substring
s = mascot.Substring(2, 3)) ' s is "son"

' Replacement
s = mascot.Replace("sons", "nomial")) ' s is "Binomial"

' Split
Dim names As String = "Frank,Becky,Ethan,Braden"
Dim parts() As String = names.Split(",".ToCharArray())   ' One name in each slot

' Date to string
Dim dt As New DateTime(1973, 10, 12)
Dim s As String = "My birthday: " & dt.ToString("MMM dd, yyyy")   ' Oct 12, 1973

' Integer to String
Dim x As Integer = 2
Dim y As String = x.ToString()     ' y is "2"

' String to Integer
Dim x As Integer = Convert.ToInt32("-5")     ' x is -5

' Mutable string
Dim buffer As New System.Text.StringBuilder("two ")
buffer.Append("three ")
buffer.Insert(0, "one ")
buffer.Replace("two", "TWO")
Console.WriteLine(buffer)         ' Prints "one TWO three"

Escape sequences
\r    // carriage-return
\n    // line-feed
\t    // tab
\\    // backslash
\"    // quote

// String concatenation
string school = "Harding\t";
school = school + "University";   // school is "Harding (tab) University"

// Chars
char letter = school[0];            // letter is H
letter = Convert.ToChar(65);     // letter is A
letter = (char)65;                    // same thing
char[] word = school.ToCharArray();   // word holds Harding

// String literal
string msg = @"File is c:\temp\x.dat";
// same as
string msg = "File is c:\\temp\\x.dat";

// String comparison
string mascot = "Bisons";
if (mascot == "Bisons")    // true
if (mascot.Equals("Bisons"))   // true
if (mascot.ToUpper().Equals("BISONS"))   // true
if (mascot.CompareTo("Bisons") == 0)    // true

// String matching - No Like equivalent, use Regex

// Substring
s = mascot.Substring(2, 3))     // s is "son"

// Replacement
s = mascot.Replace("sons", "nomial"))     // s is "Binomial"

// Split
string names = "Frank,Becky,Ethan,Braden";
string[] parts = names.Split(",".ToCharArray());   // One name in each slot

// Date to string
DateTime dt = new DateTime(1973, 10, 12);
string s = dt.ToString("MMM dd, yyyy");     // Oct 12, 1973

// int to string
int x = 2;
string y = x.ToString();     // y is "2"

// string to int
int x = Convert.ToInt32("-5");     // x is -5

// Mutable string
System.Text.StringBuilder buffer = new System.Text.StringBuilder("two ");
buffer.Append("three ");
buffer.Insert(0, "one ");
buffer.Replace("two", "TWO");
Console.WriteLine(buffer);     // Prints "one TWO three"


Regular Expressions


Imports System.Text.RegularExpressions

' Match a string pattern
Dim r As New Regex("j[aeiou]h?. \d:*", RegexOptions.IgnoreCase Or _
If (r.Match("John 3:16").Success) Then   'true
End If

' Find and remember all matching patterns
Dim s As String = "My number is 305-1881, not 305-1818."
Dim r As New Regex("(\d+-\d+)")
Dim m As Match = r.Match(s)     ' Matches 305-1881 and 305-1818
While m.Success
    Console.WriteLine("Found number: " & m.Groups(1).Value & " at position " _
            & m.Groups(1).Index.ToString)
    m = m.NextMatch()
End While

' Remeber multiple parts of matched pattern
Dim r As New Regex("(\d\d):(\d\d) (am|pm)")
Dim m As Match = r.Match("We left at 03:15 pm.")
If m.Success Then
    Console.WriteLine("Hour: " & m.Groups(1).ToString)       ' 03
    Console.WriteLine("Min: " & m.Groups(2).ToString)         ' 15
    Console.WriteLine("Ending: " & m.Groups(3).ToString)   ' pm
End If

' Replace all occurrances of a pattern
Dim r As New Regex("h\w+?d", RegexOptions.IgnoreCase)
Dim s As String = r.Replace("I heard this was HARD!", "easy")  ' I easy this was easy!

' Replace matched patterns
Dim s As String = Regex.Replace("123 < 456", "(\d+) . (\d+)", "$2 > $1")   ' 456 > 123

' Split a string based on a pattern
Dim names As String = "Frank, Becky, Ethan, Braden"
Dim r As New Regex(",\s*")
Dim parts() As String = r.Split(names)   ' One name in each slot

using System.Text.RegularExpressions;

// Match a string pattern
Regex r = new Regex(@"j[aeiou]h?. \d:*", RegexOptions.IgnoreCase |
if (r.Match("John 3:16").Success)   // true

// Find and remember all matching patterns
string s = "My number is 305-1881, not 305-1818.";
Regex r = new Regex("(\\d+-\\d+)");
// Matches 305-1881 and 305-1818
for (Match m = r.Match(s); m.Success; m = m.NextMatch())
    Console.WriteLine("Found number: " + m.Groups[1] + " at position " +

// Remeber multiple parts of matched pattern
Regex r = new Regex("@(\d\d):(\d\d) (am|pm)");
Match m = r.Match("We left at 03:15 pm.");
if (m.Success) {
    Console.WriteLine("Hour: " + m.Groups[1]);       // 03
    Console.WriteLine("Min: " + m.Groups[2]);         // 15
    Console.WriteLine("Ending: " + m.Groups[3]);   // pm

// Replace all occurrances of a pattern
Regex r = new Regex("h\\w+?d", RegexOptions.IgnoreCase);
string s = r.Replace("I heard this was HARD!", "easy"));   // I easy this was easy!

// Replace matched patterns
string s = Regex.Replace("123 < 456", @"(\d+) . (\d+)", "$2 > $1");   // 456 > 123

// Split a string based on a pattern
string names = "Frank, Becky, Ethan, Braden";
Regex r = new Regex(@",\s*");
string[] parts = r.Split(names);   // One name in each slot


Exception Handling


' Throw an exception
Dim ex As New Exception("Something is really wrong.")
Throw  ex

' Catch an exception
  y = 0
  x = 10 / y
Catch ex As Exception When y = 0 ' Argument and When is optional
End Try

' Deprecated unstructured error handling
On Error GoTo MyErrorHandler
MyErrorHandler: Console.WriteLine(Err.Description)

// Throw an exception
Exception up = new Exception("Something is really wrong.");
throw up;  // ha ha

// Catch an exception
  y = 0;
  x = 10 / y;
catch (Exception ex) {   // Argument is optional, no "When" keyword
finally {




Namespace Harding.Compsci.Graphics 
End Namespace

' or

Namespace Harding
Namespace Compsci
Namespace Graphics 
End Namespace
End Namespace
End Namespace

Imports Harding.Compsci.Graphics

namespace Harding.Compsci.Graphics {

// or

namespace Harding {
namespace Compsci {
namespace Graphics {

using Harding.Compsci.Graphics;


Classes / Interfaces


Accessibility keywords
Protected Friend

' Inheritance
Class FootballGame
Inherits Competition
End Class

' Interface definition
Interface IAlarmClock 
End Interface

// Extending an interface
Interface IAlarmClock
Inherits IClock
End Interface

// Interface implementation
Class WristWatch 
Implements IAlarmClock, ITimer 
End Class

Accessibility keywords
protected internal

// Inheritance
class FootballGame : Competition {

// Interface definition
interface IAlarmClock {

// Extending an interface
interface IAlarmClock : IClock {

// Interface implementation
class WristWatch : IAlarmClock, ITimer {


Constructors / Destructors


Class SuperHero
  Private _powerLevel As Integer
  Public Sub New()
    _powerLevel = 0
  End Sub
  Public Sub New(ByVal powerLevel As Integer)
    Me._powerLevel = powerLevel
  End Sub
  Protected Overrides Sub Finalize() 
' Desctructor code to free unmanaged resources
  End Sub
End Class

class SuperHero {
  private int _powerLevel;
  public SuperHero() {
     _powerLevel = 0;
  public SuperHero(int powerLevel) {
    this._powerLevel= powerLevel; 
~SuperHero() {
// Destructor code to free unmanaged resources.
    // Implicitly creates a Finalize method


Using Objects


Dim hero As SuperHero = New SuperHero
' or
Dim hero As New SuperHero

With hero
  .Name = "SpamMan"
  .PowerLevel = 3
End With

hero.Defend("Laura Jones")
hero.Rest()     ' Calling Shared method
' or

Dim hero2 As SuperHero = hero  ' Both reference the same object
hero2.Name = "WormWoman"
Console.WriteLine(hero.Name)   ' Prints WormWoman

hero = Nothing ' Free the object

If hero Is Nothing Then _
  hero = New SuperHero

Dim obj As Object = New SuperHero
If TypeOf obj Is SuperHero Then _
  Console.WriteLine("Is a SuperHero object.")

' Mark object for quick disposal
Using reader As StreamReader = File.OpenText("test.txt")
  Dim line As String = reader.ReadLine()
  While Not line Is Nothing
    line = reader.ReadLine()
  End While
End Using

SuperHero hero = new SuperHero();

// No "With" construct
hero.Name = "SpamMan";
hero.PowerLevel = 3;

hero.Defend("Laura Jones");
SuperHero.Rest();   // Calling static method

SuperHero hero2 = hero;   // Both reference the same object
hero2.Name = "WormWoman";
Console.WriteLine(hero.Name);   // Prints WormWoman

hero = null ;   // Free the object

if (hero == null)
  hero = new SuperHero();

Object obj = new SuperHero(); 
if (obj is SuperHero)
  Console.WriteLine("Is a SuperHero object.");

// Mark object for quick disposal
using (StreamReader reader = File.OpenText("test.txt")) {
  string line;
  while ((line = reader.ReadLine()) != null)




Structure StudentRecord
  Public name As String
  Public gpa As Single
  Public Sub New(ByVal name As String, ByVal gpa As Single) = name
    Me.gpa = gpa
  End Sub
End Structure

Dim stu As StudentRecord = New StudentRecord("Bob", 3.5)
Dim stu2 As StudentRecord = stu = "Sue"
Console.WriteLine(    ' Prints Bob
Console.WriteLine(  ' Prints Sue

struct StudentRecord {
  public string name;
  public float gpa;
  public StudentRecord(string name, float gpa) { = name;
    this.gpa = gpa;

StudentRecord stu = new StudentRecord("Bob", 3.5f);
StudentRecord stu2 = stu; = "Sue";
Console.WriteLine(;    // Prints Bob
Console.WriteLine(;   // Prints Sue




Private _size As Integer
Public Property Size() As Integer
    Return _size
End Get
Set (ByVal Value As Integer)
    If Value < 0 Then
      _size = 0
      _size = Value
    End If
End Set
End Property

foo.Size += 1

private int _size;
public int Size {
get {
    return _size;
set {
    if (value < 0)
      _size = 0;
      _size = value;



Delegates / Events


Delegate Sub MsgArrivedEventHandler(ByVal message As String)

Event MsgArrivedEvent As MsgArrivedEventHandler

' or to define an event which declares a delegate implicitly
Event MsgArrivedEvent(ByVal message As String)

AddHandler MsgArrivedEvent, AddressOfMy_MsgArrivedCallback
' Won't throw an exception if obj is Nothing
RaiseEvent MsgArrivedEvent("Test message")
RemoveHandler MsgArrivedEvent, AddressOfMy_MsgArrivedCallback

Imports System.Windows.Forms

Dim WithEvents MyButton As Button   ' WithEvents can't be used on local variable
MyButton = New Button

Private Sub MyButton_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles MyButton.Click
  MessageBox.Show(Me, "Button was clicked", "Info", _
    MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub

delegate void MsgArrivedEventHandler(string message);

event MsgArrivedEventHandler MsgArrivedEvent;

// Delegates must be used with events in C#
MsgArrivedEvent += new MsgArrivedEventHandler(My_MsgArrivedEventCallback);
MsgArrivedEvent("Test message");    // Throws exception if obj is null
MsgArrivedEvent -= new MsgArrivedEventHandler(My_MsgArrivedEventCallback);

using System.Windows.Forms;

Button MyButton = new Button(); 
MyButton.Click += new System.EventHandler(MyButton_Click);

private void MyButton_Click(object sender, System.EventArgs e) {
  MessageBox.Show(this, "Button was clicked", "Info",
    MessageBoxButtons.OK, MessageBoxIcon.Information);


Console I/O


Console.Write("What's your name? ")
Dim name As String = Console.ReadLine()
Console.Write("How old are you? ")
Dim age As Integer = Val(Console.ReadLine())
Console.WriteLine("{0} is {1} years old.", name, age) 
' or
Console.WriteLine(name & " is " & age & " years old.")
Dim c As Integer
c = Console.Read()    ' Read single char
Console.WriteLine(c)   ' Prints 65 if user enters "A"

Console.Write("What's your name? ");
string name = Console.ReadLine();
Console.Write("How old are you? ");
int age = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("{0} is {1} years old.", name, age);
// or
Console.WriteLine(name + " is " + age + " years old.");

int c = Console.Read();  // Read single char
Console.WriteLine(c);    // Prints 65 if user enters "A"


File I/O


Imports System.IO

' Write out to text file
Dim writer As StreamWriter = File.CreateText("c:\myfile.txt")
writer.WriteLine("Out to file.")

' Read all lines from text file
Dim reader As StreamReader = File.OpenText("c:\myfile.txt")
Dim line As String = reader.ReadLine()
While Not line Is Nothing
  line = reader.ReadLine()
End While

' Write out to binary file
Dim str As String = "Text data"
Dim num As Integer = 123
Dim binWriter As NewBinaryWriter(File.OpenWrite("c:\myfile.dat")) 

' Read from binary file
Dim binReader As NewBinaryReader(File.OpenRead("c:\myfile.dat"))
str = binReader.ReadString()
num = binReader.ReadInt32()

using System.IO;

// Write out to text file
StreamWriter writer = File.CreateText("c:\\myfile.txt");
writer.WriteLine("Out to file.");

// Read all lines from text file
StreamReader reader = File.OpenText("c:\\myfile.txt");
string line = reader.ReadLine();
while (line != null) {
  line = reader.ReadLine();

// Write out to binary file
string str = "Text data";
int num = 123;
BinaryWriter binWriter = new BinaryWriter(File.OpenWrite("c:\\myfile.dat"));

// Read from binary file
BinaryReader binReader = new BinaryReader(File.OpenRead("c:\\myfile.dat"));
str = binReader.ReadString();
num = binReader.ReadInt32();

Microsoft Certification Step-By-Step Road Map for .NET Development, SQL 2008 Server, Team Foundation and Sharepoint

I’ve put together, from the Microsoft Site a Step-By-Step plan for getting certifications by Microsoft in the areas of .Net 3.5 Development, Team Foundation Server, Sharepoint and SQL 2008.

I’ve listed in order that you need to study and take exams that makes the most sense. The links go back to the Microsoft site Training/Certification pages.  This list is to make it easy.  Just follow it down and you study the book or e-learning class, then you take the listed exam and you get the listed certification.

Step Order

Study Press Book or E-Learning

Take This Exam

Get This Certification


.NET 3.5 Development Track (See Notes for 2.0 Track)



Microsoft Press Book

· MCTS Self-Paced Training Kit (Exam 70-536):
Microsoft .NET Framework--Application Development Foundation,
Second Edition

Microsoft E-Learning

· 5161AE: Advanced development with the Microsoft .NET
Framework 2.0 Foundation (16 Hours)

· 5160AE: Core development with the Microsoft .NET
Framework 2.0 Foundation (14 Hours)

Exam 70-536



Microsoft Press Book

· MCTS Self-Paced Training Kit (Exam 70-562):
Microsoft .NET Framework 3.5 - ASP.NET

Microsoft E-Learning

· 6463AE: Visual Studio 2008: ASP.NET 3.5 (20 Hours)

Exam 70-562

MCTS: .NET Framework 3.5, ASP.NET Applications


Classroom Training

· 01: Learning Plan for Designing and Developing ASP.NET Applications
Using the Microsoft .NET Framework 3.5 (Exam 70-564) (1 Forms)

Exam 70-564

MCPD: ASP.NET Developer 3.5 on Visual Studio 2008

Note: 2.0 Track

Since the previous exam has no book at this time, you can also take the .NET 2.0 Track Instead take Exam, Exam 70-528 and Exam 70-547 instead for 2.0 Certification.


MCTS: .NET Framework 2.0, ASP.NET Applications
MCPD: Web Developer on Visual Studio 2005


Microsoft Press Book

· MCTS Self-Paced Training Kit (Exam 70-505):
Microsoft .NET Framework 3.5 -- Windows Forms Application Development

· MCTS Self-Paced Training Kit (Exam 70-526):
Microsoft .NET Framework 2.0 Windows-Based Client Development

Microsoft E-Learning

· 2546AE: Core Windows Client Development with
Microsoft Visual Studio 2005 (18 Hours)

· 2542AE: Advanced Data Access with
Microsoft Visual Studio 2005 (12 Hours)

· 2547AE: Advanced Windows Client Programming with
Microsoft Visual Studio 2005 (12 Hours)

· 2541AE: Core Data Access with
Microsoft Visual Studio 2005 (16 Hours)

Exam 70-505



Classroom Training

· 001: Learning Plan for Designing and Developing Windows
Applications Using the Microsoft .NET Framework 3.5 (Exam 70-563) (1 Forms)

Exam 70-563

MCPD: Windows Developer 3.5 on Visual Studio 2008

Note: 2.0 Track

Since the previous exam has no book at this time, you can also take the .NET 2.0 Track Instead take Exam, Exam 70-526 and Exam 70-548 instead for 2.0 Certification.


MCPD: Windows Developer on Visual Studio 2005


Microsoft Press Book

· MCTS Self-Paced Training Kit (Exam 70-561):
Microsoft .NET Framework 3.5 - ADO.NET

Microsoft E-Learning

· 6464AE: Visual Studio 2008: ADO.NET 3.5 (20 Hours)

Exam 70-561



Microsoft Press Book

· MCTS Self-Paced Training Kit (Exam 70-503):
Microsoft .NET Framework 3.0—Windows Communication Foundation

Microsoft E-Learning

· 6461AE: Visual Studio 2008:
Windows Communication Foundation (20 Hours)

Exam 70-503



Classroom Training

· 01: Learning Plan for Designing and Developing Enterprise Applications
Using the Microsoft .NET Framework 3.5 (Exam 70-565) (1 Forms)

Exam 70-565

MCPD: Enterprise Application Developer 3.5 on Visual Studio 2008

Note: 2.0 Track

Since the previous exam has no book at this time, you can also take the .NET 2.0 Track Instead take Exam ,Exam 70-529 and Exam 70-549 instead for 2.0 Certification.


MCPD: Enterprise Application Developer on Visual Studio 2005


SharePoint Certifications



Microsoft Press Books

· The Microsoft SharePoint Step by Step Kit:
Microsoft Windows SharePoint Services 3.0 Step by Step
and Microsoft Office SharePoint Designer 2007

Microsoft E-Learning

· 5403AE: MCTS (Exam 70-631):
Microsoft Windows SharePoint Services 3.0, Configuring (12 Hours)

Exam 70-631

MCTS: Microsoft Windows SharePoint Services 3.0 – Configuration


Microsoft Press Books

Inside Microsoft Office SharePoint Server 2007

Microsoft E-Learning

· 5404AE: MCTS (Exam 70-630):
Microsoft Office SharePoint Server 2007, Configuring (12 Hours)

· 3376AE: Implementing Enterprise Search Using
Sharepoint Technologies (8 Hours)

Exam 70-630

MCTS: Microsoft Office SharePoint Server 2007 – Configuration


Microsoft E-Learning

· 5392AE: Developing and Extending Microsoft Windows SharePoint
Services 3.0 with Visual Studio 2005 (12 Hours)

· 5385AE: Developing Solutions with Microsoft Windows SharePoint
Services 3.0 and Visual Studio 2005 (12 Hours)

Exam 70-541

MCTS: Microsoft Windows SharePoint Services 3.0 – Application Development


Microsoft E-Learning

· 6071AE: Developing Solutions with Microsoft Office SharePoint
Server 2007 and Visual Studio 2005 (12 Hours)

Exam 70-542

MCTS: Microsoft Office SharePoint Server 2007 – Application Development


Team Foundation Server Certification



Classroom Training

· 6215A: Implementing and Administering
Microsoft Visual Studio 2008 Team Foundation Server (2 Days)

Exam 70-510

MCTS: Microsoft Team Foundation Server: Configuration and Development


SQL 2008 Certifications



Microsoft E-Learning

· 6369AE: Implementing and Maintaining Microsoft SQL Server 2008 (16 Hours)

· 2778CE: MCTS (Exam 70-433): TS: Microsoft SQL Server 2008, Database Development (18 Hours)

Microsoft Press Books

· MCTS Self-Paced Training Kit (Exam 70-432):
Microsoft SQL Server 2008 - Implementation and Maintenance

Exam 70-432

MCTS: SQL Server 2008, Implementation and Maintenance


Classroom Training

· 01: Learning Plan for Designing, Optimizing and Maintaining a
Database Server Infrastructure
using SQL Server 2008 (Exam 70-450) (1 Forms)

Exam 70-450

MCITP: Database Administrator 2008


Microsoft E-Learning

· 2778CE: MCTS (Exam 70-433): TS: Microsoft SQL
Server 2008, Database Development (18 Hours)

Microsoft Press Books

· MCTS Self-Paced Training Kit (Exam 70-433):
Microsoft SQL Server 2008 - Database Development

Exam 70-433

MCTS: SQL Server 2008, Database Development


Classroom Training

· 01: Learning Plan for Designing Database Solutions and Data
Access using SQL Server 2008 (Exam 70-451) (1 Forms)

Exam 70-451

MCITP: Database Developer 2008


Microsoft Press Books

· MCTS Self-Paced Training Kit (Exam 70-448):
Microsoft SQL Server 2008 -
Business Intelligence Development and Maintenance

Exam 70-448

MCTS: SQL Server 2008, Business Intelligence Development and Maintenance


Microsoft Press Books

· Microsoft SQL Server 2008 Reporting Services Step by Step

· Microsoft SQL Server 2008 MDX Step by Step

Exam 70-452

MCITP: Business Intelligence Developer 2008

Sending Generic.List collection back to WCF ObservableCollection

Found a good article and helped with a problem I was having, trying to send a list of collection back to a WCF service that was set to accept Observable Collections. 


In WPF/Silverlight, binding UI objects such as DataGrid or ListBox to collections is typically done using an ObservableCollectioninstead of the generic List object. This way, our UI is automatically synchronized since the observable collection provides event notification to WPF data binding engine whenever items are added, removed, or when the whole list is refreshed. The LINQ extension methods that return a collection actually return IEnumerable<T>. The .NET framework for Silverlight provides built-in extension methods to convert IEnumerable<T> to List<T> and Array<T> but there’s no method available to convert the collection to ObservableCollection<T>(WPF developers can simply use this constructor overload) . So here’s one you may find useful:

  1. Public Static Class CollectionExtensions
  2. {
  3.     public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> enumerableList)
  4.     {
  5.         if (enumerableList != null)
  6.         {
  7.             //create an emtpy observable collection object
  8.             var observableCollection = new ObservableCollection<T>();
  10.             //loop through all the records and add to observable collection object
  11.             foreach (var item in enumerableList)
  12.                 observableCollection.Add(item);
  14.             //return the populated observable collection
  15.             return observableCollection;
  16.         }
  17.         return null;
  18.     }
  19. }

Extension methods are very powerful and I am planning to post an example demonstrating their potential.

I’ve converted the above example to VB.Net version for you to copy.

Public Shared Function ToObservableCollection(Of T)(ByVal enumerableList As IEnumerable(Of T)) As ObservableCollection(Of T)
    If enumerableList IsNot Nothing Then
        'create an emtpy observable collection object
        Dim observableCollection As New ObservableCollection(Of T)()

        'loop through all the records and add to observable collection object
        For Each item As T In enumerableList

        'return the populated observable collection
        Return observableCollection
    End If
    Return Nothing
End Function

Now you can call your List and send it back as a ObservableCollection